rack-oauth2 2.0.1 → 2.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7574d464d319f64fc1cfd3913d6d773024b697bd55aadece79a0f085e237a5ba
4
- data.tar.gz: 9efa49f33b0a29b2eeb54917c60092e5c9fb436e75b3f525cc117fcce1dce81a
3
+ metadata.gz: 45ba67ac4566f374465673cc5711e71c15006bbe966531a4c1de2473206879b2
4
+ data.tar.gz: 56f8718f283533c369b1743dfd86499e49e5d828a83ac060fa919fac57a935d2
5
5
  SHA512:
6
- metadata.gz: c2b01fad3bbda97b24cd9520137c58aa4ad02e91535d02f5d5d5b1b4846d3ce067148a91f55f321a0cee789c6ec63516960b5550f96262cc2bd9e89a9cc33978
7
- data.tar.gz: 53899a188b886011d5c3b96873d3bdab5070b74e09f6770996630335b3fe7cd0665a47dc3d623d4f8b571ef82365984e3329f59161407a5c7b2ca79bfdb3f2b8
6
+ metadata.gz: 63316467536c2c98cddea9b2b7907b3ff5fd6b53b892bd338709e1f7a6b014aa4dc20d71b12cd01ffac502c1ab0964218aac7ff6a0e81141ff8aa10e80557cdd
7
+ data.tar.gz: 97e685531853c4837a0e86636c865827033e25f646c4572d254e2584a811f937faa6dc7fe780742814bd9657066c9fc16394723ba87029605761d5acf2d490f7
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [2.1.0] - 2022-10-10
4
+
5
+ ### Added
6
+
7
+ - accept local_http_config on Rack::OAuth2::Client#access_token! & revoke! to support custom headers etc. by @nov in https://github.com/nov/rack-oauth2/pull/93
8
+
9
+ ## [2.0.1] - 2022-10-09
10
+
11
+ ### Fixed
12
+
13
+ - changes for mTLS on faraday by @nov in https://github.com/nov/rack-oauth2/pull/92
14
+
3
15
  ## [2.0.0] - 2022-10-09
4
16
 
5
17
  ### Added
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.1
1
+ 2.2.0
@@ -7,8 +7,8 @@ module Rack
7
7
  def initialize(attributes = {})
8
8
  super
9
9
  self.token_type = :bearer
10
- httpclient.ssl.client_key = private_key
11
- httpclient.ssl.client_cert = certificate
10
+ http_client.ssl.client_key = private_key
11
+ http_client.ssl.client_cert = certificate
12
12
  end
13
13
  end
14
14
  end
@@ -5,7 +5,7 @@ module Rack
5
5
  attr_required :access_token, :token_type
6
6
  attr_optional :refresh_token, :expires_in, :scope
7
7
  attr_accessor :raw_attributes
8
- delegate :get, :patch, :post, :put, :delete, to: :httpclient
8
+ delegate :get, :patch, :post, :put, :delete, to: :http_client
9
9
 
10
10
  alias_method :to_s, :access_token
11
11
 
@@ -18,8 +18,8 @@ module Rack
18
18
  attr_missing!
19
19
  end
20
20
 
21
- def httpclient
22
- @httpclient ||= Rack::OAuth2.http_client("#{self.class} (#{VERSION})") do |faraday|
21
+ def http_client
22
+ @http_client ||= Rack::OAuth2.http_client("#{self.class} (#{VERSION})") do |faraday|
23
23
  Authenticator.new(self).authenticate(faraday)
24
24
  end
25
25
  end
@@ -39,5 +39,4 @@ end
39
39
 
40
40
  require 'rack/oauth2/access_token/authenticator'
41
41
  require 'rack/oauth2/access_token/bearer'
42
- require 'rack/oauth2/access_token/legacy'
43
42
  require 'rack/oauth2/access_token/mtls'
@@ -74,7 +74,13 @@ module Rack
74
74
  params.merge! @grant.as_json
75
75
  params.merge! options
76
76
  handle_response do
