oauth2-rack 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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