oauth2 1.4.7 → 1.4.9

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.
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
- require 'helper'
4
4
  require 'nkf'
5
5
 
6
6
  describe OAuth2::Client do
7
7
  subject do
8
- described_class.new('abc', 'def', :site => 'https://api.example.com') do |builder|
8
+ described_class.new('abc', 'def', {:site => 'https://api.example.com'}.merge(options)) do |builder|
9
9
  builder.adapter :test do |stub|
10
10
  stub.get('/success') { |env| [200, {'Content-Type' => 'text/awesome'}, 'yay'] }
11
11
  stub.get('/reflect') { |env| [200, {}, env[:body]] }
@@ -13,6 +13,7 @@ describe OAuth2::Client do
13
13
  stub.get('/unauthorized') { |env| [401, {'Content-Type' => 'application/json'}, MultiJson.encode(:error => error_value, :error_description => error_description_value)] }
14
14
  stub.get('/conflict') { |env| [409, {'Content-Type' => 'text/plain'}, 'not authorized'] }
15
15
  stub.get('/redirect') { |env| [302, {'Content-Type' => 'text/plain', 'location' => '/success'}, ''] }
16
+ stub.get('/redirect_no_loc') { |_env| [302, {'Content-Type' => 'text/plain'}, ''] }
16
17
  stub.post('/redirect') { |env| [303, {'Content-Type' => 'text/plain', 'location' => '/reflect'}, ''] }
17
18
  stub.get('/error') { |env| [500, {'Content-Type' => 'text/plain'}, 'unknown error'] }
18
19
  stub.get('/empty_get') { |env| [204, {}, nil] }
@@ -24,6 +25,7 @@ describe OAuth2::Client do
24
25
 
25
26
  let!(:error_value) { 'invalid_token' }
26
27
  let!(:error_description_value) { 'bad bad token' }
28
+ let(:options) { {} }
27
29
 
28
30
  describe '#initialize' do
29
31
  it 'assigns id and secret' do
@@ -44,10 +46,10 @@ describe OAuth2::Client do
44
46
  end
45
47
 
46
48
  it 'is able to pass a block to configure the connection' do
47
- connection = double('connection')
48
49
  builder = double('builder')
49
- allow(connection).to receive(:build).and_yield(builder)
50
- allow(Faraday::Connection).to receive(:new).and_return(connection)
50
+
51
+ allow(Faraday).to receive(:new).and_yield(builder)
52
+ allow(builder).to receive(:response)
51
53
 
52
54
  expect(builder).to receive(:adapter).with(:test)
53
55
 
@@ -70,7 +72,7 @@ describe OAuth2::Client do
70
72
  it 'allows override of raise_errors option' do
71
73
  client = described_class.new('abc', 'def', :site => 'https://api.example.com', :raise_errors => true) do |builder|
72
74
  builder.adapter :test do |stub|
73
- stub.get('/notfound') { |env| [404, {}, nil] }
75
+ stub.get('/notfound') { |_env| [404, {}, nil] }
74
76
  end
75
77
  end
76
78
  expect(client.options[:raise_errors]).to be true
@@ -109,6 +111,30 @@ describe OAuth2::Client do
109
111
  subject.options[:"#{url_type}_url"] = 'https://api.foo.com/oauth/custom'
110
112
  expect(subject.send("#{url_type}_url")).to eq('https://api.foo.com/oauth/custom')
111
113
  end
114
+
115
+ context 'when a URL with path is used in the site' do
116
+ let(:options) do
117
+ {:site => 'https://example.com/blog'}
118
+ end
119
+
120
+ it 'generates an authorization URL relative to the site' do
121
+ expect(subject.send("#{url_type}_url")).to eq("https://example.com/blog/oauth/#{url_type}")
122
+ end
123
+ end
124
+
125
+ context 'when a URL with path is used in the site and urls overridden' do
126
+ let(:options) do
127
+ {
128
+ :site => 'https://example.com/blog',
129
+ :authorize_url => "oauth/#{url_type}/lampoon",
130
+ :token_url => "oauth/#{url_type}/lampoon",
131
+ }
132
+ end
133
+
134
+ it 'generates an authorization URL relative to the site' do
135
+ expect(subject.send("#{url_type}_url")).to eq("https://example.com/blog/oauth/#{url_type}/lampoon")
136
+ end
137
+ end
112
138
  end
113
139
  end
114
140
 
@@ -403,10 +429,11 @@ describe OAuth2::Client do
403
429
  describe ':raise_errors flag' do
404
430
  let(:options) { {} }
405
431
  let(:token_response) { nil }
