auth0 5.12.0 → 5.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c2af1fc93dab97200124859fd5580e1ad973e831caa3784b96f65fc35d75a67
4
- data.tar.gz: 26b20a1047ee3922c1aad85941dbf9315d726a25d01ed52c95fc6b9f90da373b
3
+ metadata.gz: cb764cc8daf156b3d3736bff8c65c69c32db6d15757f2e450ea85eb0dca300c0
4
+ data.tar.gz: b0cfc02df42818062bc5cb609daaffd04806f9ea92f771caf58575b9faa781c8
5
5
  SHA512:
6
- metadata.gz: 15d0e7917d187ad06e04f3a17cd8d076486fc82c3e6c40a217c2994b15f7b4a0a31c58f621e9d8ad40072af451c56e6696e7fced2a3e8b0bffc67a6645afe0b4
7
- data.tar.gz: 60e8606c4bdaef79ef5747783ef32cd9d342bc14726aa13593277f16483a0baff0bc928fff9115f6ac8c97537f9dcc503dbb2b9b5571ba8bac0cf39f7cc49356
6
+ metadata.gz: 68c6502714f8c631aa92a0b29d387e662cf06b9ec4e18f4d12e3260a7068a5e754b1f29bc60a76b2defa54763919ee9b6e31ffb5181d1c0d38c584bf4d0186a3
7
+ data.tar.gz: 26a2e83b7aa49807d45cda688d857d8dc93177bdd4a47b92b0e952561a2dbda2a056a15c537b71a787d22ddebb5ebb4fddb9f7e83fb26ce7e769b1c23a49c221
data/.circleci/config.yml CHANGED
@@ -6,7 +6,7 @@ orbs:
6
6
  matrix_ruby_versions: &matrix_ruby_versions
7
7
  matrix:
8
8
  parameters:
9
- ruby_version: ["2.7", "3.0", "3.1", "3.2"]
9
+ ruby_version: ["3.0", "3.1", "3.2"]
10
10
  # Default version of ruby to use for lint and publishing
11
11
  default_ruby_version: &default_ruby_version "3.2"
12
12
 
@@ -41,7 +41,8 @@ jobs:
41
41
  - vendor/bundle
42
42
  # Must define DOMAIN, CLIENT_ID, CLIENT_SECRET and MASTER_JWT env
43
43
  - run: bundle exec rake test
44
- - codecov/upload
44
+ - codecov/upload:
45
+ file: /home/circleci/project/coverage/coverage.xml
45
46
 
46
47
  workflows:
47
48
  tests:
data/.semgrepignore ADDED
@@ -0,0 +1,6 @@
1
+ .bundle/
2
+ .circleci/
3
+ .devcontainer/
4
+ .github/
5
+ examples/
6
+ spec/
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Change Log
2
2
 
