auth0 5.9.0 → 5.11.0

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.
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