rack-oauth2 0.14.4 → 0.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rack-oauth2 (0.14.2)
4
+ rack-oauth2 (0.14.4)
5
5
  activesupport (>= 2.3)
6
6
  attr_required (>= 0.0.5)
7
7
  httpclient (>= 2.2.0.2)
@@ -12,7 +12,7 @@ PATH
12
12
  GEM
13
13
  remote: http://rubygems.org/
14
14
  specs:
15
- activesupport (3.2.1)
15
+ activesupport (3.2.7)
16
16
  i18n (~> 0.6)
17
17
  multi_json (~> 1.0)
18
18
  addressable (2.2.7)
@@ -26,13 +26,12 @@ GEM
26
26
  crack (0.3.1)
27
27
  diff-lcs (1.1.3)
28
28
  hashie (1.2.0)
29
- httpclient (2.2.4)
29
+ httpclient (2.2.5)
30
30
  i18n (0.6.0)
31
31
  jruby-openssl (0.7.6.1)
32
32
  bouncy-castle-java (>= 1.5.0146.1)
33
- json (1.6.5)
34
- json (1.6.5-java)
35
- multi_json (1.1.0)
33
+ json (1.7.4)
34
+ multi_json (1.3.6)
36
35
  rack (1.4.1)
37
36
  rake (0.9.2.2)
38
37
  rspec (2.8.0)
@@ -9,8 +9,8 @@ http://tools.ietf.org/html/draft-ietf-oauth-v2-18
9
9
  The OAuth 2.0 Protocol: Bearer Tokens (draft 06)
10
10
  http://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-06
11
11
 
12
- HTTP Authentication: MAC Access Authentication (draft 00)
13
- http://www.ietf.org/id/draft-ietf-oauth-v2-http-mac-00.txt
12
+ HTTP Authentication: MAC Access Authentication (draft 01)
13
+ http://www.ietf.org/id/draft-ietf-oauth-v2-http-mac-01.txt
14
14
 
15
15
  == Installation
16
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.14.4
1
+ 0.14.5
@@ -3,12 +3,12 @@ module Rack
3
3
  class AccessToken
4
4
  class MAC < AccessToken
5
5
  attr_required :mac_key, :mac_algorithm
6
- attr_optional :issued_at, :ext
7
- attr_reader :nonce, :body_hash, :signature
6
+ attr_optional :ts, :ext_verifier
7
+ attr_reader :nonce, :signature, :ext
8
8
 
9
9
  def initialize(attributes = {})
10
10
  super(attributes)
11
- @issued_at ||= Time.now.utc
11
+ @ts ||= Time.now.utc
12
12
  end
13
13
 
14
14
  def token_response
@@ -18,13 +18,16 @@ module Rack
18
18
  )
19
19
  end
20
20
 
21
- def verify!(request)
22
- if request.body_hash.present?
23
- BodyHash.new(
24
- :raw_body => request.body.read,
21
+ def verify!(request)
22
+
23
+ body = request.body.read
24
+ if self.ext_verifier.present?
25
+ self.ext_verifier.new(
26
+ :raw_body => body,
25
27
  :algorithm => self.mac_algorithm
26
- ).verify!(request.body_hash)
28
+ ).verify!(request.ext)
27
29
  end
30
+
28
31
  Signature.new(
29
32
  :secret => self.mac_key,
30
33
  :algorithm => self.mac_algorithm,
@@ -33,7 +36,7 @@ module Rack
33
36
  :request_uri => request.fullpath,
34
37
  :host => request.host,
35
38
  :port => request.port,
36
- :body_hash => request.body_hash,
39
+ :ts => request.ts,
37
40
  :ext => request.ext
38
41
  ).verify!(request.signature)
39
42
  rescue Verifier::VerificationFailed => e
@@ -42,12 +45,14 @@ module Rack
42
45
 
43
46
  def authenticate(request)
44
47
  @nonce = generate_nonce
