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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +28 -2
- data/LICENSE +1 -1
- data/README.md +276 -116
- data/lib/oauth2/access_token.rb +4 -2
- data/lib/oauth2/authenticator.rb +3 -1
- data/lib/oauth2/client.rb +91 -56
- data/lib/oauth2/error.rb +3 -1
- data/lib/oauth2/mac_token.rb +18 -18
- data/lib/oauth2/response.rb +2 -0
- data/lib/oauth2/strategy/assertion.rb +3 -1
- data/lib/oauth2/strategy/auth_code.rb +3 -1
- data/lib/oauth2/strategy/base.rb +2 -0
- data/lib/oauth2/strategy/client_credentials.rb +3 -1
- data/lib/oauth2/strategy/implicit.rb +3 -1
- data/lib/oauth2/strategy/password.rb +3 -1
- data/lib/oauth2/version.rb +1 -1
- data/lib/oauth2.rb +2 -0
- data/spec/fixtures/README.md +11 -0
- data/spec/fixtures/RS256/jwtRS256.key +51 -0
- data/spec/fixtures/RS256/jwtRS256.key.pub +14 -0
- data/spec/helper.rb +9 -13
- data/spec/oauth2/access_token_spec.rb +3 -1
- data/spec/oauth2/authenticator_spec.rb +2 -0
- data/spec/oauth2/client_spec.rb +58 -8
- data/spec/oauth2/mac_token_spec.rb +5 -0
- data/spec/oauth2/response_spec.rb +6 -0
- data/spec/oauth2/strategy/assertion_spec.rb +72 -17
- data/spec/oauth2/strategy/auth_code_spec.rb +1 -0
- data/spec/oauth2/strategy/base_spec.rb +2 -0
- data/spec/oauth2/strategy/client_credentials_spec.rb +3 -1
- data/spec/oauth2/strategy/implicit_spec.rb +2 -0
- data/spec/oauth2/strategy/password_spec.rb +4 -1
- metadata +28 -69
data/spec/oauth2/client_spec.rb
CHANGED
@@ -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
|
-
|
50
|
-
allow(Faraday
|
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') { |
|
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.
|
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
|
-
|
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.
|
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 {
|
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
|
-
|
36
|
-
before do
|
37
|
-
@mode = mode
|
38
|
-
@access = subject.get_token(params)
|
39
|
-
end
|
40
|
+
before { @mode = mode }
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
-
|
46
|
-
|
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
|
-
|
50
|
-
expect(@access.expires_in).to eq(600)
|
85
|
+
it_behaves_like "get_token #{mode}"
|
51
86
|
end
|
52
87
|
|
53
|
-
|
54
|
-
|
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,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,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.
|
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.
|
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:
|
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:
|
21
|
+
version: 0.17.3
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
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:
|
31
|
+
version: 0.17.3
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
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:
|
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: '
|
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: '
|
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.
|
322
|
-
documentation_uri: https://www.rubydoc.info/gems/oauth2/1.4.
|
323
|
-
source_code_uri: https://github.com/oauth-xx/oauth2/tree/v1.4.
|
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.
|
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/
|
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
|