auth0 4.15.0 → 5.0.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +26 -3
  3. data/.github/CODEOWNERS +1 -1
  4. data/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +39 -0
  6. data/.github/ISSUE_TEMPLATE/report_a_bug.md +55 -0
  7. data/.gitignore +1 -1
  8. data/.yardoc/checksums +22 -0
  9. data/.yardoc/complete +0 -0
  10. data/.yardoc/object_types +0 -0
  11. data/.yardoc/objects/root.dat +0 -0
  12. data/.yardoc/proxy_types +0 -0
  13. data/CHANGELOG.md +83 -0
  14. data/Gemfile +0 -1
  15. data/README.md +5 -7
  16. data/Rakefile +0 -22
  17. data/auth0.gemspec +4 -3
  18. data/examples/ruby-api/.gitignore +0 -6
  19. data/lib/auth0/api/authentication_endpoints.rb +6 -220
  20. data/lib/auth0/api/v2/jobs.rb +11 -1
  21. data/lib/auth0/api/v2/tickets.rb +12 -1
  22. data/lib/auth0/api/v2/users.rb +21 -8
  23. data/lib/auth0/exception.rb +2 -7
  24. data/lib/auth0/mixins.rb +0 -1
  25. data/lib/auth0/mixins/access_token_struct.rb +2 -2
  26. data/lib/auth0/mixins/api_token_struct.rb +2 -2
  27. data/lib/auth0/mixins/httpproxy.rb +3 -1
  28. data/lib/auth0/mixins/initializer.rb +1 -7
  29. data/lib/auth0/mixins/permission_struct.rb +2 -2
  30. data/lib/auth0/mixins/validation.rb +1 -1
  31. data/lib/auth0/version.rb +1 -1
  32. data/spec/integration/lib/auth0/api/api_authentication_spec.rb +1 -1
  33. data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +13 -1
  34. data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +1 -1
  35. data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +7 -1
  36. data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +1 -1
  37. data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +1 -1
  38. data/spec/lib/auth0/api/v2/jobs_spec.rb +17 -0
  39. data/spec/lib/auth0/api/v2/roles_spec.rb +4 -4
  40. data/spec/lib/auth0/api/v2/tickets_spec.rb +17 -0
  41. data/spec/lib/auth0/api/v2/users_spec.rb +38 -11
  42. data/spec/lib/auth0/mixins/httpproxy_spec.rb +2 -2
  43. data/spec/spec_helper.rb +6 -1
  44. data/spec/support/credentials.rb +0 -19
  45. metadata +43 -44
  46. data/.github/ISSUE_TEMPLATE.md +0 -39
  47. data/Gemfile.lock +0 -229
  48. data/deploy_documentation.sh +0 -29
  49. data/doc_config/templates/default/fulldoc/html/css/full_list.css +0 -79
  50. data/doc_config/templates/default/fulldoc/html/css/style.css +0 -546
  51. data/doc_config/templates/default/layout/html/breadcrumb.erb +0 -11
  52. data/doc_config/templates/default/layout/html/footer.erb +0 -115
  53. data/doc_config/templates/default/layout/html/headers.erb +0 -17
  54. data/doc_config/templates/default/layout/html/layout.erb +0 -27
  55. data/lib/auth0/api/v1.rb +0 -19
  56. data/lib/auth0/api/v1/clients.rb +0 -58
  57. data/lib/auth0/api/v1/connections.rb +0 -68
  58. data/lib/auth0/api/v1/logs.rb +0 -43
  59. data/lib/auth0/api/v1/rules.rb +0 -57
  60. data/lib/auth0/api/v1/users.rb +0 -227
  61. data/spec/lib/auth0/api/authentication_endpoints_spec.rb +0 -703