3
+ ## [v5.13.0](https://github.com/auth0/ruby-auth0/tree/v5.13.0) (2023-04-24)
4
+ [Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.12.0...v5.13.0)
5
+
6
+ **Added**
7
+ - [SDK-4142] Add support for /oauth/par [\#470](https://github.com/auth0/ruby-auth0/pull/470) ([stevehobbsdev](https://github.com/stevehobbsdev))
8
+
9
+ **Deprecated**
10
+ - Drop support for 2.7 in CI build [\#467](https://github.com/auth0/ruby-auth0/pull/467) ([stevehobbsdev](https://github.com/stevehobbsdev))
11
+
3
12
  ## [v5.12.0](https://github.com/auth0/ruby-auth0/tree/v5.12.0) (2023-03-13)
4
13
  [Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.11.0...v5.12.0)
5
14
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- auth0 (5.12.0)
4
+ auth0 (5.13.0)
5
5
  addressable (~> 2.8)
6
6
  jwt (~> 2.5)
7
7
  rest-client (~> 2.1)
@@ -11,25 +11,25 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- actionpack (7.0.4.2)
15
- actionview (= 7.0.4.2)
16
- activesupport (= 7.0.4.2)
14
+ actionpack (7.0.4.3)
15
+ actionview (= 7.0.4.3)
16
+ activesupport (= 7.0.4.3)
17
17
  rack (~> 2.0, >= 2.2.0)
18
18
  rack-test (>= 0.6.3)
19
19
  rails-dom-testing (~> 2.0)
20
20
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
21
- actionview (7.0.4.2)
22
- activesupport (= 7.0.4.2)
21
+ actionview (7.0.4.3)
22
+ activesupport (= 7.0.4.3)
23
23
  builder (~> 3.1)
24
24
  erubi (~> 1.4)
25
25
  rails-dom-testing (~> 2.0)
26
26
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
27
- activesupport (7.0.4.2)
27
+ activesupport (7.0.4.3)
28
28
  concurrent-ruby (~> 1.0, >= 1.0.2)
29
29
  i18n (>= 1.6, < 2)
30
30
  minitest (>= 5.1)
31
31
  tzinfo (~> 2.0)
32
- addressable (2.8.1)
32
+ addressable (2.8.4)
33
33
  public_suffix (>= 2.0.2, < 6.0)
34
34
  ast (2.4.2)
35
35
  builder (3.2.4)
@@ -65,11 +65,11 @@ GEM
65
65
  i18n (1.12.0)
66
66
  concurrent-ruby (~> 1.0)
67
67
  io-console (0.6.0)
68
- irb (1.6.3)
68
+ irb (1.6.4)
69
69
  reline (>= 0.3.0)
70
70
  json (2.6.3)
71
71
  jwt (2.7.0)
72
- loofah (2.19.1)
72
+ loofah (2.20.0)
73
73
  crass (~> 1.0.2)
74
74
  nokogiri (>= 1.5.9)
75
75
  method_source (1.0.0)
@@ -79,17 +79,17 @@ GEM
79
79
  minitest (5.18.0)
80
80
  multi_json (1.15.0)
81
81
  netrc (0.11.0)
82
- nokogiri (1.14.2-x86_64-linux)
82
+ nokogiri (1.14.3-x86_64-linux)
83
83
  racc (~> 1.4)
84
- parallel (1.22.1)
85
- parser (3.2.1.1)
84
+ parallel (1.23.0)
85
+ parser (3.2.2.1)
86
86
  ast (~> 2.4.1)
87
87
  pp (0.4.0)
88
88
  prettyprint
89
89
  prettyprint (0.1.1)
90
90
  public_suffix (5.0.1)
91
91
  racc (1.6.2)
92
- rack (2.2.6.3)
92
+ rack (2.2.6.4)
93
93
  rack-test (0.8.3)
94
94
  rack (>= 1.0, < 3)
95
95
  rails-dom-testing (2.0.3)
@@ -97,17 +97,17 @@ GEM
97
97
  nokogiri (>= 1.6)
98
98
  rails-html-sanitizer (1.5.0)
99
99
  loofah (~> 2.19, >= 2.19.1)
100
- railties (7.0.4.2)
101
- actionpack (= 7.0.4.2)
102
- activesupport (= 7.0.4.2)
100
+ railties (7.0.4.3)
101
+ actionpack (= 7.0.4.3)
102
+ activesupport (= 7.0.4.3)
103
103
  method_source
104
104
  rake (>= 12.2)
105
105
  thor (~> 1.0)
106
106
  zeitwerk (~> 2.5)
107
107
  rainbow (3.1.1)
108
108
  rake (13.0.6)
109
- regexp_parser (2.7.0)
110
- reline (0.3.2)
109
+ regexp_parser (2.8.0)
110
+ reline (0.3.3)
111
111
  io-console (~> 0.5)
112
112
  rest-client (2.1.0)
113
113
  http-accept (>= 1.7.0, < 2.0)
@@ -120,28 +120,28 @@ GEM
120
120
  rspec-core (~> 3.12.0)
121
121
  rspec-expectations (~> 3.12.0)
122
122
  rspec-mocks (~> 3.12.0)
123
- rspec-core (3.12.1)
123
+ rspec-core (3.12.2)
124
124
  rspec-support (~> 3.12.0)
125
- rspec-expectations (3.12.2)
125
+ rspec-expectations (3.12.3)
126
126
  diff-lcs (>= 1.2.0, < 2.0)
127
127
  rspec-support (~> 3.12.0)
128
- rspec-mocks (3.12.4)
128
+ rspec-mocks (3.12.5)
129
129
  diff-lcs (>= 1.2.0, < 2.0)
130
130
  rspec-support (~> 3.12.0)
131
131
  rspec-support (3.12.0)
132
- rubocop (1.48.1)
132
+ rubocop (1.50.2)
133
133
  json (~> 2.3)
134
134
  parallel (~> 1.10)
135
135
  parser (>= 3.2.0.0)
136
136
  rainbow (>= 2.2.2, < 4.0)
137
137
  regexp_parser (>= 1.8, < 3.0)
138
138
  rexml (>= 3.2.5, < 4.0)
139
- rubocop-ast (>= 1.26.0, < 2.0)
139
+ rubocop-ast (>= 1.28.0, < 2.0)
140
140
  ruby-progressbar (~> 1.7)
141
141
  unicode-display_width (>= 2.4.0, < 3.0)
142
- rubocop-ast (1.27.0)
142
+ rubocop-ast (1.28.0)
143
143
  parser (>= 3.2.1.0)
144
- rubocop-rails (2.18.0)
144
+ rubocop-rails (2.19.1)
145
145
  activesupport (>= 4.2.0)
146
146
  rack (>= 1.1)
147
147
  rubocop (>= 1.33.0, < 2.0)
@@ -202,4 +202,4 @@ DEPENDENCIES
202
202
  webmock
203
203
 
204
204
  BUNDLED WITH
205
- 2.3.26
205
+ 2.4.10
@@ -8,7 +8,7 @@ GEM
8
8
  nio4r (2.5.8)
9
9
  puma (5.6.5)
10
10
  nio4r (~> 2.0)
11
- rack (2.2.6.3)
11
+ rack (2.2.6.4)
12
12
  rack-protection (2.2.3)
13
13
  rack
14
14
  ruby2_keywords (0.0.5)
@@ -323,6 +323,21 @@ module Auth0
323
323
  URI::HTTPS.build(host: @domain, path: '/authorize', query: to_query(request_params))
324
324
  end
325
325
 
326
+ # Return an authorization URL for PAR requests
327
+ # @see https://www.rfc-editor.org/rfc/rfc9126.html
328
+ # @param request_uri [string] The request_uri as obtained by calling `pushed_authorization_request`
329
+ # @param additional_parameters Any additional parameters to send
330
+ def par_authorization_url(request_uri)
331
+ raise Auth0::InvalidParameter, 'Must supply a valid request_uri' if request_uri.to_s.empty?
332
+
333
+ request_params = {
334
+ client_id: @client_id,
335
+ request_uri: request_uri,
336
+ }
337
+
338
+ URI::HTTPS.build(host: @domain, path: '/authorize', query: to_query(request_params))
339
+ end
340
+
326
341
  # Returns an Auth0 logout URL with a return URL.
327
342
  # @see https://auth0.com/docs/api/authentication#logout
328
343
  # @see https://auth0.com/docs/logout
@@ -344,6 +359,28 @@ module Auth0
344
359
  )
345
360
  end
346
361
 
362
+ # Make a request to the PAR endpoint and receive a `request_uri` to send to the '/authorize' endpoint.
363
+ # @see https://auth0.com/docs/api/authentication#authorization-code-grant
364
+ # @param redirect_uri [string] URL to redirect after authorization
365
+ # @param options [hash] Can contain response_type, connection, state, organization, invitation, and additional_parameters.
366
+ # @return [url] Authorization URL.
367
+ def pushed_authorization_request(parameters = {})
368
+ request_params = {
369
+ client_id: @client_id,
370
+ response_type: parameters.fetch(:response_type, 'code'),
371
+ connection: parameters.fetch(:connection, nil),
372
+ redirect_uri: parameters.fetch(:redirect_uri, nil),
373
+ state: parameters.fetch(:state, nil),
374
+ scope: parameters.fetch(:scope, nil),
375
+ organization: parameters.fetch(:organization, nil),
376
+ invitation: parameters.fetch(:invitation, nil)
377
+ }.merge(parameters.fetch(:additional_parameters, {}))
378
+
379
+ populate_client_assertion_or_secret(request_params)
380
+
381
+ request_with_retry(:post_form, '/oauth/par', request_params, {})
382
+ end
383
+
347
384
  # Return a SAMLP URL.
348
385
  # The SAML Request AssertionConsumerServiceURL will be used to POST back
349
386
  # the assertion and it must match with the application callback URL.
@@ -16,7 +16,7 @@ module Auth0
16
16
  BASE_DELAY = 100
17
17
 
18
18
  # proxying requests from instance methods to HTTP class methods
19
- %i(get post post_file put patch delete delete_with_body).each do |method|
19
+ %i(get post post_file post_form put patch delete delete_with_body).each do |method|
20
20
  define_method(method) do |uri, body = {}, extra_headers = {}|
21
21
  body = body.delete_if { |_, v| v.nil? }
22
22
  token = get_token()
@@ -85,9 +85,12 @@ module Auth0
85
85
  elsif method == :post_file
86
86
  body.merge!(multipart: true)
87
87
  # Ignore the default Content-Type headers and let the HTTP client define them
88
- post_file_headers = headers.slice(*headers.keys - ['Content-Type'])
88
+ post_file_headers = headers.except('Content-Type') if headers != nil
89
89
  # Actual call with the altered headers
90
90
  call(:post, encode_uri(uri), timeout, post_file_headers, body)
91
+ elsif method == :post_form
92
+ form_post_headers = headers.except('Content-Type') if headers != nil
93
+ call(:post, encode_uri(uri), timeout, form_post_headers, body.compact)
91
94
  else
92
95
  call(method, encode_uri(uri), timeout, headers, body.to_json)
93
96
  end
data/lib/auth0/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # current version of gem
2
2
  module Auth0
3
- VERSION = '5.12.0'.freeze
3
+ VERSION = '5.13.0'.freeze
4
4
  end
@@ -6,6 +6,7 @@ describe Auth0::Api::AuthenticationEndpoints do
6
6
  let(:client_secret) { 'test-client-secret' }
7
7
  let(:api_identifier) { 'test-audience' }
8
8
  let(:domain) { 'samples.auth0.com' }
9
+ let(:request_uri) { 'urn:ietf:params:oauth:request_uri:the.request.uri' }
9
10
 
10
11
  let(:client_secret_config) { {
11
12
  domain: domain,
@@ -628,5 +629,94 @@ describe Auth0::Api::AuthenticationEndpoints do
628
629
  client_assertion_instance.send :start_passwordless_sms_flow, '123456789'
629
630
  end
630
631
  end
632
+
633
+ context 'par_authorization_url' do
634
+ it 'throws an exception if request_uri is nil' do
635
+ expect { client_secret_instance.send :par_authorization_url, nil}.to raise_error Auth0::InvalidParameter
636
+ end
637
+
638
+ it 'throws an exception if request_uri is empty' do
639
+ expect { client_secret_instance.send :par_authorization_url, ''}.to raise_error Auth0::InvalidParameter
640
+ end
641
+
642
+ it 'builds a URL containing the request_uri' do
643
+ url = client_secret_instance.send :par_authorization_url, request_uri
644
+ expect(CGI.unescape(url.to_s)).to eq("https://samples.auth0.com/authorize?client_id=#{client_id}&request_uri=#{request_uri}")
645
+ end
646
+ end
647
+
648
+ context 'pushed_authorization_request' do
649
+ it 'sends the request as a form post' do
650
+ expect(RestClient::Request).to receive(:execute) do |arg|
651
+ expect(arg[:url]).to eq('https://samples.auth0.com/oauth/par')
652
+ expect(arg[:method]).to eq(:post)
653
+
654
+ expect(arg[:payload]).to eq({
655
+ client_id: client_id,
656
+ client_secret: client_secret,
657
+ response_type: 'code',
658
+ })
659
+
660
+ StubResponse.new({}, true, 200)
661
+ end
662
+
663
+ client_secret_instance.send :pushed_authorization_request
664
+ end
665
+
666
+ it 'allows the RestClient to handle the correct header defaults' do
667
+ expect(RestClient::Request).to receive(:execute) do |arg|
668
+ expect(arg[:headers]).not_to have_key('Content-Type')
669
+
670
+ StubResponse.new({}, true, 200)
671
+ end
672
+
673
+ client_secret_instance.headers['Content-Type'] = 'application/x-www-form-urlencoded'
674
+ client_secret_instance.send :pushed_authorization_request
675
+ end
676
+
677
+ it 'sends the request as a form post with all known overrides' do
678
+ expect(RestClient::Request).to receive(:execute) do |arg|
679
+ expect(arg[:url]).to eq('https://samples.auth0.com/oauth/par')
680
+ expect(arg[:method]).to eq(:post)
681
+
682
+ expect(arg[:payload]).to eq({
683
+ client_id: client_id,
684
+ client_secret: client_secret,
685
+ connection: 'google-oauth2',
686
+ organization: 'org_id',
687
+ invitation: 'http://invite.url',
688
+ redirect_uri: 'http://localhost:3000',
689
+ response_type: 'id_token',
690
+ scope: 'openid',
691
+ state: 'random_value'
692
+ })
693
+
694
+ StubResponse.new({}, true, 200)
695
+ end
696
+
697
+ client_secret_instance.send(:pushed_authorization_request,
698
+ response_type: 'id_token',
699
+ redirect_uri: 'http://localhost:3000',
700
+ organization: 'org_id',
701
+ invitation: 'http://invite.url',
702
+ scope: 'openid',
703
+ state: 'random_value',
704
+ connection: 'google-oauth2')
705
+ end
706
+
707
+ it 'sends the request as a form post using client assertion' do
708
+ expect(RestClient::Request).to receive(:execute) do |arg|
709
+ expect(arg[:url]).to eq('https://samples.auth0.com/oauth/par')
710
+ expect(arg[:method]).to eq(:post)
711
+ expect(arg[:payload][:client_secret]).to be_nil
712
+ expect(arg[:payload][:client_assertion]).not_to be_nil
713
+ expect(arg[:payload][:client_assertion_type]).to eq Auth0::ClientAssertion::CLIENT_ASSERTION_TYPE
714
+
715
+ StubResponse.new({}, true, 200)
716
+ end
717
+
718
+ client_assertion_instance.send :pushed_authorization_request
719
+ end
720
+ end
631
721
  end
632
722
  end
@@ -250,25 +250,37 @@ describe Auth0::Mixins::HTTPProxy do
250
250
  end
251
251
  end
252
252
 
253
- %i(post put patch).each do |http_method|
253
+ def expected_payload(method, overrides = {})
254
+ if method == :post_form
255
+ {
256
+ method: :post,
257
+ url: 'https://auth0.com/test',
258
+ timeout: nil,
259
+ headers: nil,
260
+ payload: {}
261
+ }.merge(overrides)
262
+ else
263
+ {
264
+ method: method,
265
+ url: 'https://auth0.com/test',
266
+ timeout: nil,
267
+ headers: nil,
268
+ payload: '{}'
269
+ }.merge(overrides)
270
+ end
271
+ end
272
+
273
+ %i(post post_form put patch).each do |http_method|
254
274
  context ".#{http_method}" do
255
275
  it { expect(@instance).to respond_to(http_method.to_sym) }
256
- it "should call send http #{http_method} method to path defined through HTTP" do
257
- expect(RestClient::Request).to receive(:execute).with(method: http_method,
258
- url: 'https://auth0.com/test',
259
- timeout: nil,
260
- headers: nil,
261
- payload: '{}')
276
+ it "should call send http #{http_method} method to path defined through HTTP"do
277
+ expect(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
262
278
  .and_return(StubResponse.new({}, true, 200))
263
279
  expect { @instance.send(http_method, '/test') }.not_to raise_error
264
280
  end
265
281
 
266
282
  it 'should not raise exception if data returned not in json format (should be fixed in v2)' do
267
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
268
- url: 'https://auth0.com/test',
269
- timeout: nil,
270
- headers: nil,
271
- payload: '{}')
283
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
272
284
  .and_return(StubResponse.new('Some random text here', true, 200))
273
285
  expect { @instance.send(http_method, '/test') }.not_to raise_error
274
286
  expect(@instance.send(http_method, '/test')).to eql('Some random text here')
@@ -277,11 +289,7 @@ describe Auth0::Mixins::HTTPProxy do
277
289
  it "should raise Auth0::Unauthorized on send http #{http_method} method
278
290
  to path defined through HTTP when 401 status received" do
279
291
  @exception.response = StubResponse.new({}, false, 401)
280
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
281
- url: 'https://auth0.com/test',
282
- timeout: nil,
283
- headers: nil,
284
- payload: '{}')
292
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
285
293
  .and_raise(@exception)
286
294
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::Unauthorized)
287
295
  end
@@ -294,11 +302,7 @@ describe Auth0::Mixins::HTTPProxy do
294
302
  :x_ratelimit_reset => 1560564149
295
303
  }
