auth0 5.9.0 → 5.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -3
  3. data/.devcontainer/Dockerfile +19 -0
  4. data/.devcontainer/devcontainer.json +37 -0
  5. data/CHANGELOG.md +22 -0
  6. data/DEVELOPMENT.md +35 -0
  7. data/EXAMPLES.md +220 -0
  8. data/Gemfile +1 -0
  9. data/Gemfile.lock +59 -63
  10. data/README.md +68 -253
  11. data/auth0.gemspec +2 -4
  12. data/examples/ruby-api/Gemfile +3 -2
  13. data/examples/ruby-api/Gemfile.lock +33 -0
  14. data/examples/ruby-api/README.md +2 -2
  15. data/examples/ruby-on-rails-api/README.md +0 -2
  16. data/lib/auth0/api/authentication_endpoints.rb +70 -13
  17. data/lib/auth0/api/v2/clients.rb +42 -0
  18. data/lib/auth0/api/v2/jobs.rb +15 -4
  19. data/lib/auth0/api/v2/organizations.rb +1 -1
  20. data/lib/auth0/client_assertion.rb +45 -0
  21. data/lib/auth0/mixins/httpproxy.rb +11 -12
  22. data/lib/auth0/mixins/initializer.rb +2 -0
  23. data/lib/auth0/mixins/token_management.rb +2 -2
  24. data/lib/auth0/version.rb +1 -1
  25. data/opslevel.yml +5 -0
  26. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +2 -1
  27. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +1 -1
  28. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +1 -1
  29. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +1 -1
  30. 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
  31. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +1 -1
  32. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +1 -1
  33. data/spec/lib/auth0/api/authentication_endpoints_spec.rb +632 -0
  34. data/spec/lib/auth0/api/v2/clients_spec.rb +51 -0
  35. data/spec/lib/auth0/api/v2/jobs_spec.rb +18 -0
  36. data/spec/lib/auth0/mixins/httpproxy_spec.rb +53 -17
  37. data/spec/lib/auth0/mixins/initializer_spec.rb +79 -25
  38. data/spec/lib/auth0/mixins/token_management_spec.rb +47 -37
  39. data/spec/spec_helper.rb +4 -1
  40. data/spec/support/dummy_class_for_tokens.rb +2 -0
  41. 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
- before :each do
498
- @token_instance = DummyClassForTokens.new(
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
- end
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
- ) ).and_return(StubResponse.new({
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 { @token_instance.send(http_method, '/test') }.not_to raise_error
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: { "Authorization" => "Bearer access_token" }
542
+ headers: hash_including( "Authorization" => "Bearer access_token")
543
543
  )).and_return(StubResponse.new('Some random text here', true, 200))
544
544
 
545
- expect { @token_instance.send(http_method, '/test') }.not_to raise_error
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
- before :each do
553
- @token_instance = DummyClassForTokens.new(
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
- end
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: { params: {}, "Authorization" => "Bearer access_token" }
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 { @token_instance.send(http_method, '/test') }.not_to raise_error
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: { "Authorization" => "Bearer access_token" }
591
+ headers: hash_including("Authorization" => "Bearer access_token")
592
592
  )).and_return(StubResponse.new('Some random text here', true, 200))
593
593
 
594
- expect { @token_instance.send(http_method, '/test') }.not_to raise_error
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
- it 'fetches a token if none was given' do
49
- params[:client_id] = client_id = 'test_client_id'
50
- params[:client_secret] = client_secret = 'test_client_secret'
51
- params[:api_identifier] = api_identifier = 'test'
52
-
53
- payload = {
54
- grant_type: 'client_credentials',
55
- client_id: client_id,
56
- client_secret: client_secret,
57
- audience: api_identifier
58
- }
59
-
60
- expect(RestClient::Request).to receive(:execute).with(hash_including(
61
- method: :post,
62
- url: 'https://samples.auth0.com/oauth/token',
63
- payload: payload.to_json
64
- ))
65
- .and_return(StubResponse.new({
66
- "access_token" => "test",
67
- "expires_in" => 86400},
68
- true,
69
- 200))
70
-
71
- expect(instance.instance_variable_get('@token')).to eq('test')
72
- expect(instance.instance_variable_get('@token_expires_at')).to eq(time_now.to_i + 86400)
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).with(hash_including(
38
- method: :post,
39
- url: 'https://samples.auth0.com/oauth/token',
40
- payload: payload.to_json
41
- ))
42
- .and_return(StubResponse.new({
43
- "access_token" => "test",
44
- "expires_in" => 86400},
45
- true,
46
- 200))
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).with(hash_including(
74
- method: :post,
75
- url: 'https://samples.auth0.com/oauth/token',
76
- payload: payload.to_json
77
- ))
78
- .and_return(StubResponse.new({
79
- "access_token" => "renewed_token",
80
- "expires_in" => 86400},
81
- true,
82
- 200))
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).with(hash_including(
95
- method: :post,
96
- url: 'https://samples.auth0.com/oauth/token',
97
- payload: payload.to_json
98
- ))
99
- .and_return(StubResponse.new({
100
- "access_token" => "renewed_token",
101
- "expires_in" => 86400},
102
- true,
103
- 200))
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).with(hash_including(
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.9.0
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: 2022-08-24 00:00:00.000000000 Z
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.3.0
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.3.0
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.5'
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.5'
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.11
617
+ rubygems_version: 3.3.26
638
618
  signing_key:
639
619
  specification_version: 4
640
620
  summary: Auth0 API Client