77
- http_client.post(absolute_uri_for(token_endpoint), Util.compact_hash(params), headers)
77
+ http_client.post(
78
+ absolute_uri_for(token_endpoint),
79
+ Util.compact_hash(params),
80
+ headers
81
+ ) do |req|
82
+ yield req if block_given?
83
+ end
78
84
  end
79
85
  end
80
86
 
@@ -107,7 +113,9 @@ module Rack
107
113
  absolute_uri_for(revocation_endpoint),
108
114
  Util.compact_hash(params),
109
115
  headers
110
- )
116
+ ) do |req|
117
+ yield req if block_given?
118
+ end
111
119
  end
112
120
  end
113
121
 
@@ -130,7 +138,7 @@ module Rack
130
138
  # Using Array#extract_options! for backward compatibility.
131
139
  # Until v1.0.5, the first argument was 'client_auth_method' in scalar.
132
140
  options = args.extract_options!
133
- client_auth_method = args.first || options.delete(:client_auth_method).try(:to_sym) || :basic
141
+ client_auth_method = args.first || options.delete(:client_auth_method)&.to_sym || :basic
134
142
 
135
143
  case client_auth_method
136
144
  when :basic
@@ -205,24 +213,19 @@ module Rack
205
213
  end
206
214
 
207
215
  def handle_success_response(response)
208
- token_hash = JSON.parse(response.body).with_indifferent_access
209
- case (@forced_token_type || token_hash[:token_type]).try(:downcase)
216
+ token_hash = response.body.with_indifferent_access
217
+ case (@forced_token_type || token_hash[:token_type])&.downcase
210
218
  when 'bearer'
211
219
  AccessToken::Bearer.new(token_hash)
212
- when nil
213
- AccessToken::Legacy.new(token_hash)
214
220
  else
215
221
  raise 'Unknown Token Type'
216
222
  end
217
- rescue JSON::ParserError
218
- # NOTE: Facebook support (They don't use JSON as token response)
219
- AccessToken::Legacy.new Rack::Utils.parse_nested_query(response.body).with_indifferent_access
220
223
  end
221
224
 
222
225
  def handle_error_response(response)
223
- error = JSON.parse(response.body).with_indifferent_access
226
+ error = response.body.with_indifferent_access
224
227
  raise Error.new(response.status, error)
225
- rescue JSON::ParserError
228
+ rescue Faraday::ParsingError, NoMethodError
226
229
  raise Error.new(response.status, error: 'Unknown', error_description: response.body)
227
230
  end
228
231
  end
@@ -27,7 +27,7 @@ module Rack
27
27
 
28
28
  def verify_code_verifier!(code_challenge, code_challenge_method = :S256)
29
29
  if code_verifier.present? || code_challenge.present?
30
- case code_challenge_method.try(:to_sym)
30
+ case code_challenge_method&.to_sym
31
31
  when :S256