296
304
  @exception.response = StubResponse.new({}, false, 429,headers)
297
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
298
- url: 'https://auth0.com/test',
299
- timeout: nil,
300
- headers: nil,
301
- payload: '{}')
305
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
302
306
  .and_raise(@exception)
303
307
  expect { @instance.send(http_method, '/test') }.to raise_error { |error|
304
308
  expect(error).to be_a(Auth0::RateLimitEncountered)
@@ -317,11 +321,7 @@ describe Auth0::Mixins::HTTPProxy do
317
321
  it "should raise Auth0::NotFound on send http #{http_method} method
318
322
  to path defined through HTTP when 404 status received" do
319
323
  @exception.response = StubResponse.new({}, false, 404)
320
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
321
- url: 'https://auth0.com/test',
322
- timeout: nil,
323
- headers: nil,
324
- payload: '{}')
324
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
325
325
  .and_raise(@exception)
326
326
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::NotFound)
327
327
  end
@@ -329,22 +329,14 @@ describe Auth0::Mixins::HTTPProxy do
329
329
  it "should raise Auth0::Unsupported on send http #{http_method} method
330
330
  to path defined through HTTP when 418 or other unknown status received" do
331
331
  @exception.response = StubResponse.new({}, false, 418)
332
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
333
- url: 'https://auth0.com/test',
334
- timeout: nil,
335
- headers: nil,
336
- payload: '{}')
332
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
337
333
  .and_raise(@exception)
