rack-oauth2 0.6.4 → 0.6.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/VERSION +1 -1
- data/lib/rack/oauth2/access_token/bearer.rb +0 -17
- data/lib/rack/oauth2/access_token/legacy.rb +17 -0
- data/lib/rack/oauth2/access_token.rb +18 -1
- data/lib/rack/oauth2/client.rb +4 -2
- data/spec/fake_response/tokens/legacy_without_expires_in.txt +1 -0
- data/spec/fake_response/tokens/unknown.json +6 -0
- data/spec/rack/oauth2/access_token/legacy_spec.rb +43 -0
- data/spec/rack/oauth2/client_spec.rb +34 -15
- metadata +10 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.5
|
@@ -2,24 +2,7 @@ module Rack
|
|
2
2
|
module OAuth2
|
3
3
|
class AccessToken
|
4
4
|
class Bearer < AccessToken
|
5
|
-
def get(url, headers = {}, &block)
|
6
|
-
RestClient.get url, authenticate(headers), &block
|
7
|
-
end
|
8
|
-
|
9
|
-
def post(url, payload, headers = {}, &block)
|
10
|
-
RestClient.post url, payload, authenticate(headers), &block
|
11
|
-
end
|
12
|
-
|
13
|
-
def put(url, payload, headers = {}, &block)
|
14
|
-
RestClient.put url, payload, authenticate(headers), &block
|
15
|
-
end
|
16
|
-
|
17
|
-
def delete(url, headers = {}, &block)
|
18
|
-
RestClient.delete url, authenticate(headers), &block
|
19
|
-
end
|
20
|
-
|
21
5
|
private
|
22
|
-
|
23
6
|
def authenticate(headers)
|
24
7
|
headers.merge(:AUTHORIZATION => "Bearer #{access_token}")
|
25
8
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rack
|
2
|
+
module OAuth2
|
3
|
+
class AccessToken
|
4
|
+
class Legacy < AccessToken
|
5
|
+
def initialize(attributes = {})
|
6
|
+
super
|
7
|
+
self.expires_in = self.expires_in.try(:to_i)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def authenticate(headers)
|
12
|
+
headers.merge(:AUTHORIZATION => "OAuth2 #{access_token}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -22,9 +22,26 @@ module Rack
|
|
22
22
|
:scope => Array(scope).join(' ')
|
23
23
|
}
|
24
24
|
end
|
25
|
+
|
26
|
+
def get(url, headers = {}, &block)
|
27
|
+
RestClient.get url, authenticate(headers), &block
|
28
|
+
end
|
29
|
+
|
30
|
+
def post(url, payload, headers = {}, &block)
|
31
|
+
RestClient.post url, payload, authenticate(headers), &block
|
32
|
+
end
|
33
|
+
|
34
|
+
def put(url, payload, headers = {}, &block)
|
35
|
+
RestClient.put url, payload, authenticate(headers), &block
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete(url, headers = {}, &block)
|
39
|
+
RestClient.delete url, authenticate(headers), &block
|
40
|
+
end
|
25
41
|
end
|
26
42
|
end
|
27
43
|
end
|
28
44
|
|
29
45
|
require 'rack/oauth2/access_token/bearer'
|
30
|
-
require 'rack/oauth2/access_token/mac'
|
46
|
+
require 'rack/oauth2/access_token/mac'
|
47
|
+
require 'rack/oauth2/access_token/legacy'
|
data/lib/rack/oauth2/client.rb
CHANGED
@@ -73,12 +73,14 @@ module Rack
|
|
73
73
|
AccessToken::Bearer.new(token_hash)
|
74
74
|
when 'mac'
|
75
75
|
AccessToken::MAC.new(token_hash)
|
76
|
+
when nil
|
77
|
+
AccessToken::Legacy.new(token_hash)
|
76
78
|
else
|
77
|
-
|
79
|
+
raise 'Unknown Token Type'
|
78
80
|
end
|
79
81
|
rescue JSON::ParserError
|
80
82
|
# NOTE: Facebook support (They don't use JSON as token response)
|
81
|
-
Rack::Utils.parse_nested_query(response.body).with_indifferent_access
|
83
|
+
AccessToken::Legacy.new Rack::Utils.parse_nested_query(response.body).with_indifferent_access
|
82
84
|
rescue RestClient::Exception => e
|
83
85
|
error = JSON.parse(e.http_body).with_indifferent_access
|
84
86
|
raise Error.new(e.http_code, error)
|
@@ -0,0 +1 @@
|
|
1
|
+
access_token=access_token
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rack::OAuth2::AccessToken::Legacy do
|
4
|
+
let :token do
|
5
|
+
Rack::OAuth2::AccessToken::Legacy.new(
|
6
|
+
:access_token => 'access_token'
|
7
|
+
)
|
8
|
+
end
|
9
|
+
let(:resource_endpoint) { 'https://server.example.com/resources/fake' }
|
10
|
+
|
11
|
+
[:get, :delete].each do |method|
|
12
|
+
before do
|
13
|
+
fake_response(method, resource_endpoint, 'resources/fake.txt')
|
14
|
+
end
|
15
|
+
|
16
|
+
describe method.to_s.upcase do
|
17
|
+
it 'should have OAuth2 Authorization header' do
|
18
|
+
RestClient.should_receive(method).with(
|
19
|
+
resource_endpoint,
|
20
|
+
:AUTHORIZATION => 'OAuth2 access_token'
|
21
|
+
)
|
22
|
+
token.send method, resource_endpoint
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
[:post, :put].each do |method|
|
28
|
+
before do
|
29
|
+
fake_response(method, resource_endpoint, 'resources/fake.txt')
|
30
|
+
end
|
31
|
+
|
32
|
+
describe method.to_s.upcase do
|
33
|
+
it 'should have OAuth2 Authorization header' do
|
34
|
+
RestClient.should_receive(method).with(
|
35
|
+
resource_endpoint,
|
36
|
+
{:key => :value},
|
37
|
+
{:AUTHORIZATION => 'OAuth2 access_token'}
|
38
|
+
)
|
39
|
+
token.send method, resource_endpoint, {:key => :value}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -106,7 +106,7 @@ describe Rack::OAuth2::Client do
|
|
106
106
|
its(:expires_in) { should == 3600 }
|
107
107
|
end
|
108
108
|
|
109
|
-
context 'when
|
109
|
+
context 'when no-type token is given (JSON)' do
|
110
110
|
before do
|
111
111
|
client.authorization_code = 'code'
|
112
112
|
fake_response(
|
@@ -115,17 +115,14 @@ describe Rack::OAuth2::Client do
|
|
115
115
|
'tokens/legacy.json'
|
116
116
|
)
|
117
117
|
end
|
118
|
-
it { should be_instance_of
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
'expires_in' => 3600
|
124
|
-
}
|
125
|
-
end
|
118
|
+
it { should be_instance_of Rack::OAuth2::AccessToken::Legacy }
|
119
|
+
its(:token_type) { should == :legacy }
|
120
|
+
its(:access_token) { should == 'access_token' }
|
121
|
+
its(:refresh_token) { should == 'refresh_token' }
|
122
|
+
its(:expires_in) { should == 3600 }
|
126
123
|
end
|
127
124
|
|
128
|
-
context 'when
|
125
|
+
context 'when no-type token is given (key-value)' do
|
129
126
|
before do
|
130
127
|
fake_response(
|
131
128
|
:post,
|
@@ -133,12 +130,34 @@ describe Rack::OAuth2::Client do
|
|
133
130
|
'tokens/legacy.txt'
|
134
131
|
)
|
135
132
|
end
|
136
|
-
it { should be_instance_of
|
133
|
+
it { should be_instance_of Rack::OAuth2::AccessToken::Legacy }
|
134
|
+
its(:token_type) { should == :legacy }
|
135
|
+
its(:access_token) { should == 'access_token' }
|
136
|
+
its(:expires_in) { should == 3600 }
|
137
|
+
|
138
|
+
context 'when expires_in is not given' do
|
139
|
+
before do
|
140
|
+
fake_response(
|
141
|
+
:post,
|
142
|
+
'https://server.example.com/oauth2/token',
|
143
|
+
'tokens/legacy_without_expires_in.txt'
|
144
|
+
)
|
145
|
+
end
|
146
|
+
its(:expires_in) { should be_nil }
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'when unknown-type token is given' do
|
151
|
+
before do
|
152
|
+
client.authorization_code = 'code'
|
153
|
+
fake_response(
|
154
|
+
:post,
|
155
|
+
'https://server.example.com/oauth2/token',
|
156
|
+
'tokens/unknown.json'
|
157
|
+
)
|
158
|
+
end
|
137
159
|
it do
|
138
|
-
client.access_token
|
139
|
-
'access_token' => 'access_token',
|
140
|
-
'expires_in' => '3600' # NOTE: String not Integer
|
141
|
-
}
|
160
|
+
expect { client.access_token! }.should raise_error(StandardError, 'Unknown Token Type')
|
142
161
|
end
|
143
162
|
end
|
144
163
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 5
|
10
|
+
version: 0.6.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- nov matake
|
@@ -188,6 +188,7 @@ files:
|
|
188
188
|
- lib/rack/oauth2.rb
|
189
189
|
- lib/rack/oauth2/access_token.rb
|
190
190
|
- lib/rack/oauth2/access_token/bearer.rb
|
191
|
+
- lib/rack/oauth2/access_token/legacy.rb
|
191
192
|
- lib/rack/oauth2/access_token/mac.rb
|
192
193
|
- lib/rack/oauth2/access_token/mac/body_hash.rb
|
193
194
|
- lib/rack/oauth2/access_token/mac/signature.rb
|
@@ -228,9 +229,12 @@ files:
|
|
228
229
|
- spec/fake_response/tokens/bearer.json
|
229
230
|
- spec/fake_response/tokens/legacy.json
|
230
231
|
- spec/fake_response/tokens/legacy.txt
|
232
|
+
- spec/fake_response/tokens/legacy_without_expires_in.txt
|
231
233
|
- spec/fake_response/tokens/mac.json
|
234
|
+
- spec/fake_response/tokens/unknown.json
|
232
235
|
- spec/helpers/time.rb
|
233
236
|
- spec/rack/oauth2/access_token/bearer_spec.rb
|
237
|
+
- spec/rack/oauth2/access_token/legacy_spec.rb
|
234
238
|
- spec/rack/oauth2/access_token/mac/verifier_spec.rb
|
235
239
|
- spec/rack/oauth2/access_token/mac_spec.rb
|
236
240
|
- spec/rack/oauth2/access_token_spec.rb
|
@@ -297,9 +301,12 @@ test_files:
|
|
297
301
|
- spec/fake_response/tokens/bearer.json
|
298
302
|
- spec/fake_response/tokens/legacy.json
|
299
303
|
- spec/fake_response/tokens/legacy.txt
|
304
|
+
- spec/fake_response/tokens/legacy_without_expires_in.txt
|
300
305
|
- spec/fake_response/tokens/mac.json
|
306
|
+
- spec/fake_response/tokens/unknown.json
|
301
307
|
- spec/helpers/time.rb
|
302
308
|
- spec/rack/oauth2/access_token/bearer_spec.rb
|
309
|
+
- spec/rack/oauth2/access_token/legacy_spec.rb
|
303
310
|
- spec/rack/oauth2/access_token/mac/verifier_spec.rb
|
304
311
|
- spec/rack/oauth2/access_token/mac_spec.rb
|
305
312
|
- spec/rack/oauth2/access_token_spec.rb
|