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 +1 -1
- data/lib/oauth2/rack/authorization/client_credentials/access_token_issuer.rb +1 -1
- data/lib/oauth2/rack/authorization/password/access_token_issuer.rb +1 -1
- data/lib/oauth2/rack/authorization/refresh_token/access_token_issuer.rb +55 -0
- data/lib/oauth2/rack/authorization/refresh_token.rb +4 -0
- data/lib/oauth2/rack/authorization.rb +1 -0
- data/lib/oauth2/rack/version.rb +1 -1
- data/spec/oauth2/rack/authorization/client_credentials/access_token_issuer_spec.rb +4 -4
- data/spec/oauth2/rack/authorization/password/access_token_issuer_spec.rb +4 -4
- data/spec/oauth2/rack/authorization/refresh_token/access_token_issuer_spec.rb +92 -0
- metadata +23 -19
data/Gemfile.lock
CHANGED
@@ -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' => '
|
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' => '
|
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
|
data/lib/oauth2/rack/version.rb
CHANGED
@@ -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
|
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('
|
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
|
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('
|
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
|
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('
|
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
|
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('
|
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
|
+
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: &
|
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: *
|
24
|
+
version_requirements: *2156611780
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack
|
27
|
-
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: *
|
35
|
+
version_requirements: *2156611280
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
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: *
|
46
|
+
version_requirements: *2156592240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
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: *
|
57
|
+
version_requirements: *2156591700
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
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: *
|
68
|
+
version_requirements: *2156591120
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: shotgun
|
71
|
-
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: *
|
79
|
+
version_requirements: *2156590520
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: guard-rspec
|
82
|
-
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: *
|
90
|
+
version_requirements: *2156589980
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: oauth2
|
93
|
-
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: *
|
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:
|
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:
|
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
|