432
+ let(:post_args) { [] }
406
433
 
407
434
  let(:client) do
408
435
  stubbed_client(options.merge(:raise_errors => raise_errors)) do |stub|
409
- stub.post('/oauth/token') do
436
+ stub.post('/oauth/token', *post_args) do
410
437
  # stub 200 response so that we're testing the get_token handling of :raise_errors flag not request
411
438
  [200, {'Content-Type' => 'application/json'}, token_response]
412
439
  end
@@ -430,6 +457,29 @@ describe OAuth2::Client do
430
457
  end
431
458
  end
432
459
 
460
+ context 'when the request body has an access token' do
461
+ let(:token_response) { MultiJson.encode('access_token' => 'the-token') }
462
+
463
+ it 'returns the parsed :access_token from body' do
464
+ token = client.get_token({})
465
+ expect(token).to be_a OAuth2::AccessToken
466
+ expect(token.token).to eq('the-token')
467
+ end
468
+
469
+ context 'when :auth_scheme => :request_body' do
470
+ context 'when arbitrary params are present' do
471
+ let(:post_args) { ['arbitrary' => 'parameter', 'client_id' => 'abc', 'client_secret' => 'def'] }
472
+ let(:options) { {:auth_scheme => :request_body} }
473
+
474
+ it 'does not affect access token' do
475
+ token = client.get_token(*post_args)
476
+ expect(token).to be_a OAuth2::AccessToken
477
+ expect(token.token).to eq('the-token')
478
+ end
479
+ end
480
+ end
481
+ end
482
+
433
483
  context 'when extract_access_token raises an exception' do
434
484
  let(:options) do