338
334
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::Unsupported)
339
335
  end
340
336
 
341
337
  it "should raise Auth0::RequestTimeout on send http #{http_method} method
342
338
  to path defined through HTTP when RestClient::RequestTimeout received" do
343
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
344
- url: 'https://auth0.com/test',
345
- timeout: nil,
346
- headers: nil,
347
- payload: '{}')
339
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
348
340
  .and_raise(RestClient::Exceptions::OpenTimeout.new)
349
341
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::RequestTimeout)
350
342
  end
@@ -352,11 +344,7 @@ describe Auth0::Mixins::HTTPProxy do
352
344
  it "should raise Auth0::BadRequest on send http #{http_method} method
353
345
  to path defined through HTTP when 400 status received" do
354
346
  @exception.response = StubResponse.new({}, false, 400)
355
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
356
- url: 'https://auth0.com/test',
357
- timeout: nil,
358
- headers: nil,
359
- payload: '{}')
347
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
360
348
  .and_raise(@exception)
361
349
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::BadRequest)
362
350
  end
@@ -364,20 +352,13 @@ describe Auth0::Mixins::HTTPProxy do
364
352
  it "should raise Auth0::ServerError on send http #{http_method} method
365
353
  to path defined through HTTP when 500 received" do
366
354
  @exception.response = StubResponse.new({}, false, 500)
