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