oauth2-rack 0.0.4 → 0.0.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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oauth2-rack (0.0.4)
4
+ oauth2-rack (0.0.5)
5
5
  multi_json
6
6
  rack
7
7
 
@@ -35,7 +35,7 @@ class OAuth2::Rack::Authorization::ClientCredentials::AccessTokenIssuer
35
35
  def find_acccess_token(opts)
36
36
  if @issuer
37
37
  @issuer.call(opts)
38
- end || { 'error' => 'unauthorized_client' }
38
+ end || { 'error' => 'invalid_grant' }
39
39
  end
40
40
 
41
41
  def successful_response(response_object)
@@ -37,7 +37,7 @@ class OAuth2::Rack::Authorization::Password::AccessTokenIssuer
37
37
  def find_acccess_token(opts)
38
38
  if @issuer
39
39
  @issuer.call(opts)
40
- end || { 'error' => 'unauthorized_client' }
40
+ end || { 'error' => 'invalid_grant' }
41
41
  end
42
42
 
43
43
  def successful_response(response_object)
@@ -0,0 +1,55 @@
1
+ # @see 6. Refreshing an access token
2
+ require 'oauth2/rack'
3
+ require 'multi_json'
4
+
5
+ class OAuth2::Rack::Authorization::RefreshToken::AccessTokenIssuer
6
+ def initialize(app, opts = {}, &issuer)
7
+ @app = app
8
+
9
+ @issuer = issuer || opts[:issuer]
10
+ end
11
+
12
+ def call(env)
13
+ request = Rack::Request.new(env)
14
+ unless request['grant_type'] == 'refresh_token'
15
+ return error_response(:error => 'invalid_request')
16
+ end
17
+
18
+ # oauth2.client is set in client authentication
19
+ access_token = find_acccess_token(:grant_type => 'refresh_token',
20
+ :refresh_token => request['refresh_token'],
21
+ :client => env['oauth2.client'],
22
+ :scope => request['scope'])
23
+
24
+ if access_token['error']
25
+ error_response(access_token)
26
+ else
27
+ successful_response(access_token)
28
+ end
29
+ end
30
+
31
+ private
32
+ def find_acccess_token(opts)
33
+ if @issuer
34
+ @issuer.call(opts)
35
+ end || { 'error' => 'invalid_grant' }
36
+ end
37
+
38
+ def successful_response(response_object)
39
+ headers = {
40
+ 'Content-Type' => 'application/json;charset=UTF-8',
41
+ 'Cache-Control' => 'no-store',
42
+ 'Pragma' => 'no-cache'
43
+ }
44
+
45
+ [200, headers, [MultiJson.encode(response_object)]]
46
+ end
47
+
48
+ def error_response(response_object)
49
+ headers = {
50
+ 'Content-Type' => 'application/json;charset=UTF-8'
51
+ }
52
+
53
+ [400, headers, [MultiJson.encode(response_object)]]
54
+ end
55
+ end
@@ -0,0 +1,4 @@
1
+ module OAuth2::Rack::Authorization::RefreshToken
2
+ autoload :AccessTokenIssuer, 'oauth2/rack/authorization/refresh_token/access_token_issuer'
3
+ end
4
+
@@ -2,5 +2,6 @@
2
2
  module OAuth2::Rack::Authorization
3
3
  autoload :ClientCredentials, 'oauth2/rack/authorization/client_credentials'
4
4
  autoload :Password, 'oauth2/rack/authorization/password'
5
+ autoload :RefreshToken, 'oauth2/rack/authorization/refresh_token'
5
6
  end
6
7
 
@@ -1,5 +1,5 @@
1
1
  module OAuth2
2
2
  module Rack
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
@@ -28,11 +28,11 @@ describe OAuth2::Rack::Authorization::ClientCredentials::AccessTokenIssuer do
28
28
  before { opts[:params] = params }
29
29
 
30
30
  context 'and issuer is not specified' do
31
- it 'responds with unauthorized_client' do
31
+ it 'responds with invalid_grant' do
32
32
  do_request
33
33
 
34
34
  response.status.should eq(400)
35
- response_object['error'].should eq('unauthorized_client')
35
+ response_object['error'].should eq('invalid_grant')
36
36
  end
37
37
  end
38
38
 