367
- allow(RestClient::Request).to receive(:execute).with(method: http_method, url: 'https://auth0.com/test',
368
- timeout: nil,
369
- headers: nil,
370
- payload: '{}')
355
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
371
356
  .and_raise(@exception)
372
357
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::ServerError)
373
358
  end
374
359
 
375
360
  it 'should normalize path with Addressable::URI' do
376
- expect(RestClient::Request).to receive(:execute).with(method: http_method,
377
- url: 'https://auth0.com/te%20st',
378
- timeout: nil,
379
- headers: nil,
380
- payload: '{}')
361
+ expect(RestClient::Request).to receive(:execute).with(expected_payload(http_method, url: 'https://auth0.com/te%20st'))
381
362
  .and_return(StubResponse.new({}, true, 200))
382
363
  expect { @instance.send(http_method, '/te st') }.not_to raise_error
383
364
  end
@@ -388,11 +369,7 @@ describe Auth0::Mixins::HTTPProxy do
388
369
  'message' => "Path validation error: 'String does not match pattern ^.+\\|.+$:
389
370
  3241312' on property id (The user_id of the user to retrieve).",
390
371
  'errorCode' => 'invalid_uri')
391
- expect(RestClient::Request).to receive(:execute).with(method: http_method,
392
- url: 'https://auth0.com/test',
393
- timeout: nil,
394
- headers: nil,
395
- payload: '{}')
372
+ expect(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
396
373
  .and_return(StubResponse.new(res, true, 404))
397
374
  expect { @instance.send(http_method, '/test') }.to raise_error(Auth0::NotFound, res)
398
375
  end
@@ -404,11 +381,7 @@ describe Auth0::Mixins::HTTPProxy do
404
381
  retry_instance.base_uri = "https://auth0.com"
405
382
 
406
383
  @exception.response = StubResponse.new({}, false, 429)
407
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
408
- url: 'https://auth0.com/test',
409
- timeout: nil,
410
- headers: nil,
411
- payload: '{}')
384
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
412
385
  .and_raise(@exception)
