oauth2 1.4.7 → 1.4.9

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