@@ -1,703 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Metrics/BlockLength
4
- require 'spec_helper'
5
- describe Auth0::Api::AuthenticationEndpoints do
6
- UP_AUTH = 'Username-Password-Authentication'.freeze
7
-
8
- before :all do
9
- dummy_instance = DummyClass.new
10
- dummy_instance.extend(Auth0::Api::AuthenticationEndpoints)
11
-
12
- @instance = dummy_instance
13
- end
14
-
15
- subject { @instance }
16
-
17
- context '.api_token' do
18
- it { expect(@instance).to respond_to(:api_token) }
19
- it "is expected to POST to '/oauth/token'" do
20
- allow(@instance).to receive(:post).with(
21
- '/oauth/token',
22
- grant_type: 'client_credentials',
23
- client_id: @instance.client_id,
24
- client_secret: @instance.client_secret,
25
- audience: @instance.audience
26
- ).and_return('access_token' => 'AccessToken')
27
-
28
- expect(@instance.api_token.token).to eql 'AccessToken'
29
- end
30
-
31
- it "is expected to POST to '/oauth/token' with a custom audience" do
32
- allow(@instance).to receive(:post).with(
33
- '/oauth/token',
34
- grant_type: 'client_credentials',
35
- client_id: @instance.client_id,
36
- client_secret: @instance.client_secret,
37
- audience: '__test_audience__'
38
- ).and_return('access_token' => 'AccessToken')
39
-
40
- expect(
41
- @instance.api_token(audience: '__test_audience__').token
42
- ).to eql 'AccessToken'
43
- end
44
- end
45
-
46
- context '.obtain_access_token' do
47
- it { expect(@instance).to respond_to(:obtain_access_token) }
48
- it "is expected to make post request to '/oauth/token'" do
49
- allow(@instance).to receive(:post).with(
50
- '/oauth/token', client_id: @instance.client_id, client_secret: @instance.client_secret, grant_type: 'client_credentials'
51
- )
52
- .and_return('access_token' => 'AccessToken')
53
-
54
- expect(@instance).to receive(:post).with(
55
- '/oauth/token', client_id: @instance.client_id, client_secret: @instance.client_secret, grant_type: 'client_credentials'
56
- )
57
- expect(@instance.obtain_access_token).to eql 'AccessToken'
58
- end
59
- end
60
-
61
- context '.obtain_access_token social' do
62
- it { expect(@instance).to respond_to(:obtain_access_token) }
63
- it "is expected to make post request to '/oauth/access_token'" do
64
- allow(@instance).to receive(:post).with(
65
- '/oauth/access_token', client_id: @instance.client_id, access_token: 'access_token', connection: 'facebook',
66
- scope: 'openid'
67
- )
68
- .and_return('access_token' => 'AccessToken')
69
- expect(@instance).to receive(:post).with(
70
- '/oauth/access_token', client_id: @instance.client_id, access_token: 'access_token', connection: 'facebook',
71
- scope: 'openid'
72
- )
73
- expect(@instance.obtain_access_token('access_token', 'facebook', 'openid')).to eql 'AccessToken'
74
- end
75
- end
76
-
77
- context '.obtain_user_tokens' do
78
- it { expect(@instance).to respond_to(:obtain_user_tokens) }
79
- it "is expected to make post request to '/oauth/token'" do
80
- allow(@instance).to receive(:post).with(
81
- '/oauth/token', client_id: @instance.client_id, client_secret: @instance.client_secret, grant_type: 'authorization_code',
82
- connection: 'facebook', code: 'code', scope: 'openid', redirect_uri: 'uri'
83
- )
84
- .and_return('user_tokens' => 'UserToken')
85
- expect(@instance).to receive(:post).with(
86
- '/oauth/token', client_id: @instance.client_id, client_secret: @instance.client_secret, grant_type: 'authorization_code',
87
- connection: 'facebook', code: 'code', scope: 'openid', redirect_uri: 'uri'
88
- )
89
- expect(@instance.obtain_user_tokens('code', 'uri')['user_tokens']).to eq 'UserToken'
90
- end
91
- it { expect { @instance.obtain_user_tokens('', '') }.to raise_error 'Must supply a valid code' }
92
- it { expect { @instance.obtain_user_tokens('code', '') }.to raise_error 'Must supply a valid redirect_uri' }
93
- end
94
-
95
- context '.exchange_auth_code_for_tokens' do
96
- it { is_expected.to respond_to(:exchange_auth_code_for_tokens) }
97
-
98
- it 'is expected to make post request to /oauth/token with default params' do
99
- allow(@instance).to receive(:post).with(
100
- '/oauth/token',
101
- client_id: @instance.client_id,
102
- client_secret: @instance.client_secret,
103
- grant_type: 'authorization_code',
104
- code: '__test_auth_code__',
105
- redirect_uri: nil
106
- ).and_return('access_token' => 'AccessToken')
107
-
108
- is_expected.to receive(:post).with(
109
- '/oauth/token',
110
- client_id: @instance.client_id,
111
- client_secret: @instance.client_secret,
112
- grant_type: 'authorization_code',
113
- code: '__test_auth_code__',
114
- redirect_uri: nil
115
- )
116
-
117
- expect(
118
- @instance.exchange_auth_code_for_tokens(
119
- '__test_auth_code__'
120
- )['access_token']
121
- ).to eq 'AccessToken'
122
- end
123
-
124
- it 'is expected to make post request to /oauth/token with custom params' do
125
- allow(@instance).to receive(:post).with(
126
- '/oauth/token',
127
- grant_type: 'authorization_code',
128
- client_id: '_test_custom_client_id__',
129
- client_secret: '_test_custom_client_secret__',
130
- code: '__test_auth_code__',
131
- redirect_uri: '__test_redirect_uri__'
132
- ).and_return('access_token' => 'AccessToken')
133
-
134
- is_expected.to receive(:post).with(
135
- '/oauth/token',
136
- grant_type: 'authorization_code',
137
- client_id: '_test_custom_client_id__',
138
- client_secret: '_test_custom_client_secret__',
139
- code: '__test_auth_code__',
140
- redirect_uri: '__test_redirect_uri__'
141
- )
142
-
143
- expect(
144
- @instance.exchange_auth_code_for_tokens(
145
- '__test_auth_code__',
146
- redirect_uri: '__test_redirect_uri__',
147
- client_id: '_test_custom_client_id__',
148
- client_secret: '_test_custom_client_secret__'
149
- )['access_token']
150
- ).to eq 'AccessToken'
151
- end
152
-
153
- it 'is expected to raise an error when the code is empty' do
154
- expect do
155
- @instance.exchange_auth_code_for_tokens(nil)
156
- end.to raise_error 'Must provide an authorization code'
157
- end
158
- end
159
-
160
- context '.exchange_refresh_token' do
161
- it { is_expected.to respond_to(:exchange_refresh_token) }
162
-
163
- it 'is expected to make post request to /oauth/token with default params' do
164
- allow(@instance).to receive(:post).with(
165
- '/oauth/token',
166
- grant_type: 'refresh_token',
167
- client_id: @instance.client_id,
168
- client_secret: @instance.client_secret,
169
- refresh_token: '__test_refresh_token__'
170
- ).and_return('access_token' => 'AccessToken')
171
-
172
- is_expected.to receive(:post).with(
173
- '/oauth/token',
174
- grant_type: 'refresh_token',
175
- client_id: @instance.client_id,
176
- client_secret: @instance.client_secret,
177
- refresh_token: '__test_refresh_token__'
178
- )
179
-
180
- expect(
181
- @instance.exchange_refresh_token(
182
- '__test_refresh_token__'
183
- )['access_token']
184
- ).to eq 'AccessToken'
185
- end
186
-
187
- it 'is expected to make post request to /oauth/token with custom params' do
188
- allow(@instance).to receive(:post).with(
189
- '/oauth/token',
190
- grant_type: 'refresh_token',
191
- client_id: '_test_custom_client_id__',
192
- client_secret: '_test_custom_client_secret__',
193
- refresh_token: '__test_refresh_token__'
194
- ).and_return('access_token' => 'AccessToken')
195
-
196
- is_expected.to receive(:post).with(
197
- '/oauth/token',
198
- grant_type: 'refresh_token',
199
- client_id: '_test_custom_client_id__',
200
- client_secret: '_test_custom_client_secret__',
201
- refresh_token: '__test_refresh_token__'
202
- )
203
-
204
- expect(
205
- @instance.exchange_refresh_token(
206
- '__test_refresh_token__',
207
- client_id: '_test_custom_client_id__',
208
- client_secret: '_test_custom_client_secret__'
209
- )['access_token']
210
- ).to eq 'AccessToken'
211
- end
212
-
213
- it 'is expected to raise an error when the refresh_token is empty' do
214
- expect do
215
- @instance.exchange_refresh_token(nil)
216
- end.to raise_error 'Must provide a refresh token'
217
- end
218
- end
219
-
220
- context '.login_with_resource_owner' do
221
- it 'should respond to the login_with_resource_owner method' do
222
- expect(@instance).to respond_to(:login_with_resource_owner)
223
- end
224
-
225
- it 'should make post to /oauth/token with default params' do
226
- allow(@instance).to receive(:post).with(
227
- '/oauth/token',
228
- username: 'test@test.com',
229
- password: 'test12345',
230
- client_id: @instance.client_id,
231
- client_secret: @instance.client_secret,
232
- realm: nil,
233
- audience: nil,
234
- scope: 'openid',
235
- grant_type: 'password'
236
- ).and_return('access_token' => 'AccessToken')
237
-
238
- expect(
239
- @instance.login_with_resource_owner('test@test.com', 'test12345').token
240
- ).to eq 'AccessToken'
241
- end
242
-
243
- it 'should make post to /oauth/token with custom params' do
244
- allow(@instance).to receive(:post).with(
245
- '/oauth/token',
246
- username: 'test@test.com',
247
- password: 'test12345',
248
- client_id: '__custom_client_id__',
249
- client_secret: '__custom_client_secret_',
250
- realm: '__custom_realm__',
251
- audience: '__custom_audience__',
252
- scope: 'openid email',
253
- grant_type: 'http://auth0.com/oauth/grant-type/password-realm'
254
- ).and_return('access_token' => 'AccessToken')
255
-
256
- expect(
257
- @instance.login_with_resource_owner(
258
- 'test@test.com',
259
- 'test12345',
260
- client_id: '__custom_client_id__',
261
- client_secret: '__custom_client_secret_',
262
- realm: '__custom_realm__',
263
- audience: '__custom_audience__',
264
- scope: 'openid email'
265
- ).token
266
- ).to eq 'AccessToken'
267
- end
268
-
269
- it 'should raise an error with a blank username' do
270
- expect do
271
- @instance.login_with_resource_owner('', 'password')
272
- end.to raise_error 'Must supply a valid login_name'
273
- end
274
-
275
- it 'should raise an error with a blank password' do
276
- expect do
277
- @instance.login_with_resource_owner('username', '')
278
- end.to raise_error 'Must supply a valid password'
279
- end
280
- end
281
-
282
- context '.login' do
283
- it { expect(@instance).to respond_to(:login) }
284
- it 'is expected to make post to /oauth/token' do
285
- expect(@instance).to receive(:post).with(
286
- '/oauth/token',
287
- client_id: @instance.client_id,
288
- username: 'test@test.com',
289
- client_secret: @instance.client_secret,
290
- password: 'test12345', scope: 'openid', connection: 'Username-Password-Authentication',
291
- grant_type: 'password', id_token: nil, device: nil
292
- )
293
- @instance.login('test@test.com', 'test12345')
294
- end
295
- it { expect { @instance.login('', '') }.to raise_error 'Must supply a valid username' }
296
- it { expect { @instance.login('username', '') }.to raise_error 'Must supply a valid password' }
297
- end
298
-
299
- # Auth0::API::AuthenticationEndpoints.signup
300
- context '.signup' do
301
- it { expect(@instance).to respond_to(:signup) }
302
-
303
- it 'is expected to make a post request to /dbconnections/signup' do
304
- expect(@instance).to receive(:post).with(
305
- '/dbconnections/signup',
306
- client_id: @instance.client_id,
307
- email: 'test@test.com',
308
- password: 'password',
309
- connection: 'User'
310
- )
311
- @instance.signup('test@test.com', 'password', 'User')
312
- end
313
-
314
- it 'is expected to raise an error with an empty email' do
315
- expect do
316
- @instance.signup('', '')
317
- end.to raise_error 'Must supply a valid email'
318
- end
319
-
320
- it 'is expected to raise an error with an empty password' do
321
- expect do
322
- @instance.signup('email', '')
323
- end.to raise_error 'Must supply a valid password'
324
- end
325
- end
326
-
327
- # Auth0::API::AuthenticationEndpoints.change_password
328
- context '.change_password' do
329
- it { expect(@instance).to respond_to(:change_password) }
330
-
331
- it 'is expected to make post to /dbconnections/change_password' do
332
- expect(@instance).to receive(:post).with(
333
- '/dbconnections/change_password',
334
- client_id: @instance.client_id,
335
- email: 'test@test.com',
336
- password: 'password',
337
- connection: 'User'
338
- )
339
- @instance.change_password('test@test.com', 'password', 'User')
340
- end
341
-
342
- it 'is expected to raise an error with an empty email' do
343
- expect do
344
- @instance.change_password('', '', '')
345
- end.to raise_error 'Must supply a valid email'
346
- end
347
- end
348
-
349
- # Auth0::API::AuthenticationEndpoints.start_passwordless_email_flow
350
- context '.start_passwordless_email_flow' do
351
- it { expect(@instance).to respond_to(:start_passwordless_email_flow) }
352
-
353
- it 'is expected to make post to /passwordless/start' do
354
- expect(@instance).to receive(:post).with(
355
- '/passwordless/start',
356
- client_id: @instance.client_id,
357
- client_secret: @instance.client_secret,
358
- connection: 'email',
359
- email: 'test@test.com',
360
- send: 'code',
361
- authParams: {
362
- scope: 'scope',
363
- protocol: 'protocol'
364
- }
365
- )
366
- @instance.start_passwordless_email_flow(
367
- 'test@test.com',
368
- 'code',
369
- scope: 'scope',
370
- protocol: 'protocol'
371
- )
372
- end
373
-
374
- it 'is expected to raise an error with an empty email' do
375
- expect do
376
- @instance.start_passwordless_email_flow('', '', '')
377
- end.to raise_error 'Must supply a valid email'
378
- end
379
- end
380
-
381
- # Auth0::API::AuthenticationEndpoints.start_passwordless_sms_flow
382
- context '.start_passwordless_sms_flow' do
383
- let(:phone_number) { Faker::PhoneNumber.cell_phone }
384
-
385
- it { expect(@instance).to respond_to(:start_passwordless_sms_flow) }
386
-
387
- it 'is expected to make post to /passwordless/start' do
388
- expect(@instance).to receive(:post).with(
389
- '/passwordless/start',
390
- client_id: @instance.client_id,
391
- client_secret: @instance.client_secret,
392
- connection: 'sms',
393
- phone_number: phone_number
394
- )
395
- @instance.start_passwordless_sms_flow(phone_number)
396
- end
397
-
398
- it 'is expected to raise an error with an empty phone number' do
399
- expect do
400
- @instance.start_passwordless_sms_flow('')
401
- end.to raise_error 'Must supply a valid phone number'
402
- end
403
- end
404
-
405
- context '.phone_login' do
406
- let(:phone_number) { Faker::PhoneNumber.cell_phone }
407
- let(:code) { Faker::Number.number(10) }
408
- it { expect(@instance).to respond_to(:phone_login) }
409
- it 'is expected to make post to /oauth/ro' do
410
- expect(@instance).to receive(:post).with(
411
- '/oauth/ro',
412
- client_id: @instance.client_id, username: phone_number,
413
- password: code, connection: 'sms',
414
- scope: 'openid', grant_type: 'password'
415
- )
416
- @instance.phone_login(phone_number, code)
417
- end
418
- it { expect { @instance.phone_login('', '') }.to raise_error 'Must supply a valid phone number' }
419
- it { expect { @instance.phone_login('phone', '') }.to raise_error 'Must supply a valid code' }
420
- end
421
-
422
- # Auth0::API::AuthenticationEndpoints.saml_metadata
423
- context '.saml_metadata' do
424
- it { expect(@instance).to respond_to(:saml_metadata) }
425
-
426
- it 'is expected to make post to SAMLP metadata endpoint' do
427
- expect(@instance).to receive(:get).with(
428
- "/samlp/metadata/#{@instance.client_id}"
429
- )
430
- @instance.saml_metadata
431
- end
432
- end
433
-
434
- # Auth0::API::AuthenticationEndpoints.wsfed_metadata
435
- context '.wsfed_metadata' do
436
- it { expect(@instance).to respond_to(:wsfed_metadata) }
437
-
438
- it 'is expected to make post to WS-Fed metadata endpoint' do
439
- expect(@instance).to receive(:get).with(
440
- '/wsfed/FederationMetadata/2007-06/FederationMetadata.xml'
441
- )
442
- @instance.wsfed_metadata
443
- end
444
- end
445
-
446
- context '.token_info' do
447
- it { expect(@instance).to respond_to(:token_info) }
448
- it 'is expected to make post to /tokeinfo' do
449
- expect(@instance).to receive(:post).with('/tokeninfo', id_token: 'SomerandomToken')
450
- @instance.token_info('SomerandomToken')
451
- end
452
- it { expect { @instance.token_info('') }.to raise_error 'Must supply a valid id_token' }
453
- end
454
-
455
- context '.refresh_delegation' do
456
- it { expect(@instance).to respond_to(:refresh_delegation) }
457
- it "is expected to make post request to '/delegation'" do
458
- expect(@instance).to receive(:post).with(
459
- '/delegation',
460
- client_id: @instance.client_id,
461
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
462
- refresh_token: 'id_token', target: '', api_type: '', scope: '',
463
- additional_parameter: 'parameter'
464
- )
465
- @instance.refresh_delegation('id_token', '', '', '', additional_parameter: 'parameter')
466
- end
467
- it { expect { @instance.refresh_delegation('', '', '', '') }.to raise_error 'Must supply a valid token to refresh' }
468
- end
469
-
470
- context '.delegation' do
471
- it { expect(@instance).to respond_to(:delegation) }
472
- it "is expected to make post request to '/delegation'" do
473
- expect(@instance).to receive(:post).with(
474
- '/delegation',
475
- client_id: @instance.client_id,
476
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
477
- id_token: 'token',
478
- target: 'target',
479
- scope: '',
480
- api_type: 'app'
481
- )
482
- @instance.delegation('token', 'target', '')
483
- end
484
- it "is expected to make post request to '/delegation'
485
- with specified api_type" do
486
- expect(@instance).to receive(:post).with(
487
- '/delegation',
488
- client_id: @instance.client_id,
489
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
490
- id_token: 'id_token', target: '', scope: '',
491
- api_type: 'salesforce_api'
492
- )
493
- @instance.delegation('id_token', '', '', 'salesforce_api')
494
- end
495
- it 'allows to pass extra parameters' do
496
- expect(@instance).to receive(:post).with(
497
- '/delegation',
498
- client_id: @instance.client_id,
499
- grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
500
- id_token: 'id_token', target: '', scope: '', api_type: '',
501
- community_name: 'test-community', community_url: 'test-url'
502
- )
503
- @instance.delegation(
504
- 'id_token', '', '', '',
505
- community_name: 'test-community', community_url: 'test-url'
506
- )
507
- end
508
- it { expect { @instance.delegation('', nil, nil, nil) }.to raise_error 'Must supply a valid id_token' }
509
- end
510
-
511
- context '.impersonate' do
512
- let(:user_id) { 'some_user_id' }
513
- let(:impersonator_id) { 'some_other_user_id' }
514
- let(:app_client_id) { 'app_client_id' }
515
- it { expect(@instance).to respond_to(:impersonate) }
516
- it do
517
- expect { @instance.impersonate('', app_client_id, impersonator_id, {}) }.to raise_error(
518
- 'Must supply a valid user_id'
519
- )
520
- end
521
- it do
522
- expect { @instance.impersonate(user_id, app_client_id, '', {}) }.to raise_error(
523
- 'Must supply a valid impersonator_id'
524
- )
525
- end
526
- it do
527
- expect { @instance.impersonate(user_id, '', impersonator_id, {}) }.to raise_error(
528
- 'Must supply a valid app_client_id'
529
- )
530
- end
531
- end
532
-
533
- context '.unlink_user' do
534
- it { expect(@instance).to respond_to(:unlink_user) }
535
- it 'is expected to make post to /unlink' do
536
- expect(@instance).to receive(:post).with('/unlink', access_token: 'access-token', user_id: 'user-id')
537
- @instance.unlink_user('access-token', 'user-id')
538
- end
539
- it { expect { @instance.unlink_user('', '') }.to raise_error 'Must supply a valid access_token' }
540
- it { expect { @instance.unlink_user('token', '') }.to raise_error 'Must supply a valid user_id' }
541
- end
542
-
543
- context '.user_info' do
544
- it { is_expected.to respond_to(:user_info) }
545
- it 'is expected to make post to /userinfo' do
546
- is_expected.to receive(:get).with('/userinfo')
547
- subject.user_info
548
- end
549
- end
550
-
551
- context '.userinfo' do
552
- it { is_expected.to respond_to(:user_info) }
553
- it 'is expected to make a GET request to /userinfo' do
554
- is_expected.to receive(:get).with('/userinfo', {}, { 'Authorization' => 'Bearer access-token' })
555
- subject.userinfo 'access-token'
556
- end
557
- end
558
-
559
- context '.authorization_url' do
560
- let(:redirect_uri) { 'http://redirect.com' }
561
- it { expect(@instance).to respond_to(:authorization_url) }
562
- it 'is expected to return an authorization url' do
563
- expect(@instance.authorization_url(redirect_uri).to_s).to eq(
564
- "https://#{@instance.domain}/authorize?client_id=#{@instance.client_id}&response_type=code&"\
565
- 'redirect_uri=http%3A%2F%2Fredirect.com'
566
- )
567
- end
568
- let(:additional_parameters) { { additional_parameters: { aparam1: 'test1' } } }
569
- it 'is expected to return an authorization url with additionalParameters' do
570
- expect(@instance.authorization_url(redirect_uri, additional_parameters).to_s).to eq(
571
- "https://#{@instance.domain}/authorize?client_id=#{@instance.client_id}&response_type=code&"\
572
- 'redirect_uri=http%3A%2F%2Fredirect.com&aparam1=test1'
573
- )
574
- end
575
- let(:state) { { state: 'state1' } }
576
- it 'is expected to return an authorization url with additionalParameters' do
577
- expect(@instance.authorization_url(redirect_uri, state).to_s).to eq(
578
- "https://#{@instance.domain}/authorize?client_id=#{@instance.client_id}&response_type=code&"\
579
- 'redirect_uri=http%3A%2F%2Fredirect.com&state=state1'
580
- )
581
- end
582
- let(:connection) { { connection: 'connection-1' } }
583
- it 'is expected to return an authorization url with additionalParameters' do
584
- expect(@instance.authorization_url(redirect_uri, connection).to_s).to eq(
585
- "https://#{@instance.domain}/authorize?client_id=#{@instance.client_id}&response_type=code&"\
586
- 'connection=connection-1&redirect_uri=http%3A%2F%2Fredirect.com'
587
- )
588
- end
589
- it { expect { @instance.authorization_url('', '') }.to raise_error 'Must supply a valid redirect_uri' }
590
- end
591
-
592
- # Auth0::API::AuthenticationEndpoints.logout_url
593
- context '.logout_url' do
594
- let(:return_to) { 'http://returnto.com' }
595
-
596
- it { expect(@instance).to respond_to(:logout_url) }
597
-
598
- it 'is expected to return a logout url' do
599
- expect(@instance.logout_url(return_to).to_s).to eq(
600
- "https://#{@instance.domain}/v2/logout?" \
601
- 'returnTo=http%3A%2F%2Freturnto.com'
602
- )
603
- end
604
-
605
- it 'is expected to return a logout url with a client ID' do
606
- expect(@instance.logout_url(return_to, include_client: true).to_s).to eq(
607
- "https://#{@instance.domain}/v2/logout" \
608
- "?returnTo=http%3A%2F%2Freturnto.com&client_id=#{@instance.client_id}"
609
- )
610
- end
611
-
612
- it 'is expected to return a logout url with federated parameter' do
613
- expect(@instance.logout_url(return_to, federated: true).to_s).to eq(
614
- "https://#{@instance.domain}/v2/logout?" \
615
- 'returnTo=http%3A%2F%2Freturnto.com&federated=1'
616
- )
617
- end
618
- end
619
-
620
- # Auth0::API::AuthenticationEndpoints.samlp_url
621
- context '.samlp_url' do
622
- it { expect(@instance).to respond_to(:samlp_url) }
623
-
624
- it 'is expected to get the samlp url' do
625
- expect(@instance.samlp_url.to_s).to eq(
626
- "https://#{@instance.domain}/samlp/#{@instance.client_id}" \
627
- '?connection=Username-Password-Authentication'
628
- )
629
- end
630
-
631
- it 'is expected to get the samlp url with fb connection' do
632
- expect(@instance.samlp_url('facebook').to_s).to eq(
633
- "https://#{@instance.domain}/samlp/#{@instance.client_id}" \
634
- '?connection=facebook'
635
- )
636
- end
637
- end
638
-
639
- # Auth0::API::AuthenticationEndpoints.wsfed_url
640
- context '.wsfed_url' do
641
- it { expect(@instance).to respond_to(:wsfed_url) }
642
-
643
- it 'is expected to get the wsfed url' do
644
- expect(@instance.wsfed_url.to_s).to eq(
645
- "https://#{@instance.domain}/wsfed/#{@instance.client_id}" \
646
- "?whr=#{UP_AUTH}"
647
- )
648
- end
649
-
650
- it 'is expected to get the wsfed url with fb connection' do
651
- expect(@instance.wsfed_url('facebook').to_s).to eq(
652
- "https://#{@instance.domain}/wsfed/#{@instance.client_id}?whr=facebook"
653
- )
654
- end
655
-
656
- it 'is expected to get the wsfed url with wctx' do
657
- expect(@instance.wsfed_url(UP_AUTH, { wctx: 'wctx_test' }).to_s).to eq(
658
- "https://#{@instance.domain}/wsfed/#{@instance.client_id}" \
659
- "?whr=#{UP_AUTH}&wctx=wctx_test"
660
- )
661
- end
662
-
663
- it 'is expected to get the wsfed url with wtrealm and wreply' do
664
- expect(@instance.wsfed_url(
665
- UP_AUTH,
666
- {
667
- wtrealm: 'wtrealm_test',
668
- wreply: 'wreply_test'
669
- }
670
- ).to_s).to eq(
671
- "https://#{@instance.domain}/wsfed/?whr=#{UP_AUTH}" \
672
- '&wtrealm=wtrealm_test&wreply=wreply_test'
673
- )
674
- end
675
- end
676
-
677
- # Auth0::API::AuthenticationEndpoints.validate_id_token
678
- context '.validate_id_token' do
679
- it { expect(@instance).to respond_to(:validate_id_token) }
680
-
681
- it 'is expected not to raise an error with default values' do
682
- stub_request(:get, 'https://test.auth0.com/.well-known/jwks.json').to_return(body: JWKS_RESPONSE_1.to_json)
683
- token = 'eyJhbGciOiJSUzI1NiIsImtpZCI6InRlc3Qta2V5LTEifQ.eyJpc3MiOiJodHRwczovL3Rlc3QuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDEyMzQ1Njc4OSIsImF1ZCI6WyJfX3Rlc3RfYXVkaWVuY2VfXyIsIl9fdGVzdF9jbGllbnRfaWRfXyJdLCJleHAiOjI1MzgzMDExNDYsImlhdCI6MTU4NzU5MjU2MSwiYXpwIjoiX190ZXN0X2NsaWVudF9pZF9fIn0.X35Hfa1C9RtuJIj7Eky2iO4elY9XqCDRy8ieFAft63vGds9vhP38x8QHbJifmLs6vDEOySKfJMWhklp3oaXm6Tk6gyUQEaliW_pXUgZt8C3Xo125R8BMCDQeVJg8Abevbg6FpHpYztWpQuI609tmpoTczx7pXMmAneg6e4LNYvvtzaFD_0M0cxtjkm4OcevCJszNBru3tdXwRynkGbMYeXgoa_FumAshRvIvh-4dtkyNWsepo5IVTvixxF3FVoFaXOOycmFXh9gxOppG4lvE78AFB9AQ9LNS-DNhcXszbPs9KHMrg2bqhSL8Razqd3m2a1MXkdLMBD5DY499MVnb5w'
684
-
685
- expect { @instance.validate_id_token(token) }.to_not raise_exception
686
- end
687
-
688
- it 'is expected not to raise an error with custom values' do
689
- token = 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJpc3N1ZXIiLCJzdWIiOiJhdXRoMHwxMjM0NTY3ODkiLCJhdWQiOlsiYXVkaWVuY2UiLCJhbm90aGVyX2F1ZGllbmNlIl0sImV4cCI6MjUzODMwMTE0NiwiaWF0IjoxNTg3NTkyNTYxLCJub25jZSI6Im5vbmNlIiwiYXpwIjoiYXVkaWVuY2UiLCJhdXRoX3RpbWUiOjE1ODc2Nzg5NjF9.u39qTvuUmbzj5jsXjATXxjxJt0u064G1IAumoi18gm0'
690
-
691
- expect do
692
- @instance.validate_id_token(token,
693
- algorithm: Auth0::Algorithm::HS256.secret('secret'),
694
- leeway: 100,
695
- nonce: 'nonce',
696
- max_age: 2538301146,
697
- issuer: 'issuer',
698
- audience: 'audience')
699
- end.to_not raise_exception
700
- end
701
- end
702
- end
703
- # rubocop:enable Metrics/BlockLength