413
386
  expect(RestClient::Request).to receive(:execute).exactly(4).times
414
387
 
@@ -424,11 +397,7 @@ describe Auth0::Mixins::HTTPProxy do
424
397
  retry_instance.retry_count = 2
425
398
 
426
399
  @exception.response = StubResponse.new({}, false, 429)
427
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
428
- url: 'https://auth0.com/test',
429
- timeout: nil,
430
- headers: nil,
431
- payload: '{}')
400
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
432
401
  .and_raise(@exception)
433
402
  expect(RestClient::Request).to receive(:execute).exactly(3).times
434
403
 
@@ -445,11 +414,7 @@ describe Auth0::Mixins::HTTPProxy do
445
414
 
446
415
  @exception.response = StubResponse.new({}, false, 429)
447
416
 
448
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
449
- url: 'https://auth0.com/test',
450
- timeout: nil,
451
- headers: nil,
452
- payload: '{}')
417
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method))
453
418
  .and_raise(@exception)
454
419
 
455
420
  expect(RestClient::Request).to receive(:execute).exactly(1).times
@@ -467,11 +432,7 @@ describe Auth0::Mixins::HTTPProxy do
467
432
  @time_start
468
433
 
469
434
  @exception.response = StubResponse.new({}, false, 429)
470
- allow(RestClient::Request).to receive(:execute).with(method: http_method,
471
- url: 'https://auth0.com/test',
472
- timeout: nil,
473
- headers: nil,
474
- payload: '{}') do
435
+ allow(RestClient::Request).to receive(:execute).with(expected_payload(http_method)) do
475
436
 