32
32
  code_challenge == Util.urlsafe_base64_encode(
33
33
  OpenSSL::Digest::SHA256.digest(code_verifier.to_s)
data/lib/rack/oauth2.rb CHANGED
@@ -44,6 +44,7 @@ module Rack
44
44
  Faraday.new(headers: {user_agent: agent_name}) do |faraday|
45
45
  faraday.request :url_encoded
46
46
  faraday.request :json
47
+ faraday.response :json
47
48
  faraday.response :logger, Rack::OAuth2.logger, {bodies: true} if debugging?
48
49
  faraday.adapter Faraday.default_adapter
49
50
  local_http_config&.call(faraday)
@@ -13,7 +13,7 @@ module WebMockHelper
13
13
 
14
14
  def request_for(method, options = {})
15
15
  request = {}
16
- params = options.try(:[], :params) || {}
16
+ params = options&.[](:params) || {}
17
17
  case method
18
18
  when :post, :put, :delete
19
19
  request[:body] = params
@@ -28,7 +28,13 @@ module WebMockHelper
28
28
 
29
29
  def response_for(response_file, options = {})
30
30
  response = {}
31
- response[:body] = File.new(File.join(File.dirname(__FILE__), '../mock_response', response_file))
31
+ format = options[:format] || :json
32
+ if format == :json
33
+ response[:headers] = {
34
+ 'Content-Type': 'application/json'
35
+ }
36
+ end
37
+ response[:body] = File.new(File.join(File.dirname(__FILE__), '../mock_response', "#{response_file}.#{format}"))
32
38
  if options[:status]
33
39
  response[:status] = options[:status]
34
40
  end
File without changes
@@ -12,15 +12,6 @@ describe Rack::OAuth2::AccessToken::Authenticator do
12
12
  end
13
13
  end
14
14
 
15
- context 'when Legacy token is given' do
16
- let(:token) do
17
- Rack::OAuth2::AccessToken::Legacy.new(
18
- access_token: 'access_token'
19
- )
20
- end
21
- it_behaves_like :authenticator
22
- end
23
-
24
15
  context 'when Bearer token is given' do
25
16
  let(:token) do
26
17
  Rack::OAuth2::AccessToken::Bearer.new(
@@ -93,7 +93,7 @@ describe Rack::OAuth2::Client do
93
93
  mock_response(
94
94
  :post,
95
95
  'https://server.example.com/oauth2/token',
96
- 'tokens/bearer.json',
96
+ 'tokens/bearer',
97
97
  request_header: {
98
98
  'Authorization' => 'Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ='
99
99
  }
@@ -109,7 +109,7 @@ describe Rack::OAuth2::Client do
109
109
  mock_response(
110
110
  :post,
111
111
  'https://server.example.com/oauth2/token',
112
- 'tokens/bearer.json',
112
+ 'tokens/bearer',
113
113
  request_header: {
114
114
  'Authorization' => 'Basic aHR0cHMlM0ElMkYlMkZjbGllbnQuZXhhbXBsZS5jb206Y2xpZW50X3NlY3JldA=='
115
115
  }
@@ -127,7 +127,7 @@ describe Rack::OAuth2::Client do
127
127
  mock_response(
128
128
  :post,
129
129
  'https://server.example.com/oauth2/token',
130
- 'tokens/bearer.json',
130
+ 'tokens/bearer',
131
131
  request_header: {
132
132
  'Authorization' => 'Basic aHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb206Y2xpZW50X3NlY3JldA=='
133
133
  }
@@ -143,7 +143,7 @@ describe Rack::OAuth2::Client do
143
143
  mock_response(
144
144
  :post,
145
145
  'https://server.example.com/oauth2/token',
146
- 'tokens/bearer.json',
146
+ 'tokens/bearer',
147
147
  params: {
148
148
  client_assertion: /^eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9\..+/, # NOTE: HS256
149
149
  client_assertion_type: Rack::OAuth2::URN::ClientAssertionType::JWT_BEARER,
@@ -171,7 +171,7 @@ describe Rack::OAuth2::Client do
171
171
  mock_response(
172
172
  :post,
173
173
  'https://server.example.com/oauth2/token',
174
- 'tokens/bearer.json',
174
+ 'tokens/bearer',
175
175
  params: {
176
176
  client_assertion: /^eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9\..+/, # NOTE: RS256
177
177
  client_assertion_type: Rack::OAuth2::URN::ClientAssertionType::JWT_BEARER,
@@ -198,7 +198,7 @@ describe Rack::OAuth2::Client do
198
198
  mock_response(
199
199
  :post,
200
200
  'https://server.example.com/oauth2/token',
201
- 'tokens/bearer.json',
201
+ 'tokens/bearer',
202
202
  params: {
203
203
  client_assertion: /^eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9\..+/, # NOTE: ES256
204
204
  client_assertion_type: Rack::OAuth2::URN::ClientAssertionType::JWT_BEARER,
@@ -225,7 +225,7 @@ describe Rack::OAuth2::Client do
225
225
  mock_response(
226
226
  :post,
227
227
  'https://server.example.com/oauth2/token',
228
- 'tokens/bearer.json',
228
+ 'tokens/bearer',
229
229
  params: {
230
230
  client_assertion: 'any.jwt.assertion',
231
231
  client_assertion_type: Rack::OAuth2::URN::ClientAssertionType::JWT_BEARER,
@@ -244,7 +244,7 @@ describe Rack::OAuth2::Client do
244
244
  mock_response(
245
245
  :post,
246
246
  'https://server.example.com/oauth2/token',
247
- 'tokens/bearer.json',
247
+ 'tokens/bearer',
248
248
  params: {
249
249
  client_id: 'client_id',
250
250
  client_secret: 'client_secret',
@@ -262,7 +262,7 @@ describe Rack::OAuth2::Client do
262
262
  mock_response(
263
263
  :post,
264
264
  'https://server.example.com/oauth2/token',
265
- 'tokens/bearer.json',
265
+ 'tokens/bearer',
266
266
  params: {
267
267
  client_id: 'client_id',
268
268
  client_secret: 'client_secret',
@@ -282,7 +282,7 @@ describe Rack::OAuth2::Client do
282
282
  mock_response(
283
283
  :post,
284
284
  'https://server.example.com/oauth2/token',
285
- 'tokens/bearer.json',
285
+ 'tokens/bearer',
286
286
  params: {
287
287
  grant_type: 'client_credentials',
288
288
  scope: 'a b'
@@ -298,7 +298,7 @@ describe Rack::OAuth2::Client do
298
298
  mock_response(
299
299
  :post,
300
300
  'https://server.example.com/oauth2/token',
301
- 'tokens/bearer.json',
301
+ 'tokens/bearer',
302
302
  params: {
303
303
  grant_type: 'client_credentials',
304
304
  resource: 'something'
@@ -309,81 +309,49 @@ describe Rack::OAuth2::Client do
309
309
  end
310
310
  end
311
311
 
312
- context 'when bearer token is given' do
313
- before do
314
- client.authorization_code = 'code'
312
+ context 'local_http_config handling' do
313
+ it do
315
314
  mock_response(
316
315
  :post,
317
316
  'https://server.example.com/oauth2/token',
318
- 'tokens/bearer.json'
317
+ 'tokens/bearer',
318
+ request_header: {
319
+ 'Authorization' => 'Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=',
320
+ 'X-Foo' => 'bar'
321
+ }
319
322
  )
320
- end
321
- it { should be_instance_of Rack::OAuth2::AccessToken::Bearer }
322
- its(:token_type) { should == :bearer }
323
- its(:access_token) { should == 'access_token' }
324
- its(:refresh_token) { should == 'refresh_token' }
325
- its(:expires_in) { should == 3600 }
326
-
327
- context 'when token type is "Bearer", not "bearer"' do
328
- before do
329
- client.authorization_code = 'code'
330
- mock_response(
331
- :post,
332
- 'https://server.example.com/oauth2/token',
333
- 'tokens/_Bearer.json'
334
- )
323
+ client.access_token! do |request|
324
+ request.headers['X-Foo'] = 'bar'
335
325
  end
336
- it { should be_instance_of Rack::OAuth2::AccessToken::Bearer }
337
- its(:token_type) { should == :bearer }
338
326
  end
339
327
  end
340
328
 
341
- context 'when no-type token is given (JSON)' do
329
+ context 'when bearer token is given' do
342
330
  before do
343
331
  client.authorization_code = 'code'
344
332
  mock_response(
345
333
  :post,
346
334
  'https://server.example.com/oauth2/token',
347
- 'tokens/legacy.json'
335
+ 'tokens/bearer'
348
336
  )
349
337
  end
350
- it { should be_instance_of Rack::OAuth2::AccessToken::Legacy }
351
- its(:token_type) { should == :legacy }
338
+ it { should be_instance_of Rack::OAuth2::AccessToken::Bearer }
339
+ its(:token_type) { should == :bearer }
352
340
  its(:access_token) { should == 'access_token' }
353
341
  its(:refresh_token) { should == 'refresh_token' }
354
342
  its(:expires_in) { should == 3600 }
355
343
 
356
- context 'when token_type is forced' do
357
- before do
358
- client.force_token_type! :bearer
359
- end
360
- it { should be_instance_of Rack::OAuth2::AccessToken::Bearer }
361
- its(:token_type) { should == :bearer }
362
- end
363
- end
364
-
365
- context 'when no-type token is given (key-value)' do
366
- before do
367
- mock_response(
368
- :post,
369
- 'https://server.example.com/oauth2/token',
370
- 'tokens/legacy.txt'
371
- )
372
- end
373
- it { should be_instance_of Rack::OAuth2::AccessToken::Legacy }
374
- its(:token_type) { should == :legacy }
375
- its(:access_token) { should == 'access_token' }
376
- its(:expires_in) { should == 3600 }
377
-
378
- context 'when expires_in is not given' do
344
+ context 'when token type is "Bearer", not "bearer"' do
379
345
  before do
346
+ client.authorization_code = 'code'
380
347
  mock_response(
381
348
  :post,
382
349
  'https://server.example.com/oauth2/token',
383
- 'tokens/legacy_without_expires_in.txt'
350
+ 'tokens/_Bearer'
384
351
  )
385
352
  end
386
- its(:expires_in) { should be_nil }
353
+ it { should be_instance_of Rack::OAuth2::AccessToken::Bearer }
354
+ its(:token_type) { should == :bearer }
387
355
  end
388
356
  end
389
357
 
@@ -393,7 +361,7 @@ describe Rack::OAuth2::Client do
393
361
  mock_response(
394
362
  :post,
395
363
  'https://server.example.com/oauth2/token',
396
- 'tokens/unknown.json'
364
+ 'tokens/unknown'
397
365
  )
398
366
  end
399
367
  it do
@@ -406,7 +374,7 @@ describe Rack::OAuth2::Client do
406
374
  mock_response(
407
375
  :post,
408
376
  'https://server.example.com/oauth2/token',
409
- 'errors/invalid_request.json',
377
+ 'errors/invalid_request',
410
378
  status: 400
411
379
  )
412
380
  end
@@ -422,6 +390,7 @@ describe Rack::OAuth2::Client do
422
390
  :post,
423
391
  'https://server.example.com/oauth2/token',
424
392
  'blank',
393
+ format: 'txt',
425
394
  status: 400
426
395
  )
427
396
  end
@@ -433,12 +402,36 @@ describe Rack::OAuth2::Client do
433
402
  end
434
403
 
435
404
  describe '#revoke!' do
405
+ context 'local_http_config handling' do
406
+ it do
407
+ mock_response(
408
+ :post,
409
+ 'https://server.example.com/oauth2/revoke',
410
+ 'blank',
411
+ format: 'txt',
412
+ status: 200,
413
+ body: {
414
+ token: 'access_token',
415
+ token_type_hint: 'access_token'
416
+ },
417
+ request_header: {
418
+ 'Authorization' => 'Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=',
419
+ 'X-Foo' => 'bar'
420
+ }
421
+ )
422
+ client.revoke!(access_token: 'access_token') do |request|
423
+ request.headers['X-Foo'] = 'bar'
424
+ end
425
+ end
426
+ end
427
+
436
428
  context 'when access_token given' do
437
429
  before do
438
430
  mock_response(
439
431
  :post,
440
432
  'https://server.example.com/oauth2/revoke',
441
433
  'blank',
434
+ format: 'txt',
442
435
  status: 200,
443
436
  body: {
444
437
  token: 'access_token',
@@ -457,6 +450,7 @@ describe Rack::OAuth2::Client do
457
450
  :post,
458
451
  'https://server.example.com/oauth2/revoke',
459
452
  'blank',
453
+ format: 'txt',
460
454
  status: 200,
461
455
  body: {
462
456
  token: 'refresh_token',
@@ -484,7 +478,7 @@ describe Rack::OAuth2::Client do
484
478
  mock_response(
485
479
  :post,
486
480
  'https://server.example.com/oauth2/revoke',
487
- 'errors/invalid_request.json',
481
+ 'errors/invalid_request',
488
482
  status: 400
489
483
  )
490
484
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov matake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-08 00:00:00.000000000 Z
11
+ date: 2022-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -201,7 +201,6 @@ files:
201
201
  - lib/rack/oauth2/access_token.rb
202
202
  - lib/rack/oauth2/access_token/authenticator.rb
203
203
  - lib/rack/oauth2/access_token/bearer.rb
204
- - lib/rack/oauth2/access_token/legacy.rb
205
204
  - lib/rack/oauth2/access_token/mtls.rb
206
205
  - lib/rack/oauth2/client.rb
207
206
  - lib/rack/oauth2/client/error.rb
@@ -250,18 +249,14 @@ files:
250
249
  - rack-oauth2.gemspec
251
250
  - spec/helpers/time.rb
252
251
  - spec/helpers/webmock_helper.rb
253
- - spec/mock_response/blank
252
+ - spec/mock_response/blank.txt
254
253
  - spec/mock_response/errors/invalid_request.json
255
254
  - spec/mock_response/resources/fake.txt
256
255
  - spec/mock_response/tokens/_Bearer.json
257
256
  - spec/mock_response/tokens/bearer.json
258
- - spec/mock_response/tokens/legacy.json
259
- - spec/mock_response/tokens/legacy.txt
260
- - spec/mock_response/tokens/legacy_without_expires_in.txt
261
257
  - spec/mock_response/tokens/unknown.json
262
258
  - spec/rack/oauth2/access_token/authenticator_spec.rb
263
259
  - spec/rack/oauth2/access_token/bearer_spec.rb
264
- - spec/rack/oauth2/access_token/legacy_spec.rb
265
260
  - spec/rack/oauth2/access_token_spec.rb
266
261
  - spec/rack/oauth2/client/error_spec.rb
267
262
  - spec/rack/oauth2/client/grant/authorization_code_spec.rb
@@ -321,18 +316,14 @@ summary: OAuth 2.0 Server & Client Library - Both Bearer token type are supporte
321
316
  test_files:
322
317
  - spec/helpers/time.rb
323
318
  - spec/helpers/webmock_helper.rb
324
- - spec/mock_response/blank
319
+ - spec/mock_response/blank.txt
325
320
  - spec/mock_response/errors/invalid_request.json
326
321
  - spec/mock_response/resources/fake.txt
327
322
  - spec/mock_response/tokens/_Bearer.json
328
323
  - spec/mock_response/tokens/bearer.json
329
- - spec/mock_response/tokens/legacy.json
330
- - spec/mock_response/tokens/legacy.txt
331
- - spec/mock_response/tokens/legacy_without_expires_in.txt
332
324
  - spec/mock_response/tokens/unknown.json
333
325
  - spec/rack/oauth2/access_token/authenticator_spec.rb
334
326
  - spec/rack/oauth2/access_token/bearer_spec.rb
335
- - spec/rack/oauth2/access_token/legacy_spec.rb
336
327
  - spec/rack/oauth2/access_token_spec.rb
337
328
  - spec/rack/oauth2/client/error_spec.rb
338
329
  - spec/rack/oauth2/client/grant/authorization_code_spec.rb
@@ -1,19 +0,0 @@
1
- module Rack
2
- module OAuth2
3
- class AccessToken
4
- class Legacy < AccessToken
5
- def initialize(attributes = {})
6
- super
7
- self.expires_in = (
8
- self.expires_in ||
9
- attributes[:expires]
10
- ).try(:to_i)
11
- end
12
-
13
- def authenticate(request)
14
- request.headers["Authorization"] = "OAuth #{access_token}"
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,5 +0,0 @@
1
- {
2
- "access_token":"access_token",
3
- "refresh_token":"refresh_token",
4
- "expires_in":3600
5
- }
@@ -1 +0,0 @@
1
- access_token=access_token&expires=3600
@@ -1 +0,0 @@
1
- access_token=access_token
@@ -1,23 +0,0 @@
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
- let(:request) { Faraday::Request.new(:post, URI.parse(resource_endpoint), '', {hello: "world"}, {}) }
11
-
12
- describe '#to_s' do
13
- subject { token }
14
- its(:to_s) { should == token.access_token }
15
- end
16
-
17
- describe '.authenticate' do
18
- it 'should set Authorization header' do
19
- expect(request.headers).to receive(:[]=).with('Authorization', 'OAuth access_token')
20
- token.authenticate(request)
21
- end
22
- end
23
- end