45
- if request.contenttype == 'application/x-www-form-urlencoded'
46
- @body_hash = BodyHash.new(
48
+
49
+ if self.ext_verifier.present?
50
+ @ext = self.ext_verifier.new(
47
51
  :raw_body => request.body,
48
52
  :algorithm => self.mac_algorithm
49
53
  ).calculate
50
54
  end
55
+
51
56
  @signature = Signature.new(
52
57
  :secret => self.mac_key,
53
58
  :algorithm => self.mac_algorithm,
@@ -56,26 +61,27 @@ module Rack
56
61
  :request_uri => request.header.create_query_uri,
57
62
  :host => request.header.request_uri.host,
58
63
  :port => request.header.request_uri.port,
59
- :body_hash => self.body_hash,
60
- :ext => self.ext
64
+ :ts => self.ts,
65
+ :ext => @ext
61
66
  ).calculate
67
+
62
68
  request.header['Authorization'] = authorization_header
63
69
  end
64
70
 
65
71
  private
66
72
 
67
73
  def authorization_header
68
- header = "MAC"
69
- header << " id=\"#{access_token}\","
70
- header << " nonce=\"#{nonce}\","
71
- header << " bodyhash=\"#{body_hash}\"," if body_hash.present?
72
- header << " ext=\"#{ext}\"," if ext.present?
73
- header << " mac=\"#{signature}\""
74
+ header = "MAC id=\"#{access_token}\""
75
+ header << ", nonce=\"#{nonce}\""
76
+ header << ", ts=\"#{ts.to_i}\""
77
+ header << ", mac=\"#{signature}\""
78
+ header << ", ext=\"#{ext}\"" if @ext.present?
79
+ header
74
80
  end
75
81
 
76
82
  def generate_nonce
77
83
  [
78
- (Time.now.utc - @issued_at).to_i,
84
+ (Time.now.utc - @ts).to_i,
79
85
  SecureRandom.hex
80
86
  ].join(':')
81
87
  end
@@ -85,5 +91,5 @@ module Rack
85
91
  end
86
92
 
87
93
  require 'rack/oauth2/access_token/mac/verifier'
88
- require 'rack/oauth2/access_token/mac/body_hash'
94
+ require 'rack/oauth2/access_token/mac/sha256_hex_verifier'
89
95
  require 'rack/oauth2/access_token/mac/signature'
@@ -2,11 +2,13 @@ module Rack
2
2
  module OAuth2
3
3
  class AccessToken
4
4
  class MAC
5
- class BodyHash < Verifier
5
+ class Sha256HexVerifier < Verifier
6
6
  attr_optional :raw_body
7
7
 
8
8
  def calculate
9
- Rack::OAuth2::Util.base64_encode hash_generator.digest(raw_body)
9
+ return nil if raw_body.nil?
10
+
11
+ OpenSSL::Digest::SHA256.new.digest(raw_body).unpack('H*').first
10
12
  end
11
13
  end
12
14
  end
@@ -3,8 +3,8 @@ module Rack
3
3
  class AccessToken
4
4
  class MAC
5
5
  class Signature < Verifier
6
- attr_required :secret, :nonce, :method, :request_uri, :host, :port
7
- attr_optional :body_hash, :ext, :query
6
+ attr_required :secret, :ts, :nonce, :method, :request_uri, :host, :port
7
+ attr_optional :ext, :query
8
8
 
9
9
  def calculate
10
10
  Rack::OAuth2::Util.base64_encode OpenSSL::HMAC.digest(
@@ -16,12 +16,12 @@ module Rack
16
16
 
17
17
  def normalized_request_string
18
18
  [
19
+ ts.to_i,
19
20
  nonce,
20
21
  method.to_s.upcase,
21
22
  request_uri,
22
23
  host,
23
24
  port,
24
- body_hash || '',
25
25
  ext || '',
26
26
  nil
27
27
  ].join("\n")
@@ -18,6 +18,7 @@ module Rack
18
18
  end
19
19
 
20
20
  def verify!(expected)
21
+ puts "verifying #{expected} = #{self.calculate}"
21
22
  if expected == self.calculate
22
23
  :verified
23
24
  else
@@ -11,13 +11,13 @@ module Rack
11
11
  private
12
12
 
13
13
  class Request < Resource::Request
14
- attr_reader :nonce, :body_hash, :ext, :signature
14
+ attr_reader :nonce, :ts, :ext, :signature
15
15
 
16
16
  def setup!
17
17
  auth_params = Rack::Auth::Digest::Params.parse(@auth_header.params).with_indifferent_access
18
18
  @access_token = auth_params[:id]
19
19
  @nonce = auth_params[:nonce]
20
- @body_hash = auth_params[:bodyhash]
20
+ @ts = auth_params[:ts]
21
21
  @ext = auth_params[:ext]
22
22
  @signature = auth_params[:mac]
23
23
  self
@@ -51,6 +51,7 @@ module Rack
51
51
  rescue
52
52
  false
53
53
  end
54
+
54
55
  end
55
56
  end
56
57
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rack::OAuth2::AccessToken::MAC::Sha256HexVerifier do
4
+
5
+ # From the example of webtopay wallet API spec
6
+ # ref) https://www.webtopay.com/wallet/#authentication
7
+ context 'when example from webtopay wallet API' do
8
+ subject do
9
+ Rack::OAuth2::AccessToken::MAC::Sha256HexVerifier.new(
10
+ :algorithm => 'hmac-sha-256',
11
+ :raw_body => 'grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=http%3A%2F%2Flocalhost%2Fabc'
12
+ )
13
+ end
14
+ its(:calculate) { should == '21fb73c40b589622d0c78e9cd8900f89d9472aa724d0e5c3eca9ac1cd9d2a6d5' }
15
+ end
16
+
17
+
18
+ end
@@ -1,43 +1,59 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rack::OAuth2::AccessToken::MAC::Signature do
4
+ # From the example of Webtopay wallet API
5
+ # ref) https://www.webtopay.com/wallet/
6
+ context 'when ext is not given' do
7
+ subject do
8
+ Rack::OAuth2::AccessToken::MAC::Signature.new(
9
+ :secret => 'IrdTc8uQodU7PRpLzzLTW6wqZAO6tAMU',
10
+ :algorithm => 'hmac-sha-256',
11
+ :nonce => 'dj83hs9s',
12
+ :ts => 1336363200,
13
+ :method => 'GET',
14
+ :request_uri => '/wallet/rest/api/v1/payment/123',
15
+ :host => 'www.webtopay.com',
16
+ :port => 443
17
+ )
18
+ end
19
+ its(:calculate) { should == 'OZE9fTk2qiRtL1jb01L8lRxC66PTiAGhMDEmboeVeLs=' }
20
+ end
4
21
 
5
- # From the example of MAC spec section 1.2
6
- # ref) http://tools.ietf.org/pdf/draft-ietf-oauth-v2-http-mac-00.pdf
7
- context 'when body_hash is given' do
22
+ # From the example of MAC spec section 1.1
23
+ # ref) http://tools.ietf.org/pdf/draft-ietf-oauth-v2-http-mac-01.pdf
24
+ context 'when ext is not given' do
8
25
  subject do
9
26
  Rack::OAuth2::AccessToken::MAC::Signature.new(
10
- :secret => '8yfrufh348h',
11
- :algorithm => 'hmac-sha-1',
12
- :nonce => '273156:di3hvdf8',
13
- :method => 'POST',
14
- :request_uri => '/request',
15
- :host => 'example.com',
16
- :port => 80,
17
- :body_hash => 'k9kbtCIy0CkI3/FEfpS/oIDjk6k=',
18
- :ext => nil
27
+ :secret => '489dks293j39',
28
+ :algorithm => 'hmac-sha-1',
29
+ :nonce => 'dj83hs9s',
30
+ :ts => 1336363200,
31
+ :method => 'GET',
32
+ :request_uri => '/resource/1?b=1&a=2',
33
+ :host => 'example.com',
34
+ :port => 80
19
35
  )
20
36
  end
21
- its(:calculate) { should == 'W7bdMZbv9UWOTadASIQHagZyirA=' }
37
+ its(:calculate) { should == '6T3zZzy2Emppni6bzL7kdRxUWL4=' }
22
38
  end
23
39
 
24
40
  # From the example of MAC spec section 3.2
25
- # ref) http://tools.ietf.org/pdf/draft-ietf-oauth-v2-http-mac-00.pdf
26
- context 'otherwize' do
41
+ # ref) http://tools.ietf.org/pdf/draft-ietf-oauth-v2-http-mac-01.pdf
42
+ context 'otherwise' do
27
43
  subject do
28
44
  Rack::OAuth2::AccessToken::MAC::Signature.new(
29
45
  :secret => '489dks293j39',
30
46
  :algorithm => 'hmac-sha-1',
31
- :nonce => '264095:dj83hs9s',
32
- :method => 'GET',
33
- :request_uri => '/resource/1?b=1&a=2',
47
+ :nonce => '7d8f3e4a',
48
+ :ts => 264095,
49
+ :method => 'POST',
50
+ :request_uri => '/request?b5=%3D%253D&a3=a&c%40=&a2=r%20b&c2&a3=2+q',
34
51
  :host => 'example.com',
35
52
  :port => 80,
36
- :body_hash => nil,
37
- :ext => nil
53
+ :ext => 'a,b,c'
38
54
  )
39
55
  end
40
- its(:calculate) { should == 'SLDJd4mg43cjQfElUs3Qub4L6xE=' }
56
+ its(:calculate) { should == '+txL5oOFHGYjrfdNYH5VEzROaBY=' }
41
57
  end
42
58
 
43
59
  end
@@ -20,4 +20,6 @@ describe Rack::OAuth2::AccessToken::MAC::Verifier do
20
20
  expect { verifier.send(:hash_generator) }.should raise_error(StandardError, 'Unsupported Algorithm')
21
21
  end
22
22
  end
23
+
24
+
23
25
  end
@@ -1,15 +1,24 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rack::OAuth2::AccessToken::MAC do
4
+ let(:ts) { 1305820234 }
4
5
  let :token do
5
6
  Rack::OAuth2::AccessToken::MAC.new(
6
7
  :access_token => 'access_token',
7
8
  :mac_key => 'secret',
8
9
  :mac_algorithm => 'hmac-sha-256',
9
- :issued_at => issued_at
10
+ :ts => ts
11
+ )
12
+ end
13
+ let :token_with_ext_verifier do
14
+ Rack::OAuth2::AccessToken::MAC.new(
15
+ :access_token => 'access_token',
16
+ :mac_key => 'secret',
17
+ :mac_algorithm => 'hmac-sha-256',
18
+ :ts => ts,
19
+ :ext_verifier => Rack::OAuth2::AccessToken::MAC::Sha256HexVerifier
10
20
  )
11
21
  end
12
- let(:issued_at) { 1305820455 }
13
22
  let(:nonce) { '1000:51e74de734c05613f37520872e68db5f' }
14
23
  let(:resource_endpoint) { 'https://server.example.com/resources/fake' }
15
24
  subject { token }
@@ -32,17 +41,18 @@ describe Rack::OAuth2::AccessToken::MAC do
32
41
  describe 'verify!' do
33
42
  let(:request) { Rack::OAuth2::Server::Resource::MAC::Request.new(env) }
34
43
 
35
- context 'when no body_hash is given' do
44
+ context 'when no ext_verifier is given' do
36
45
  let(:env) do
37
46
  Rack::MockRequest.env_for(
38
47
  '/protected_resources',
39
- 'HTTP_AUTHORIZATION' => %{MAC id="access_token", nonce="#{nonce}", mac="#{signature}"}
48
+ 'HTTP_AUTHORIZATION' => %{MAC id="access_token", nonce="#{nonce}", ts="#{ts}" mac="#{signature}"}
40
49
  )
41
50
  end
42
51
 
43
52
  context 'when signature is valid' do
44
- let(:signature) { 'nbQj0NdvSBKdwvw1yX6wpQ4EwrQKBg/r3lqwJGcthDU=' }
53
+ let(:signature) { 'BgooS/voPOZWLwoVfx4+zbC3xAVKW3jtjhKYOfIGZOA=' }
45
54
  it do
55
+
46
56
  token.verify!(request.setup!).should == :verified
47
57
  end
48
58
  end
@@ -58,7 +68,7 @@ describe Rack::OAuth2::AccessToken::MAC do
58
68
  end
59
69
  end
60
70
 
61
- context 'when body_hash is given' do
71
+ context 'when ext_verifier is given' do
62
72
  let(:env) do
63
73
  Rack::MockRequest.env_for(
64
74
  '/protected_resources',
@@ -66,29 +76,30 @@ describe Rack::OAuth2::AccessToken::MAC do
66
76
  :params => {
67
77
  :key1 => 'value1'
68
78
  },
69
- 'HTTP_AUTHORIZATION' => %{MAC id="access_token", nonce="#{nonce}", bodyhash="#{body_hash}", mac="#{signature}"}
79
+ 'HTTP_AUTHORIZATION' => %{MAC id="access_token", nonce="#{nonce}", ts="#{ts}", mac="#{signature}", ext="#{ext}"}
70
80
  )
71
81
  end
72
82
  let(:signature) { 'invalid' }
73
83
 
74
- context 'when body_hash is invalid' do
75
- let(:body_hash) { 'invalid' }
84
+ context 'when ext is invalid' do
85
+ let(:ext) { 'invalid' }
76
86
  it do
77
- expect { token.verify!(request.setup!) }.should raise_error(
87
+ expect { token_with_ext_verifier.verify!(request.setup!) }.should raise_error(
78
88
  Rack::OAuth2::Server::Resource::MAC::Unauthorized,
79
- 'invalid_token :: BodyHash Invalid'
89
+ 'invalid_token :: Sha256HexVerifier Invalid'
80
90
  )
81
91
  end
82
92
  end
83
93
 
84
- context 'when body_hash is valid' do
85
- let(:body_hash) { 'TPzUbFn1S16mpfmwXCi1L+8oZHRxlLX9/D1ZwAV781o=' }
94
+ context 'when ext is valid' do
95
+ let(:ext) { '4cfcd46c59f54b5ea6a5f9b05c28b52fef2864747194b5fdfc3d59c0057bf35a' }
86
96
 
87
97
  context 'when signature is valid' do
88
- let(:signature) { 'ebFlQPMO3WzEZ3ncuIFnVK7IsVt+JEorQEEMJTiz/t8=' }
98
+ let(:signature) { 'dZYR54n+Lym5qCRRmDqmRZ71rG+bkjSWmqrOv8OjYHk=' }
89
99
  it do
90
100
  Time.fix(Time.at(1302361200)) do
91
- token.verify!(request.setup!).should == :verified
101
+
102
+ token_with_ext_verifier.verify!(request.setup!).should == :verified
92
103
  end
93
104
  end
94
105
  end
@@ -107,13 +118,25 @@ describe Rack::OAuth2::AccessToken::MAC do
107
118
 
108
119
  describe '.authenticate' do
109
120
  let(:request) { HTTPClient.new.send(:create_request, :post, URI.parse(resource_endpoint), {}, {:hello => "world"}, {}) }
110
- let(:body_hash) { 'PQEeCVAqhFUqD4rhEtAkzCwRVZfjpXfV9JAHkCwiHcU=' }
111
- let(:signature) { 'aL2Oh8gWrCAtJ/Xu6XMtJb6ZsYQT+GxQTs/TgJDQ7ZY=' }
121
+ context 'when no ext_verifier is given' do
122
+ let(:signature) { 'pOBaL6HRawe4tUPmcU4vJEj1f2GJqrbQOlCcdAYgI/s=' }
112
123
 
113
- it 'should set Authorization header' do
114
- token.should_receive(:generate_nonce).and_return(nonce)
115
- request.header.should_receive(:[]=).with('Authorization', "MAC id=\"access_token\", nonce=\"#{nonce}\", bodyhash=\"#{body_hash}\", mac=\"#{signature}\"")
116
- token.authenticate(request)
124
+ it 'should set Authorization header' do
125
+ token.should_receive(:generate_nonce).and_return(nonce)
126
+ request.header.should_receive(:[]=).with('Authorization', "MAC id=\"access_token\", nonce=\"#{nonce}\", ts=\"#{ts.to_i}\", mac=\"#{signature}\"")
127
+ token.authenticate(request)
128
+ end
117
129
  end
130
+
131
+ context 'when ext_verifier is given' do
132
+ let(:signature) { 'vgU0fj6rSpwUCAoCOrXlu8pZBR8a5Q5xIVlB4MCvJeM=' }
133
+ let(:ext) { '3d011e09502a84552a0f8ae112d024cc2c115597e3a577d5f49007902c221dc5' }
134
+ it 'should set Authorization header with ext_verifier' do
135
+ token_with_ext_verifier.should_receive(:generate_nonce).and_return(nonce)
136
+ request.header.should_receive(:[]=).with('Authorization', "MAC id=\"access_token\", nonce=\"#{nonce}\", ts=\"#{ts.to_i}\", mac=\"#{signature}\", ext=\"#{ext}\"")
137
+ token_with_ext_verifier.authenticate(request)
138
+ end
139
+ end
140
+
118
141
  end
119
142
  end
@@ -72,12 +72,12 @@ describe Rack::OAuth2::Server::Resource::MAC do
72
72
  end
73
73
 
74
74
  context 'when other required params are invalid' do
75
- let(:env) { Rack::MockRequest.env_for('/protected_resource', 'HTTP_AUTHORIZATION' => 'MAC id="valid_token", nonce="51e74de734c05613f37520872e68db5f", mac="invalid""') }
75
+ let(:env) { Rack::MockRequest.env_for('/protected_resource', 'HTTP_AUTHORIZATION' => 'MAC id="valid_token", nonce="51e74de734c05613f37520872e68db5f", ts="1305820234", mac="invalid""') }
76
76
  it_behaves_like :unauthorized_mac_request
77
77
  end
78
78
 
79
79
  context 'when all required params are valid' do
80
- let(:env) { Rack::MockRequest.env_for('/protected_resource', 'HTTP_AUTHORIZATION' => 'MAC id="valid_token", nonce="51e74de734c05613f37520872e68db5f", mac="H1laxA3HXmg4jjyhDmWUEGpdZwc6tcA4U9OMAUXtoFs="') }
80
+ let(:env) { Rack::MockRequest.env_for('/protected_resource', 'HTTP_AUTHORIZATION' => 'MAC id="valid_token", nonce="51e74de734c05613f37520872e68db5f", ts="1305820234", mac="26JP6MMZyAHLHeMU8+m+NbVJgZbikp5SlT86/a62pwg="') }
81
81
  it_behaves_like :authenticated_mac_request
82
82
  end
83
83
  end
metadata CHANGED
@@ -1,165 +1,185 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack-oauth2
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 14
8
- - 4
9
- version: 0.14.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.14.5
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - nov matake
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2012-02-26 00:00:00 +09:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rack
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 1
30
- version: "1.1"
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '1.1'
31
22
  type: :runtime
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: json
35
23
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- segments:
41
- - 1
42
- - 4
43
- - 3
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '1.1'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
44
37
  version: 1.4.3
45
38
  type: :runtime
46
- version_requirements: *id002
47
- - !ruby/object:Gem::Dependency
48
- name: httpclient
49
39
  prerelease: false
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 2
56
- - 2
57
- - 0
58
- - 2
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.3
46
+ - !ruby/object:Gem::Dependency
47
+ name: httpclient
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
59
53
  version: 2.2.0.2
60
54
  type: :runtime
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: activesupport
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- segments:
70
- - 2
71
- - 3
72
- version: "2.3"
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.2.0.2
62
+ - !ruby/object:Gem::Dependency
63
+ name: activesupport
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '2.3'
73
70
  type: :runtime
74
- version_requirements: *id004
75
- - !ruby/object:Gem::Dependency
76
- name: i18n
77
71
  prerelease: false
78
- requirement: &id005 !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- segments:
83
- - 0
84
- version: "0"
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '2.3'
78
+ - !ruby/object:Gem::Dependency
79
+ name: i18n
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
85
86
  type: :runtime
86
- version_requirements: *id005
87
- - !ruby/object:Gem::Dependency
88
- name: attr_required
89
87
  prerelease: false
90
- requirement: &id006 !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- segments:
95
- - 0
96
- - 0
97
- - 5
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: attr_required
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
98
101
  version: 0.0.5
99
102
  type: :runtime
100
- version_requirements: *id006
101
- - !ruby/object:Gem::Dependency
102
- name: rake
103
103
  prerelease: false
104
- requirement: &id007 !ruby/object:Gem::Requirement
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
108
- segments:
109
- - 0
110
- - 8
111
- version: "0.8"
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.0.5
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0.8'
112
118
  type: :development
113
- version_requirements: *id007
114
- - !ruby/object:Gem::Dependency
115
- name: rcov
116
119
  prerelease: false
117
- requirement: &id008 !ruby/object:Gem::Requirement
118
- requirements:
119
- - - ">="
120
- - !ruby/object:Gem::Version
121
- segments:
122
- - 0
123
- - 9
124
- version: "0.9"
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0.8'
126
+ - !ruby/object:Gem::Dependency
127
+ name: cover_me
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 1.2.0
125
134
  type: :development
126
- version_requirements: *id008
127
- - !ruby/object:Gem::Dependency
128
- name: rspec
129
135
  prerelease: false
130
- requirement: &id009 !ruby/object:Gem::Requirement
131
- requirements:
132
- - - ">="
133
- - !ruby/object:Gem::Version
134
- segments:
135
- - 2
136
- version: "2"
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: 1.2.0
142
+ - !ruby/object:Gem::Dependency
143
+ name: rspec
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '2'
137
150
  type: :development
138
- version_requirements: *id009
139
- - !ruby/object:Gem::Dependency
140
- name: webmock
141
151
  prerelease: false
142
- requirement: &id010 !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- segments:
147
- - 1
148
- - 6
149
- - 2
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '2'
158
+ - !ruby/object:Gem::Dependency
159
+ name: webmock
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
150
165
  version: 1.6.2
151
166
  type: :development
152
- version_requirements: *id010
153
- description: OAuth 2.0 Server & Client Library. Both Bearer and MAC token type are supported.
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: 1.6.2
174
+ description: OAuth 2.0 Server & Client Library. Both Bearer and MAC token type are
175
+ supported.
154
176
  email: nov@matake.jp
155
177
  executables: []
156
-
157
178
  extensions: []
158
-
159
- extra_rdoc_files:
179
+ extra_rdoc_files:
160
180
  - LICENSE
161
181
  - README.rdoc
162
- files:
182
+ files:
163
183
  - .document
164
184
  - .gitignore
165
185
  - .rspec
@@ -176,7 +196,7 @@ files:
176
196
  - lib/rack/oauth2/access_token/bearer.rb
177
197
  - lib/rack/oauth2/access_token/legacy.rb
178
198
  - lib/rack/oauth2/access_token/mac.rb
179
- - lib/rack/oauth2/access_token/mac/body_hash.rb
199
+ - lib/rack/oauth2/access_token/mac/sha256_hex_verifier.rb
180
200
  - lib/rack/oauth2/access_token/mac/signature.rb
181
201
  - lib/rack/oauth2/access_token/mac/verifier.rb
182
202
  - lib/rack/oauth2/client.rb
@@ -230,7 +250,7 @@ files:
230
250
  - spec/rack/oauth2/access_token/authenticator_spec.rb
231
251
  - spec/rack/oauth2/access_token/bearer_spec.rb
232
252
  - spec/rack/oauth2/access_token/legacy_spec.rb
233
- - spec/rack/oauth2/access_token/mac/body_hash_spec.rb
253
+ - spec/rack/oauth2/access_token/mac/sha256_hex_verifier_spec.rb
234
254
  - spec/rack/oauth2/access_token/mac/signature_spec.rb
235
255
  - spec/rack/oauth2/access_token/mac/verifier_spec.rb
236
256
  - spec/rack/oauth2/access_token/mac_spec.rb
@@ -263,39 +283,32 @@ files:
263
283
  - spec/rack/oauth2/server/token_spec.rb
264
284
  - spec/rack/oauth2/util_spec.rb
265
285
  - spec/spec_helper.rb
266
- has_rdoc: true
267
286
  homepage: http://github.com/nov/rack-oauth2
268
287
  licenses: []
269
-
270
288
  post_install_message:
271
- rdoc_options:
289
+ rdoc_options:
272
290
  - --charset=UTF-8
273
- require_paths:
291
+ require_paths:
274
292
  - lib
275
- required_ruby_version: !ruby/object:Gem::Requirement
276
- requirements:
277
- - - ">="
278
- - !ruby/object:Gem::Version
279
- segments:
280
- - 0
281
- version: "0"
282
- required_rubygems_version: !ruby/object:Gem::Requirement
283
- requirements:
284
- - - ">="
285
- - !ruby/object:Gem::Version
286
- segments:
287
- - 1
288
- - 3
289
- - 6
293
+ required_ruby_version: !ruby/object:Gem::Requirement
294
+ none: false
295
+ requirements:
296
+ - - ! '>='
297
+ - !ruby/object:Gem::Version
298
+ version: '0'
299
+ required_rubygems_version: !ruby/object:Gem::Requirement
300
+ none: false
301
+ requirements:
302
+ - - ! '>='
303
+ - !ruby/object:Gem::Version
290
304
  version: 1.3.6
291
305
  requirements: []
292
-
293
306
  rubyforge_project:
294
- rubygems_version: 1.3.6
307
+ rubygems_version: 1.8.24
295
308
  signing_key:
296
309
  specification_version: 3
297
310
  summary: OAuth 2.0 Server & Client Library - Both Bearer and MAC token type are supported
298
- test_files:
311
+ test_files:
299
312
  - spec/helpers/time.rb
300
313
  - spec/helpers/webmock_helper.rb
301
314
  - spec/mock_response/errors/invalid_request.json
@@ -310,7 +323,7 @@ test_files:
310
323
  - spec/rack/oauth2/access_token/authenticator_spec.rb
311
324
  - spec/rack/oauth2/access_token/bearer_spec.rb
312
325
  - spec/rack/oauth2/access_token/legacy_spec.rb
313
- - spec/rack/oauth2/access_token/mac/body_hash_spec.rb
326
+ - spec/rack/oauth2/access_token/mac/sha256_hex_verifier_spec.rb
314
327
  - spec/rack/oauth2/access_token/mac/signature_spec.rb
315
328
  - spec/rack/oauth2/access_token/mac/verifier_spec.rb
316
329
  - spec/rack/oauth2/access_token/mac_spec.rb
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Rack::OAuth2::AccessToken::MAC::BodyHash do
4
- # From the example of MAC spec section 3.2
5
- # ref) http://tools.ietf.org/pdf/draft-ietf-oauth-v2-http-mac-00.pdf
6
- subject do
7
- Rack::OAuth2::AccessToken::MAC::BodyHash.new(
8
- :algorithm => 'hmac-sha-1',
9
- :raw_body => 'hello=world%21'
10
- )
11
- end
12
- its(:calculate) { should == 'k9kbtCIy0CkI3/FEfpS/oIDjk6k=' }
13
- end