435
485
  {
@@ -493,7 +543,7 @@ describe OAuth2::Client do
493
543
  context 'with SSL options' do
494
544
  subject do
495
545
  cli = described_class.new('abc', 'def', :site => 'https://api.example.com', :ssl => {:ca_file => 'foo.pem'})
496
- cli.connection.build do |b|
546
+ cli.connection = Faraday.new(cli.site, cli.options[:connection_opts]) do |b|
497
547
  b.adapter :test
498
548
  end
499
549
  cli
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::MACToken do
2
4
  subject { described_class.new(client, token, 'abc123') }
3
5
 
@@ -24,15 +26,18 @@ describe OAuth2::MACToken do
24
26
  end
25
27
 
26
28
  it 'defaults algorithm to hmac-sha-256' do
29
+ pending_for(:engine => 'ruby', :versions => '1.9.3', :reason => "Ruby 1.9's OpenSSL uses instance of OpenSSL::Digest")
27
30
  expect(subject.algorithm).to be_instance_of(OpenSSL::Digest::SHA256)
28
31
  end
29
32
 
30
33
  it 'handles hmac-sha-256' do
34
+ pending_for(:engine => 'ruby', :versions => '1.9.3', :reason => "Ruby 1.9's OpenSSL uses instance of OpenSSL::Digest")
31
35
  mac = described_class.new(client, token, 'abc123', :algorithm => 'hmac-sha-256')
32
36
  expect(mac.algorithm).to be_instance_of(OpenSSL::Digest::SHA256)
33
37
  end
34
38
 
35
39
  it 'handles hmac-sha-1' do
40
+ pending_for(:engine => 'ruby', :versions => '1.9.3', :reason => "Ruby 1.9's OpenSSL uses instance of OpenSSL::Digest")
36
41
  mac = described_class.new(client, token, 'abc123', :algorithm => 'hmac-sha-1')
37
42
  expect(mac.algorithm).to be_instance_of(OpenSSL::Digest::SHA1)
38
43
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::Response do
2
4
  describe '#initialize' do
3
5
  let(:status) { 200 }
@@ -75,6 +77,10 @@ describe OAuth2::Response do
75
77
  end
76
78
 
77
79
  context 'with xml parser registration' do
80
+ before do
81
+ MultiXml.parser = :rexml
82
+ end
83
+
78
84
  it 'tries to load multi_xml and use it' do
79
85
  expect(described_class.send(:class_variable_get, :@@parsers)[:xml]).not_to be_nil
80
86
  end
@@ -1,9 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'openssl'
4
+
1
5
  describe OAuth2::Strategy::Assertion do
2
- subject { client.assertion }
6
+ let(:client_assertion) { client.assertion }
3
7
 
4
8
  let(:client) do
5
9
  cli = OAuth2::Client.new('abc', 'def', :site => 'http://api.example.com')
6
- cli.connection.build do |b|
10
+ cli.connection = Faraday.new(cli.site, cli.options[:connection_opts]) do |b|
11
+ b.request :url_encoded
7
12
  b.adapter :test do |stub|
8
13
  stub.post('/oauth/token') do |env|
9
14
  case @mode
@@ -27,31 +32,81 @@ describe OAuth2::Strategy::Assertion do
27
32
 
28
33
  describe '#authorize_url' do
29
34
  it 'raises NotImplementedError' do
30
- expect { subject.authorize_url }.to raise_error(NotImplementedError)
35
+ expect { client_assertion.authorize_url }.to raise_error(NotImplementedError)
31
36
  end
32
37
  end
33
38
 
34
39
  %w[json formencoded].each do |mode|
35
- describe "#get_token (#{mode})" do
36
- before do
37
- @mode = mode
38
- @access = subject.get_token(params)
39
- end
40
+ before { @mode = mode }
40
41
 
41
- it 'returns AccessToken with same Client' do
42
- expect(@access.client).to eq(client)
43
- end
42
+ shared_examples_for "get_token #{mode}" do
43
+ describe "#get_token (#{mode})" do
44
+ subject(:get_token) { client_assertion.get_token(params) }
45
+
46
+ it 'returns AccessToken with same Client' do
47
+ expect(get_token.client).to eq(client)
48
+ end
44
49
 
45
- it 'returns AccessToken with #token' do
46
- expect(@access.token).to eq('salmon')
50
+ it 'returns AccessToken with #token' do
51
+ expect(get_token.token).to eq('salmon')
52
+ end
53
+
54
+ it 'returns AccessToken with #expires_in' do
55
+ expect(get_token.expires_in).to eq(600)
56
+ end
57
+
58
+ it 'returns AccessToken with #expires_at' do
59
+ expect(get_token.expires_at).not_to be_nil
60
+ end
47
61
  end
62
+ end
63
+
64
+ it_behaves_like "get_token #{mode}"
65
+ describe "#build_assertion (#{mode})" do
66
+ context 'with hmac_secret' do
67
+ subject(:build_assertion) { client_assertion.build_assertion(params) }
68
+
69
+ let(:hmac_secret) { '1883be842495c3b58f68ca71fbf1397fbb9ed2fdf8990f8404a25d0a1b995943' }
70
+ let(:params) do
71
+ {
72
+ :iss => 2345,
73
+ :aud => 'too',
74
+ :prn => 'much',
75
+ :exp => 123_456_789,
76
+ :hmac_secret => hmac_secret,
77
+ }
78
+ end
79
+ let(:jwt) { 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOjIzNDUsImF1ZCI6InRvbyIsInBybiI6Im11Y2giLCJleHAiOjEyMzQ1Njc4OX0.GnZjgcdc5WSWKNW0p9S4GuhpBs3LJCEqjPm6turLG-c' }
80
+
81
+ it 'returns JWT' do
82
+ expect(build_assertion).to eq(jwt)
83
+ end
48
84
 
49
- it 'returns AccessToken with #expires_in' do
50
- expect(@access.expires_in).to eq(600)
85
+ it_behaves_like "get_token #{mode}"
51
86
  end
52
87
 
53
- it 'returns AccessToken with #expires_at' do
54
- expect(@access.expires_at).not_to be_nil
88
+ context 'with private_key' do
89
+ subject(:build_assertion) { client_assertion.build_assertion(params) }
90
+
91
+ let(:private_key_file) { 'spec/fixtures/RS256/jwtRS256.key' }
92
+ let(:password) { '' }
93
+ let(:private_key) { OpenSSL::PKey::RSA.new(File.read(private_key_file), password) }
94
+ let(:params) do
95
+ {
96
+ :iss => 2345,
97
+ :aud => 'too',
98
+ :prn => 'much',
99
+ :exp => 123_456_789,
100
+ :private_key => private_key,
101
+ }
102
+ end
103
+ let(:jwt) { 'eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOjIzNDUsImF1ZCI6InRvbyIsInBybiI6Im11Y2giLCJleHAiOjEyMzQ1Njc4OX0.vJ32OiPVMdJrlNkPw02Y9u6beiFY0Mfndhg_CkEDLtOYn8dscQIEpWoR4GzH8tiQVOQ1fOkqxE95tNIKOTjnIoskmYnfzhzIl9fnfQ_lsEuLC-nq45KhPzSM2wYgF2ZEIjDq51daK70bRPzTBr1Id45cTY-jJSito0lbKXj2nPa_Gs-_vyEU2MSxjiMaIxxccfY4Ow5zN3AUMTKp6LjrpDKFxag3fJ1nrb6iDATa504gyJHVLift3ovhAwYidkA81WnmEtISWBY904CKIcZD9Cx3ifS5bc3JaLAteIBKAAyD8o7D60vOKutsjCMHUCKL357BQ36bW7fmaEtW367Ri-xgOsCY0_HeWp991vrJ-DxhFPeuF-8hn_9KggBzKbA2eKEOOY4iDKSFwjWQUFOcRdvHw9RgbGt0IjY3wdo8CaJVlhynh54YlaLgOFhTBPeMgZdqQUHOztljaK9zubeVkrDGNnGuSuq0KR82KArb1x2z7XyZpxiV5ZatP9SNyhn-YIWk7UeQYXaS0UfsBX7L5T1y_FZj84r7Vl42lj1DfdR5DyGvHfZyHotTnejdIrDuQfDL_bGe24eHsilzuEFaajYmu10hxflZ6Apm-lekRRV47tbxTF1zI5we14XsTeklrTXqgDkSw6gyOoNUJm-cQkJpfdvBgUHYGInC1ttz7NU' }
104
+
105
+ it 'returns JWT' do
106
+ expect(build_assertion).to eq(jwt)
107
+ end
108
+
109
+ it_behaves_like "get_token #{mode}"
55
110
  end
56
111
  end
57
112
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  describe OAuth2::Strategy::AuthCode do
4
5
  subject { client.auth_code }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::Strategy::Base do
2
4
  it 'initializes with a Client' do
3
5
  expect { described_class.new(OAuth2::Client.new('abc', 'def')) }.not_to raise_error
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::Strategy::ClientCredentials do
2
4
  subject { client.client_credentials }
3
5
 
@@ -9,7 +11,7 @@ describe OAuth2::Strategy::ClientCredentials do
9
11
  builder.adapter :test do |stub|
10
12
  stub.post('/oauth/token', 'grant_type' => 'client_credentials') do |env|
11
13
  client_id, client_secret = Base64.decode64(env[:request_headers]['Authorization'].split(' ', 2)[1]).split(':', 2)
12
- client_id == 'abc' && client_secret == 'def' || raise(Faraday::Adapter::Test::Stubs::NotFound)
14
+ (client_id == 'abc' && client_secret == 'def') || raise(Faraday::Adapter::Test::Stubs::NotFound)
13
15
  case @mode
14
16
  when 'formencoded'
15
17
  [200, {'Content-Type' => 'application/x-www-form-urlencoded'}, kvform_token]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::Strategy::Implicit do
2
4
  subject { client.implicit }
3
5
 
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  describe OAuth2::Strategy::Password do
2
4
  subject { client.password }
3
5
 
4
6
  let(:client) do
5
7
  cli = OAuth2::Client.new('abc', 'def', :site => 'http://api.example.com')
6
- cli.connection.build do |b|
8
+ cli.connection = Faraday.new(cli.site, cli.options[:connection_opts]) do |b|
9
+ b.request :url_encoded
7
10
  b.adapter :test do |stub|
8
11
  stub.post('/oauth/token') do |env|
9
12
  case @mode
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.7
4
+ version: 1.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2021-03-19 00:00:00.000000000 Z
13
+ date: 2022-02-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
@@ -18,20 +18,20 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '0.8'
21
+ version: 0.17.3
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '2.0'
24
+ version: '3.0'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: '0.8'
31
+ version: 0.17.3
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '2.0'
34
+ version: '3.0'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: jwt
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -114,20 +114,6 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '2.3'
117
- - !ruby/object:Gem::Dependency
118
- name: backports
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '3.11'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '3.11'
131
117
  - !ruby/object:Gem::Dependency
132
118
  name: bundler
133
119
  requirement: !ruby/object:Gem::Requirement
@@ -142,20 +128,6 @@ dependencies:
142
128
  - - ">="
143
129
  - !ruby/object:Gem::Version
144
130
  version: '1.16'
145
- - !ruby/object:Gem::Dependency
146
- name: coveralls
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '0.8'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '0.8'
159
131
  - !ruby/object:Gem::Dependency
160
132
  name: rake
161
133
  requirement: !ruby/object:Gem::Requirement
@@ -171,25 +143,19 @@ dependencies:
171
143
  - !ruby/object:Gem::Version
172
144
  version: '12.3'
173
145
  - !ruby/object:Gem::Dependency
174
- name: rdoc
146
+ name: rexml
175
147
  requirement: !ruby/object:Gem::Requirement
176
148
  requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- version: '5.0'
180
- - - "<"
149
+ - - "~>"
181
150
  - !ruby/object:Gem::Version
182
- version: '7'
151
+ version: '3.2'
183
152
  type: :development
184
153
  prerelease: false
185
154
  version_requirements: !ruby/object:Gem::Requirement
186
155
  requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- version: '5.0'
190
- - - "<"
156
+ - - "~>"
191
157
  - !ruby/object:Gem::Version
192
- version: '7'
158
+ version: '3.2'
193
159
  - !ruby/object:Gem::Dependency
194
160
  name: rspec
195
161
  requirement: !ruby/object:Gem::Requirement
@@ -260,20 +226,6 @@ dependencies:
260
226
  - - ">="
261
227
  - !ruby/object:Gem::Version
262
228
  version: '0'
263
- - !ruby/object:Gem::Dependency
264
- name: wwtd
265
- requirement: !ruby/object:Gem::Requirement
266
- requirements:
267
- - - ">="
268
- - !ruby/object:Gem::Version
269
- version: '0'
270
- type: :development
271
- prerelease: false
272
- version_requirements: !ruby/object:Gem::Requirement
273
- requirements:
274
- - - ">="
275
- - !ruby/object:Gem::Version
276
- version: '0'
277
229
  description: A Ruby wrapper for the OAuth 2.0 protocol built with a similar style
278
230
  to the original OAuth spec.
279
231
  email:
@@ -300,6 +252,9 @@ files:
300
252
  - lib/oauth2/strategy/implicit.rb
301
253
  - lib/oauth2/strategy/password.rb
302
254
  - lib/oauth2/version.rb
255
+ - spec/fixtures/README.md
256
+ - spec/fixtures/RS256/jwtRS256.key
257
+ - spec/fixtures/RS256/jwtRS256.key.pub
303
258
  - spec/helper.rb
304
259
  - spec/oauth2/access_token_spec.rb
305
260
  - spec/oauth2/authenticator_spec.rb
@@ -318,10 +273,11 @@ licenses:
318
273
  - MIT
319
274
  metadata:
320
275
  bug_tracker_uri: https://github.com/oauth-xx/oauth2/issues
321
- changelog_uri: https://github.com/oauth-xx/oauth2/blob/v1.4.7/CHANGELOG.md
322
- documentation_uri: https://www.rubydoc.info/gems/oauth2/1.4.7
323
- source_code_uri: https://github.com/oauth-xx/oauth2/tree/v1.4.7
276
+ changelog_uri: https://github.com/oauth-xx/oauth2/blob/v1.4.9/CHANGELOG.md
277
+ documentation_uri: https://www.rubydoc.info/gems/oauth2/1.4.9
278
+ source_code_uri: https://github.com/oauth-xx/oauth2/tree/v1.4.9
324
279
  wiki_uri: https://github.com/oauth-xx/oauth2/wiki
280
+ rubygems_mfa_required: 'true'
325
281
  post_install_message:
326
282
  rdoc_options: []
327
283
  require_paths:
@@ -337,21 +293,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
293
  - !ruby/object:Gem::Version
338
294
  version: 1.3.5
339
295
  requirements: []
340
- rubygems_version: 3.2.9
296
+ rubygems_version: 3.3.7
341
297
  signing_key:
342
298
  specification_version: 4
343
299
  summary: A Ruby wrapper for the OAuth 2.0 protocol.
344
300
  test_files:
301
+ - spec/fixtures/README.md
302
+ - spec/fixtures/RS256/jwtRS256.key
303
+ - spec/fixtures/RS256/jwtRS256.key.pub
345
304
  - spec/helper.rb
346
- - spec/oauth2/client_spec.rb
347
- - spec/oauth2/version_spec.rb
305
+ - spec/oauth2/access_token_spec.rb
348
306
  - spec/oauth2/authenticator_spec.rb
307
+ - spec/oauth2/client_spec.rb
349
308
  - spec/oauth2/mac_token_spec.rb
350
- - spec/oauth2/access_token_spec.rb
351
309
  - spec/oauth2/response_spec.rb
352
- - spec/oauth2/strategy/password_spec.rb
353
- - spec/oauth2/strategy/client_credentials_spec.rb
354
310
  - spec/oauth2/strategy/assertion_spec.rb
355
- - spec/oauth2/strategy/implicit_spec.rb
356
311
  - spec/oauth2/strategy/auth_code_spec.rb
357
312
  - spec/oauth2/strategy/base_spec.rb
313
+ - spec/oauth2/strategy/client_credentials_spec.rb
314
+ - spec/oauth2/strategy/implicit_spec.rb
315
+ - spec/oauth2/strategy/password_spec.rb
316
+ - spec/oauth2/version_spec.rb