@@ -62,11 +62,11 @@ describe OAuth2::Rack::Authorization::ClientCredentials::AccessTokenIssuer do
62
62
  before {
63
63
  issuer.should_receive(:call).with(expected_find_opts).and_return(nil)
64
64
  }
65
- it 'responds with unauthorized_client' do
65
+ it 'responds with invalid_grant' do
66
66
  do_request
67
67
 
68
68
  response.status.should eq(400)
69
- response_object['error'].should eq('unauthorized_client')
69
+ response_object['error'].should eq('invalid_grant')
70
70
  end
71
71
  end
72
72
 
@@ -29,11 +29,11 @@ describe OAuth2::Rack::Authorization::Password::AccessTokenIssuer do
29
29
  before { opts[:params] = params }
30
30
 
31
31
  context 'and issuer is not specified' do
32
- it 'responds with unauthorized_client' do
32
+ it 'responds with invalid_grant' do
33
33
  do_request
34
34
 
35
35
  response.status.should eq(400)
36
- response_object['error'].should eq('unauthorized_client')
36
+ response_object['error'].should eq('invalid_grant')
37
37
  end
38
38
  end
39
39
 
@@ -66,11 +66,11 @@ describe OAuth2::Rack::Authorization::Password::AccessTokenIssuer do
66
66
  before {
67
67
  issuer.should_receive(:call).with(expected_find_opts).and_return(nil)
68
68
  }
69
- it 'responds with unauthorized_client' do
69
+ it 'responds with invalid_grant' do
70
70
  do_request
71
71
 
72
72
  response.status.should eq(400)
73
- response_object['error'].should eq('unauthorized_client')
73
+ response_object['error'].should eq('invalid_grant')
74
74
  end
75
75
  end
76
76
 
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe OAuth2::Rack::Authorization::RefreshToken::AccessTokenIssuer do
4
+ let(:refresh_token) { "xxxx" }
5
+ let(:client) { double('client') }
6
+ let(:opts) { Hash.new }
7
+
8
+ def do_request
9
+ post '/', opts
10
+ end
11
+
12
+ context 'when grant_type is invalid' do
13
+ let(:params) { Hash[:grant_type => 'xrefresh_token'] }
14
+ before { opts[:params] = params }
15
+
16
+ it 'responds with invalid_request' do
17
+ do_request
18
+
19
+ response.status.should eq(400)
20
+ response_object['error'].should eq('invalid_request')
21
+ end
22
+ end
23
+
24
+ context 'and grant_type is valid' do
25
+ let(:params) { Hash[:grant_type => 'refresh_token'] }
26
+ before { opts[:params] = params }
27
+
28
+ context 'and issuer is not specified' do
29
+ it 'responds with invalid_grant' do
30
+ do_request
31
+
32
+ response.status.should eq(400)
33
+ response_object['error'].should eq('invalid_grant')
34
+ end
35
+ end
36
+
37
+ context 'and issuer is specified' do
38
+ before {
39
+ params[:refresh_token] = refresh_token
40
+ opts['oauth2.client'] = client
41
+ }
42
+
43
+ let(:issuer) { double('issuer') }
44
+ let(:expected_find_opts) {
45
+ Hash[:grant_type => 'refresh_token',
46
+ :refresh_token => refresh_token,
47
+ :client => client,
48
+ :scope => nil]
49
+ }
50
+
51
+ app { OAuth2::Rack::Authorization::RefreshToken::AccessTokenIssuer.new(chained_app) { |opts| issuer.call(opts) } }
52
+
53
+ context 'but token is not found for the resource owner' do
54
+ context 'and error is returned' do
55
+ before {
56
+ issuer.should_receive(:call).with(expected_find_opts).and_return({'error' => 'customized_error'})
57
+ }
58
+ it 'responds with the that error' do
59
+ do_request
60
+
61
+ response.status.should eq(400)
62
+ response_object['error'].should eq('customized_error')
63
+ end
64
+ end
65
+ context 'and nothing is returned' do
66
+ before {
67
+ issuer.should_receive(:call).with(expected_find_opts).and_return(nil)
68
+ }
69
+ it 'responds with invalid_grant' do
70
+ do_request
71
+
72
+ response.status.should eq(400)
73
+ response_object['error'].should eq('invalid_grant')
74
+ end
75
+ end
76
+
77
+ end
78
+ context 'and token is found for the client' do
79
+ before {
80
+ issuer.should_receive(:call).with(expected_find_opts).and_return({:access_token => 'X'})
81
+ }
82
+
83
+ it 'responds with the found token' do
84
+ do_request
85
+
86
+ response.status.should eq(200)
87
+ response_object['access_token'].should eq('X')
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth2-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
16
- requirement: &2152553740 !ruby/object:Gem::Requirement
16
+ requirement: &2156611780 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152553740
24
+ version_requirements: *2156611780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack
27
- requirement: &2152544600 !ruby/object:Gem::Requirement
27
+ requirement: &2156611280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2152544600
35
+ version_requirements: *2156611280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &2152544080 !ruby/object:Gem::Requirement
38
+ requirement: &2156592240 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2152544080
46
+ version_requirements: *2156592240
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &2152543560 !ruby/object:Gem::Requirement
49
+ requirement: &2156591700 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2152543560
57
+ version_requirements: *2156591700
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: yard
60
- requirement: &2152543040 !ruby/object:Gem::Requirement
60
+ requirement: &2156591120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2152543040
68
+ version_requirements: *2156591120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: shotgun
71
- requirement: &2152542620 !ruby/object:Gem::Requirement
71
+ requirement: &2156590520 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2152542620
79
+ version_requirements: *2156590520
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-rspec
82
- requirement: &2152542000 !ruby/object:Gem::Requirement
82
+ requirement: &2156589980 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2152542000
90
+ version_requirements: *2156589980
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: oauth2
93
- requirement: &2152541400 !ruby/object:Gem::Requirement
93
+ requirement: &2156589380 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2152541400
101
+ version_requirements: *2156589380
102
102
  description: Rack middlewares for OAuth2 authorization server and resource server
