auth0 5.9.0 → 5.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +3 -3
- data/.devcontainer/Dockerfile +19 -0
- data/.devcontainer/devcontainer.json +37 -0
- data/CHANGELOG.md +22 -0
- data/DEVELOPMENT.md +35 -0
- data/EXAMPLES.md +220 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +59 -63
- data/README.md +68 -253
- data/auth0.gemspec +2 -4
- data/examples/ruby-api/Gemfile +3 -2
- data/examples/ruby-api/Gemfile.lock +33 -0
- data/examples/ruby-api/README.md +2 -2
- data/examples/ruby-on-rails-api/README.md +0 -2
- data/lib/auth0/api/authentication_endpoints.rb +70 -13
- data/lib/auth0/api/v2/clients.rb +42 -0
- data/lib/auth0/api/v2/jobs.rb +15 -4
- data/lib/auth0/api/v2/organizations.rb +1 -1
- data/lib/auth0/client_assertion.rb +45 -0
- data/lib/auth0/mixins/httpproxy.rb +11 -12
- data/lib/auth0/mixins/initializer.rb +2 -0
- data/lib/auth0/mixins/token_management.rb +2 -2
- data/lib/auth0/version.rb +1 -1
- data/opslevel.yml +5 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +2 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +1 -1
- data/spec/lib/auth0/api/authentication_endpoints_spec.rb +632 -0
- data/spec/lib/auth0/api/v2/clients_spec.rb +51 -0
- data/spec/lib/auth0/api/v2/jobs_spec.rb +18 -0
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +53 -17
- data/spec/lib/auth0/mixins/initializer_spec.rb +79 -25
- data/spec/lib/auth0/mixins/token_management_spec.rb +47 -37
- data/spec/spec_helper.rb +4 -1
- data/spec/support/dummy_class_for_tokens.rb +2 -0
- metadata +15 -35
@@ -67,6 +67,7 @@ describe Auth0::Api::V2::Jobs do
|
|
67
67
|
format: 'csv',
|
68
68
|
limit: 10
|
69
69
|
})
|
70
|
+
|
70
71
|
@instance.export_users(
|
71
72
|
fields: ['author'],
|
72
73
|
connection_id: 'test-connection',
|
@@ -74,6 +75,23 @@ describe Auth0::Api::V2::Jobs do
|
|
74
75
|
limit: 10
|
75
76
|
)
|
76
77
|
end
|
78
|
+
|
79
|
+
it 'sends post to /api/v2/jobs/users-exports with export_as field' do
|
80
|
+
expect(@instance).to receive(:post).with(
|
81
|
+
'/api/v2/jobs/users-exports', {
|
82
|
+
fields: [{ name: 'author', export_as: 'writer' }],
|
83
|
+
connection_id: 'test-connection',
|
84
|
+
format: 'csv',
|
85
|
+
limit: 10
|
86
|
+
})
|
87
|
+
|
88
|
+
@instance.export_users(
|
89
|
+
fields: [{ name: 'author', export_as: 'writer' }],
|
90
|
+
connection_id: 'test-connection',
|
91
|
+
format: 'csv',
|
92
|
+
limit: 10
|
93
|
+
)
|
94
|
+
end
|
77
95
|
end
|
78
96
|
|
79
97
|
context '.send_verification_email' do
|
@@ -494,12 +494,13 @@ describe Auth0::Mixins::HTTPProxy do
|
|
494
494
|
end
|
495
495
|
|
496
496
|
context "Renewing tokens" do
|
497
|
-
|
498
|
-
|
497
|
+
let(:httpproxy_instance) {
|
498
|
+
DummyClassForTokens.new(
|
499
499
|
client_id: 'test-client-id',
|
500
500
|
client_secret: 'test-client-secret',
|
501
|
-
domain: 'auth0.com'
|
502
|
-
|
501
|
+
domain: 'auth0.com',
|
502
|
+
)
|
503
|
+
}
|
503
504
|
|
504
505
|
%i(get delete).each do |http_method|
|
505
506
|
context "for #{http_method}" do
|
@@ -507,7 +508,7 @@ describe Auth0::Mixins::HTTPProxy do
|
|
507
508
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
508
509
|
method: :post,
|
509
510
|
url: 'https://auth0.com/oauth/token',
|
510
|
-
)
|
511
|
+
)).and_return(StubResponse.new({
|
511
512
|
"access_token" => "access_token",
|
512
513
|
"expires_in" => 86400},
|
513
514
|
true,
|
@@ -515,11 +516,10 @@ describe Auth0::Mixins::HTTPProxy do
|
|
515
516
|
|
516
517
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
517
518
|
method: http_method,
|
518
|
-
url: 'https://auth0.com/test'
|
519
|
-
headers: { params: {}, "Authorization" => "Bearer access_token" }
|
519
|
+
url: 'https://auth0.com/test'
|
520
520
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
521
521
|
|
522
|
-
expect {
|
522
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
523
523
|
end
|
524
524
|
end
|
525
525
|
end
|
@@ -539,24 +539,24 @@ describe Auth0::Mixins::HTTPProxy do
|
|
539
539
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
540
540
|
method: http_method,
|
541
541
|
url: 'https://auth0.com/test',
|
542
|
-
headers:
|
542
|
+
headers: hash_including( "Authorization" => "Bearer access_token")
|
543
543
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
544
544
|
|
545
|
-
expect {
|
545
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
546
546
|
end
|
547
547
|
end
|
548
548
|
end
|
549
549
|
end
|
550
550
|
|
551
551
|
context "Using cached tokens" do
|
552
|
-
|
553
|
-
|
552
|
+
let(:httpproxy_instance) {
|
553
|
+
DummyClassForTokens.new(
|
554
554
|
client_id: 'test-client-id',
|
555
555
|
client_secret: 'test-client-secret',
|
556
556
|
domain: 'auth0.com',
|
557
557
|
token: 'access_token',
|
558
558
|
token_expires_at: Time.now.to_i + 86400)
|
559
|
-
|
559
|
+
}
|
560
560
|
|
561
561
|
%i(get delete).each do |http_method|
|
562
562
|
context "for #{http_method}" do
|
@@ -569,10 +569,10 @@ describe Auth0::Mixins::HTTPProxy do
|
|
569
569
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
570
570
|
method: http_method,
|
571
571
|
url: 'https://auth0.com/test',
|
572
|
-
headers:
|
572
|
+
headers: hash_including(params: {}, "Authorization" => "Bearer access_token")
|
573
573
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
574
574
|
|
575
|
-
expect {
|
575
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
576
576
|
end
|
577
577
|
end
|
578
578
|
end
|
@@ -588,10 +588,46 @@ describe Auth0::Mixins::HTTPProxy do
|
|
588
588
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
589
589
|
method: http_method,
|
590
590
|
url: 'https://auth0.com/test',
|
591
|
-
headers:
|
591
|
+
headers: hash_including("Authorization" => "Bearer access_token")
|
592
592
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
593
593
|
|
594
|
-
expect {
|
594
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
595
|
+
end
|
596
|
+
end
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
context 'Normal operation' do
|
601
|
+
let(:httpproxy_instance) {
|
602
|
+
DummyClassForTokens.new(
|
603
|
+
client_id: 'test-client-id',
|
604
|
+
client_secret: 'test-client-secret',
|
605
|
+
domain: 'auth0.com',
|
606
|
+
token: 'access_token',
|
607
|
+
token_expires_at: Time.now.to_i + 86400)
|
608
|
+
}
|
609
|
+
|
610
|
+
# This sets up a test matrix to verify that both :get and :delete calls (the only two HTTP methods in the proxy that mutated headers)
|
611
|
+
# don't bleed query params into subsequent calls to :post :patch and :put.
|
612
|
+
%i(get delete).each do |http_get_delete|
|
613
|
+
%i(post patch put).each do |http_ppp|
|
614
|
+
it "should not bleed :#{http_get_delete} headers/parameters to the subsequent :#{http_ppp} request" do
|
615
|
+
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
616
|
+
method: http_get_delete,
|
617
|
+
url: "https://auth0.com/test-#{http_get_delete}",
|
618
|
+
headers: hash_including(params: { email: 'test@test.com' })
|
619
|
+
)).and_return(StubResponse.new('OK', true, 200))
|
620
|
+
|
621
|
+
# email: parameter that is sent in the GET request should not appear
|
622
|
+
# as a parameter in the `headers` hash for the subsequent PATCH request.
|
623
|
+
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
624
|
+
method: http_ppp,
|
625
|
+
url: "https://auth0.com/test-#{http_ppp}",
|
626
|
+
headers: hash_not_including(:params)
|
627
|
+
)).and_return(StubResponse.new('OK', true, 200))
|
628
|
+
|
629
|
+
expect { httpproxy_instance.send(http_get_delete, "/test-#{http_get_delete}", { email: 'test@test.com' }) }.not_to raise_error
|
630
|
+
expect { httpproxy_instance.send(http_ppp, "/test-#{http_ppp}") }.not_to raise_error
|
595
631
|
end
|
596
632
|
end
|
597
633
|
end
|
@@ -13,6 +13,15 @@ describe Auth0::Mixins::Initializer do
|
|
13
13
|
let(:params) { { namespace: 'samples.auth0.com' } }
|
14
14
|
let(:instance) { DummyClassForProxy.send(:include, described_class).new(params) }
|
15
15
|
let(:time_now) { Time.now }
|
16
|
+
|
17
|
+
let(:client_assertion_signing_key_pair) do
|
18
|
+
rsa_private = OpenSSL::PKey::RSA.generate 2048
|
19
|
+
|
20
|
+
{
|
21
|
+
public_key: rsa_private.public_key,
|
22
|
+
private_key: rsa_private
|
23
|
+
}
|
24
|
+
end
|
16
25
|
|
17
26
|
context 'api v2' do
|
18
27
|
it 'sets retry_count when passed' do
|
@@ -45,31 +54,76 @@ describe Auth0::Mixins::Initializer do
|
|
45
54
|
expect(instance.instance_variable_get('@token')).to eq('123')
|
46
55
|
end
|
47
56
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
57
|
+
context 'with a client secret' do
|
58
|
+
it 'fetches a token if none was given' do
|
59
|
+
params[:client_id] = client_id = 'test_client_id'
|
60
|
+
params[:client_secret] = client_secret = 'test_client_secret'
|
61
|
+
params[:api_identifier] = api_identifier = 'test'
|
62
|
+
|
63
|
+
payload = {
|
64
|
+
grant_type: 'client_credentials',
|
65
|
+
client_id: client_id,
|
66
|
+
client_secret: client_secret,
|
67
|
+
audience: api_identifier
|
68
|
+
}
|
69
|
+
|
70
|
+
expect(RestClient::Request).to receive(:execute) do |arg|
|
71
|
+
expect(arg).to(match(
|
72
|
+
include(
|
73
|
+
method: :post,
|
74
|
+
url: 'https://samples.auth0.com/oauth/token'
|
75
|
+
)
|
76
|
+
))
|
77
|
+
|
78
|
+
expect(JSON.parse(arg[:payload], { symbolize_names: true })).to eq(payload)
|
79
|
+
|
80
|
+
StubResponse.new({
|
81
|
+
"access_token" => "test",
|
82
|
+
"expires_in" => 86400},
|
83
|
+
true,
|
84
|
+
200)
|
85
|
+
end
|
86
|
+
|
87
|
+
expect(instance.instance_variable_get('@token')).to eq('test')
|
88
|
+
expect(instance.instance_variable_get('@token_expires_at')).to eq(time_now.to_i + 86400)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'with a client assertion signing key' do
|
93
|
+
it 'fetches a token if none was given' do
|
94
|
+
private_key = client_assertion_signing_key_pair[:private_key]
|
95
|
+
|
96
|
+
params[:client_id] = client_id = 'test_client_id'
|
97
|
+
params[:api_identifier] = api_identifier = 'test'
|
98
|
+
params[:client_assertion_signing_key] = private_key
|
99
|
+
|
100
|
+
expect(RestClient::Request).to receive(:execute) do |arg|
|
101
|
+
expect(arg).to(match(
|
102
|
+
include(
|
103
|
+
method: :post,
|
104
|
+
url: 'https://samples.auth0.com/oauth/token'
|
105
|
+
)
|
106
|
+
))
|
107
|
+
|
108
|
+
payload = JSON.parse(arg[:payload], { symbolize_names: true })
|
109
|
+
|
110
|
+
expect(payload[:grant_type]).to eq 'client_credentials'
|
111
|
+
expect(payload[:client_id]).to eq client_id
|
112
|
+
expect(payload[:audience]).to eq api_identifier
|
113
|
+
expect(payload[:client_secret]).to be_nil
|
114
|
+
expect(payload[:client_assertion]).not_to be_nil
|
115
|
+
expect(payload[:client_assertion_type]).to eq Auth0::ClientAssertion::CLIENT_ASSERTION_TYPE
|
116
|
+
|
117
|
+
StubResponse.new({
|
118
|
+
"access_token" => "test",
|
119
|
+
"expires_in" => 86400},
|
120
|
+
true,
|
121
|
+
200)
|
122
|
+
end
|
123
|
+
|
124
|
+
expect(instance.instance_variable_get('@token')).to eq('test')
|
125
|
+
expect(instance.instance_variable_get('@token_expires_at')).to eq(time_now.to_i + 86400)
|
126
|
+
end
|
73
127
|
end
|
74
128
|
|
75
129
|
it "doesn't get a new token if one was supplied using 'token'" do
|
@@ -34,16 +34,21 @@ describe Auth0::Mixins::TokenManagement do
|
|
34
34
|
|
35
35
|
context 'get_token' do
|
36
36
|
it 'renews the token if there is no token set' do
|
37
|
-
expect(RestClient::Request).to receive(:execute)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
expect(RestClient::Request).to receive(:execute) do |arg|
|
38
|
+
expect(arg).to(match(
|
39
|
+
include(
|
40
|
+
method: :post,
|
41
|
+
url: 'https://samples.auth0.com/oauth/token'
|
42
|
+
)))
|
43
|
+
|
44
|
+
expect(JSON.parse(arg[:payload], { symbolize_names: true })).to eq(payload)
|
45
|
+
|
46
|
+
StubResponse.new({
|
47
|
+
"access_token" => "test",
|
48
|
+
"expires_in" => 86400},
|
49
|
+
true,
|
50
|
+
200)
|
51
|
+
end
|
47
52
|
|
48
53
|
instance.send(:get_token)
|
49
54
|
|
@@ -70,16 +75,21 @@ describe Auth0::Mixins::TokenManagement do
|
|
70
75
|
params[:token] = 'test-token'
|
71
76
|
params[:token_expires_at] = time_now.to_i + 5
|
72
77
|
|
73
|
-
expect(RestClient::Request).to receive(:execute)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
78
|
+
expect(RestClient::Request).to receive(:execute) do |arg|
|
79
|
+
expect(arg).to(match(
|
80
|
+
include(
|
81
|
+
method: :post,
|
82
|
+
url: 'https://samples.auth0.com/oauth/token'
|
83
|
+
)))
|
84
|
+
|
85
|
+
expect(JSON.parse(arg[:payload], { symbolize_names: true })).to eq(payload)
|
86
|
+
|
87
|
+
StubResponse.new({
|
88
|
+
"access_token" => "renewed_token",
|
89
|
+
"expires_in" => 86400},
|
90
|
+
true,
|
91
|
+
200)
|
92
|
+
end
|
83
93
|
|
84
94
|
instance.send(:get_token)
|
85
95
|
|
@@ -91,16 +101,21 @@ describe Auth0::Mixins::TokenManagement do
|
|
91
101
|
params[:token] = 'test-token'
|
92
102
|
params[:token_expires_at] = time_now.to_i - 10
|
93
103
|
|
94
|
-
expect(RestClient::Request).to receive(:execute)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
+
expect(RestClient::Request).to receive(:execute) do |arg|
|
105
|
+
expect(arg).to(match(
|
106
|
+
include(
|
107
|
+
method: :post,
|
108
|
+
url: 'https://samples.auth0.com/oauth/token'
|
109
|
+
)))
|
110
|
+
|
111
|
+
expect(JSON.parse(arg[:payload], { symbolize_names: true })).to eq(payload)
|
112
|
+
|
113
|
+
StubResponse.new({
|
114
|
+
"access_token" => "renewed_token",
|
115
|
+
"expires_in" => 86400},
|
116
|
+
true,
|
117
|
+
200)
|
118
|
+
end
|
104
119
|
|
105
120
|
instance.send(:get_token)
|
106
121
|
|
@@ -110,16 +125,11 @@ describe Auth0::Mixins::TokenManagement do
|
|
110
125
|
|
111
126
|
it 'does not renew existing token if no token_expires_at' do
|
112
127
|
params[:token] = 'test-token'
|
128
|
+
instance.instance_variable_set '@token_expires_at', nil
|
113
129
|
|
114
|
-
expect(RestClient::Request).not_to receive(:execute)
|
115
|
-
method: :post,
|
116
|
-
url: 'https://samples.auth0.com/oauth/token',
|
117
|
-
))
|
130
|
+
expect(RestClient::Request).not_to receive(:execute)
|
118
131
|
|
119
132
|
instance.send(:get_token)
|
120
|
-
|
121
|
-
expect(instance.instance_variable_get('@token')).to eq('test-token')
|
122
|
-
expect(instance.instance_variable_get('@token_expires_at')).to be_nil
|
123
133
|
end
|
124
134
|
end
|
125
135
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'pry'
|
2
1
|
require 'rack/test'
|
3
2
|
require 'faker'
|
4
3
|
require 'json'
|
@@ -51,6 +50,10 @@ RSpec.configure do |config|
|
|
51
50
|
config.filter_run focus: true
|
52
51
|
config.run_all_when_everything_filtered = true
|
53
52
|
config.include Credentials
|
53
|
+
|
54
|
+
config.expect_with :rspec do |c|
|
55
|
+
c.max_formatted_output_length = 1000000
|
56
|
+
end
|
54
57
|
end
|
55
58
|
|
56
59
|
def wait(time, increment = 5, elapsed_time = 0, &block)
|
@@ -13,5 +13,7 @@ class DummyClassForTokens
|
|
13
13
|
@base_uri = "https://#{@domain}"
|
14
14
|
@token = config[:token]
|
15
15
|
@token_expires_at = config[:token_expires_at]
|
16
|
+
@client_assertion_signing_key = config[:client_assertion_signing_key]
|
17
|
+
@client_assertion_signing_alg = config[:client_assertion_signing_alg] || 'RS256'
|
16
18
|
end
|
17
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auth0
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Auth0
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2023-01-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rest-client
|
@@ -33,14 +33,14 @@ dependencies:
|
|
33
33
|
requirements:
|
34
34
|
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 2.
|
36
|
+
version: '2.5'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 2.
|
43
|
+
version: '2.5'
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: zache
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,48 +139,20 @@ dependencies:
|
|
139
139
|
- - "~>"
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '2.0'
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: pry
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
requirements:
|
146
|
-
- - "~>"
|
147
|
-
- !ruby/object:Gem::Version
|
148
|
-
version: '0.10'
|
149
|
-
type: :development
|
150
|
-
prerelease: false
|
151
|
-
version_requirements: !ruby/object:Gem::Requirement
|
152
|
-
requirements:
|
153
|
-
- - "~>"
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version: '0.10'
|
156
|
-
- !ruby/object:Gem::Dependency
|
157
|
-
name: pry-nav
|
158
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
-
requirements:
|
160
|
-
- - "~>"
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
version: '0.2'
|
163
|
-
type: :development
|
164
|
-
prerelease: false
|
165
|
-
version_requirements: !ruby/object:Gem::Requirement
|
166
|
-
requirements:
|
167
|
-
- - "~>"
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '0.2'
|
170
142
|
- !ruby/object:Gem::Dependency
|
171
143
|
name: rspec
|
172
144
|
requirement: !ruby/object:Gem::Requirement
|
173
145
|
requirements:
|
174
146
|
- - "~>"
|
175
147
|
- !ruby/object:Gem::Version
|
176
|
-
version: '3.
|
148
|
+
version: '3.11'
|
177
149
|
type: :development
|
178
150
|
prerelease: false
|
179
151
|
version_requirements: !ruby/object:Gem::Requirement
|
180
152
|
requirements:
|
181
153
|
- - "~>"
|
182
154
|
- !ruby/object:Gem::Version
|
183
|
-
version: '3.
|
155
|
+
version: '3.11'
|
184
156
|
- !ruby/object:Gem::Dependency
|
185
157
|
name: rack-test
|
186
158
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,6 +232,8 @@ extra_rdoc_files: []
|
|
260
232
|
files:
|
261
233
|
- ".bundle/config"
|
262
234
|
- ".circleci/config.yml"
|
235
|
+
- ".devcontainer/Dockerfile"
|
236
|
+
- ".devcontainer/devcontainer.json"
|
263
237
|
- ".env.example"
|
264
238
|
- ".gemrelease"
|
265
239
|
- ".github/CODEOWNERS"
|
@@ -278,7 +252,9 @@ files:
|
|
278
252
|
- CHANGELOG.md
|
279
253
|
- CODE_OF_CONDUCT.md
|
280
254
|
- DEPLOYMENT.md
|
255
|
+
- DEVELOPMENT.md
|
281
256
|
- Dockerfile
|
257
|
+
- EXAMPLES.md
|
282
258
|
- Gemfile
|
283
259
|
- Gemfile.lock
|
284
260
|
- Guardfile
|
@@ -291,6 +267,7 @@ files:
|
|
291
267
|
- examples/ruby-api/.env.example
|
292
268
|
- examples/ruby-api/.gitignore
|
293
269
|
- examples/ruby-api/Gemfile
|
270
|
+
- examples/ruby-api/Gemfile.lock
|
294
271
|
- examples/ruby-api/README.md
|
295
272
|
- examples/ruby-api/config.ru
|
296
273
|
- examples/ruby-api/main.rb
|
@@ -386,6 +363,7 @@ files:
|
|
386
363
|
- lib/auth0/api/v2/users.rb
|
387
364
|
- lib/auth0/api/v2/users_by_email.rb
|
388
365
|
- lib/auth0/client.rb
|
366
|
+
- lib/auth0/client_assertion.rb
|
389
367
|
- lib/auth0/exception.rb
|
390
368
|
- lib/auth0/mixins.rb
|
391
369
|
- lib/auth0/mixins/access_token_struct.rb
|
@@ -398,6 +376,7 @@ files:
|
|
398
376
|
- lib/auth0/mixins/validation.rb
|
399
377
|
- lib/auth0/version.rb
|
400
378
|
- lib/auth0_client.rb
|
379
|
+
- opslevel.yml
|
401
380
|
- publish_rubygem.sh
|
402
381
|
- spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml
|
403
382
|
- spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml
|
@@ -576,6 +555,7 @@ files:
|
|
576
555
|
- spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb
|
577
556
|
- spec/integration/lib/auth0/api/v2/api_users_spec.rb
|
578
557
|
- spec/integration/lib/auth0/auth0_client_spec.rb
|
558
|
+
- spec/lib/auth0/api/authentication_endpoints_spec.rb
|
579
559
|
- spec/lib/auth0/api/v2/actions_spec.rb
|
580
560
|
- spec/lib/auth0/api/v2/anomaly_spec.rb
|
581
561
|
- spec/lib/auth0/api/v2/attack_protection_spec.rb
|
@@ -634,7 +614,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
634
614
|
- !ruby/object:Gem::Version
|
635
615
|
version: '0'
|
636
616
|
requirements: []
|
637
|
-
rubygems_version: 3.3.
|
617
|
+
rubygems_version: 3.3.26
|
638
618
|
signing_key:
|
639
619
|
specification_version: 4
|
640
620
|
summary: Auth0 API Client
|