476
437
  time_entries.push(Time.now.to_f - @time_start.to_f)
477
438
  @time_start = Time.now.to_f # restart the clock
@@ -492,6 +453,7 @@ describe Auth0::Mixins::HTTPProxy do
492
453
  end
493
454
  end
494
455
  end
456
+ end
495
457
 
496
458
  context "Renewing tokens" do
497
459
  let(:httpproxy_instance) {
@@ -546,7 +508,6 @@ describe Auth0::Mixins::HTTPProxy do
546
508
  end
547
509
  end
548
510
  end
549
- end
550
511
 
551
512
  context "Using cached tokens" do
552
513
  let(:httpproxy_instance) {
@@ -15,5 +15,6 @@ class DummyClassForTokens
15
15
  @token_expires_at = config[:token_expires_at]
16
16
  @client_assertion_signing_key = config[:client_assertion_signing_key]
17
17
  @client_assertion_signing_alg = config[:client_assertion_signing_alg] || 'RS256'
18
+ @headers ||= {}
18
19
  end
19
20
  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.12.0
4
+ version: 5.13.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: 2023-03-13 00:00:00.000000000 Z
14
+ date: 2023-04-24 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client
@@ -248,6 +248,7 @@ files:
248
248
  - ".rspec"
249
249
  - ".rubocop.yml"
250
250
  - ".rubocop_todo.yml"
251
+ - ".semgrepignore"
251
252
  - ".shiprc"
252
253
  - CHANGELOG.md
253
254
  - CODE_OF_CONDUCT.md
@@ -614,7 +615,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
614
615
  - !ruby/object:Gem::Version
615
616
  version: '0'
616
617
  requirements: []
617
- rubygems_version: 3.3.26
618
+ rubygems_version: 3.4.10
618
619
  signing_key:
619
620
  specification_version: 4
620
621
  summary: Auth0 API Client