103
103
  email:
104
104
  - me@iany.me
@@ -130,6 +130,8 @@ files:
130
130
  - lib/oauth2/rack/authorization/client_credentials/access_token_issuer.rb
131
131
  - lib/oauth2/rack/authorization/password.rb
132
132
  - lib/oauth2/rack/authorization/password/access_token_issuer.rb
133
+ - lib/oauth2/rack/authorization/refresh_token.rb
134
+ - lib/oauth2/rack/authorization/refresh_token/access_token_issuer.rb
133
135
  - lib/oauth2/rack/version.rb
134
136
  - oauth2-rack.gemspec
135
137
  - spec/oauth2/rack/authentication/client/http_basic_spec.rb
@@ -137,6 +139,7 @@ files:
137
139
  - spec/oauth2/rack/authentication/resource_owner/request_params_spec.rb
138
140
  - spec/oauth2/rack/authorization/client_credentials/access_token_issuer_spec.rb
139
141
  - spec/oauth2/rack/authorization/password/access_token_issuer_spec.rb
142
+ - spec/oauth2/rack/authorization/refresh_token/access_token_issuer_spec.rb
140
143
  - spec/spec_helper.rb
141
144
  - spec/support/rake_test_helper.rb
142
145
  homepage: https://github.com/doitian/oauth2-rack
@@ -154,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
157
  version: '0'
155
158
  segments:
156
159
  - 0
157
- hash: -3265861188839394143
160
+ hash: 2663607301986849054
158
161
  required_rubygems_version: !ruby/object:Gem::Requirement
159
162
  none: false
160
163
  requirements:
@@ -163,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
166
  version: '0'
164
167
  segments:
165
168
  - 0
166
- hash: -3265861188839394143
169
+ hash: 2663607301986849054
167
170
  requirements: []
168
171
  rubyforge_project: oauth2-rack
169
172
  rubygems_version: 1.8.10
@@ -176,5 +179,6 @@ test_files:
176
179
  - spec/oauth2/rack/authentication/resource_owner/request_params_spec.rb
177
180
  - spec/oauth2/rack/authorization/client_credentials/access_token_issuer_spec.rb
178
181
  - spec/oauth2/rack/authorization/password/access_token_issuer_spec.rb
182
+ - spec/oauth2/rack/authorization/refresh_token/access_token_issuer_spec.rb
179
183
  - spec/spec_helper.rb
180
184
  - spec/support/rake_test_helper.rb