auth0 5.4.0 → 5.7.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 (233) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +2 -1
  3. data/.gitignore +0 -1
  4. data/.shiprc +7 -0
  5. data/CHANGELOG.md +106 -30
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +233 -0
  8. data/README.md +10 -8
  9. data/auth0.gemspec +2 -1
  10. data/lib/auth0/api/authentication_endpoints.rb +40 -16
  11. data/lib/auth0/api/v2/actions.rb +210 -0
  12. data/lib/auth0/api/v2/attack_protection.rb +79 -0
  13. data/lib/auth0/api/v2/grants.rb +49 -0
  14. data/lib/auth0/api/v2/organizations.rb +1 -1
  15. data/lib/auth0/api/v2.rb +6 -0
  16. data/lib/auth0/exception.rb +12 -0
  17. data/lib/auth0/mixins/api_token_struct.rb +0 -1
  18. data/lib/auth0/mixins/httpproxy.rb +76 -40
  19. data/lib/auth0/mixins/initializer.rb +2 -3
  20. data/lib/auth0/mixins/token_management.rb +32 -0
  21. data/lib/auth0/mixins/validation.rb +1 -1
  22. data/lib/auth0/mixins.rb +2 -0
  23. data/lib/auth0/version.rb +1 -1
  24. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +53 -23
  25. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +49 -18
  26. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +49 -18
  27. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +46 -15
  28. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +49 -79
  29. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +49 -80
  30. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +74 -21
  31. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +53 -14
  32. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +106 -48
  33. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +62 -19
  34. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +57 -22
  35. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +38 -20
  36. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +37 -19
  37. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +38 -23
  38. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +42 -26
  39. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +42 -26
  40. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +38 -20
  41. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +39 -27
  42. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +44 -82
  43. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +39 -27
  44. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +38 -20
  45. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +38 -20
  46. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +43 -56
  47. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +39 -28
  48. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +43 -57
  49. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +43 -24
  50. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +236 -96
  51. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +52 -27
  52. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +39 -25
  53. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +235 -96
  54. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +38 -20
  55. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +43 -57
  56. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +45 -82
  57. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +15 -16
  58. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +15 -16
  59. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +15 -16
  60. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +14 -15
  61. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +14 -15
  62. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +14 -15
  63. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +15 -15
  64. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +15 -15
  65. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +15 -16
  66. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +29 -27
  67. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +15 -16
  68. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +16 -17
  69. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +40 -32
  70. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +40 -30
  71. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +40 -32
  72. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +38 -20
  73. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +37 -28
  74. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +37 -19
  75. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +34 -16
  76. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +36 -27
  77. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +36 -28
  78. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +36 -28
  79. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +36 -28
  80. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +37 -19
  81. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +38 -23
  82. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +76 -46
  83. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +46 -25
  84. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +84 -48
  85. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_create_a_new_verification_email_job.yml +77 -47
  86. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +116 -71
  87. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +76 -39
  88. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +76 -43
  89. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +43 -23
  90. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +224 -196
  91. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +224 -196
  92. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +38 -25
  93. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +39 -39
  94. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +41 -40
  95. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +38 -26
  96. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +229 -189
  97. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +40 -32
  98. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +38 -20
  99. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +38 -20
  100. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +38 -20
  101. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +38 -20
  102. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +39 -24
  103. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +39 -24
  104. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +146 -23
  105. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +146 -23
  106. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +131 -24
  107. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +40 -25
  108. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +38 -20
  109. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +39 -32
  110. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +38 -31
  111. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +42 -30
  112. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +38 -30
  113. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +37 -30
  114. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +37 -30
  115. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +37 -30
  116. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +37 -30
  117. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +37 -29
  118. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +39 -29
  119. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +37 -30
  120. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +38 -31
  121. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +39 -31
  122. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +38 -31
  123. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +36 -26
  124. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +36 -26
  125. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +38 -20
  126. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +38 -20
  127. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +40 -27
  128. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +40 -27
  129. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +39 -26
  130. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +40 -27
  131. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +80 -24
  132. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +82 -25
  133. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +59 -27
  134. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +68 -26
  135. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +78 -49
  136. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +84 -28
  137. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +40 -27
  138. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +42 -29
  139. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +42 -29
  140. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +38 -23
  141. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +38 -27
  142. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +72 -59
  143. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +38 -25
  144. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +38 -25
  145. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +72 -58
  146. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +72 -58
  147. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +39 -26
  148. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +39 -26
  149. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +40 -32
  150. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +38 -20
  151. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +39 -35
  152. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +37 -25
  153. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +36 -24
  154. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +36 -24
  155. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user_provider/should_attempt_to_delete_the_MFA_provider_for_the_User.yml +36 -24
  156. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +37 -28
  157. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +37 -28
  158. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +37 -28
  159. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +38 -28
  160. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +36 -24
  161. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +38 -29
  162. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +38 -28
  163. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +39 -27
  164. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +39 -27
  165. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +37 -28
  166. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +37 -28
  167. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +37 -28
  168. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +37 -28
  169. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +37 -28
  170. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +42 -30
  171. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v2_search_engine_query.yml +36 -27
  172. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v3_search_engine_query.yml +36 -27
  173. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +36 -27
  174. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +36 -27
  175. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +36 -27
  176. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +36 -27
  177. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +37 -27
  178. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +38 -29
  179. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +38 -29
  180. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +39 -29
  181. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +38 -29
  182. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +36 -24
  183. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +42 -28
  184. data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +0 -9
  185. data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +3 -3
  186. data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +0 -31
  187. data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +4 -4
  188. data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +5 -5
  189. data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +3 -3
  190. data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +4 -4
  191. data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +8 -5
  192. data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +6 -33
  193. data/spec/lib/auth0/api/v2/actions_spec.rb +312 -0
  194. data/spec/lib/auth0/api/v2/attack_protection_spec.rb +132 -0
  195. data/spec/lib/auth0/api/v2/blacklists_spec.rb +2 -2
  196. data/spec/lib/auth0/api/v2/branding_spec.rb +4 -3
  197. data/spec/lib/auth0/api/v2/client_grants_spec.rb +8 -8
  198. data/spec/lib/auth0/api/v2/clients_spec.rb +12 -12
  199. data/spec/lib/auth0/api/v2/connections_spec.rb +10 -10
  200. data/spec/lib/auth0/api/v2/device_credentials_spec.rb +4 -4
  201. data/spec/lib/auth0/api/v2/emails_spec.rb +2 -2
  202. data/spec/lib/auth0/api/v2/grants_spec.rb +91 -0
  203. data/spec/lib/auth0/api/v2/jobs_spec.rb +18 -17
  204. data/spec/lib/auth0/api/v2/log_streams_spec.rb +3 -3
  205. data/spec/lib/auth0/api/v2/logs_spec.rb +2 -2
  206. data/spec/lib/auth0/api/v2/organizations_spec.rb +13 -13
  207. data/spec/lib/auth0/api/v2/resource_servers_spec.rb +5 -5
  208. data/spec/lib/auth0/api/v2/roles_spec.rb +22 -22
  209. data/spec/lib/auth0/api/v2/rules_spec.rb +7 -7
  210. data/spec/lib/auth0/api/v2/stats_spec.rb +1 -1
  211. data/spec/lib/auth0/api/v2/tenants_spec.rb +1 -1
  212. data/spec/lib/auth0/api/v2/tickets_spec.rb +14 -14
  213. data/spec/lib/auth0/api/v2/user_blocks_spec.rb +2 -2
  214. data/spec/lib/auth0/api/v2/users_by_email_spec.rb +2 -2
  215. data/spec/lib/auth0/api/v2/users_spec.rb +23 -23
  216. data/spec/lib/auth0/client_spec.rb +3 -3
  217. data/spec/lib/auth0/mixins/httpproxy_spec.rb +293 -0
  218. data/spec/lib/auth0/mixins/initializer_spec.rb +87 -0
  219. data/spec/lib/auth0/mixins/token_management_spec.rb +125 -0
  220. data/spec/spec_helper.rb +1 -1
  221. data/spec/support/dummy_class_for_proxy.rb +1 -0
  222. data/spec/support/dummy_class_for_tokens.rb +17 -0
  223. metadata +35 -25
  224. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_check_if_ip_is_blocked/should_return_200_response_code.yml +0 -65
  225. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_remove_ip_block/should_remove_an_IP_successfully.yml +0 -60
  226. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_first_page_of_one_result.yml +0 -66
  227. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_delete_device_credential/should_delete_the_test_credential_without_an_error.yml +0 -54
  228. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/_filter_by_type/should_exclude_the_test_credential.yml +0 -59
  229. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_have_at_least_1_entry.yml +0 -62
  230. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_include_the_test_credential.yml +0 -62
  231. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +0 -54
  232. data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +0 -17
  233. data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +0 -128
data/Gemfile.lock ADDED
@@ -0,0 +1,233 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ auth0 (5.7.0)
5
+ addressable (~> 2.8)
6
+ jwt (~> 2.2)
7
+ rest-client (~> 2.1)
8
+ retryable (~> 3.0)
9
+ zache (~> 0.12)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ actionpack (7.0.2.2)
15
+ actionview (= 7.0.2.2)
16
+ activesupport (= 7.0.2.2)
17
+ rack (~> 2.0, >= 2.2.0)
18
+ rack-test (>= 0.6.3)
19
+ rails-dom-testing (~> 2.0)
20
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
21
+ actionview (7.0.2.2)
22
+ activesupport (= 7.0.2.2)
23
+ builder (~> 3.1)
24
+ erubi (~> 1.4)
25
+ rails-dom-testing (~> 2.0)
26
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
27
+ activesupport (7.0.2.2)
28
+ concurrent-ruby (~> 1.0, >= 1.0.2)
29
+ i18n (>= 1.6, < 2)
30
+ minitest (>= 5.1)
31
+ tzinfo (~> 2.0)
32
+ addressable (2.8.0)
33
+ public_suffix (>= 2.0.2, < 5.0)
34
+ ast (2.4.2)
35
+ builder (3.2.4)
36
+ codecov (0.6.0)
37
+ simplecov (>= 0.15, < 0.22)
38
+ coderay (1.1.3)
39
+ concurrent-ruby (1.1.9)
40
+ coveralls (0.7.1)
41
+ multi_json (~> 1.3)
42
+ rest-client
43
+ simplecov (>= 0.7)
44
+ term-ansicolor
45
+ thor
46
+ crack (0.4.5)
47
+ rexml
48
+ crass (1.0.6)
49
+ diff-lcs (1.5.0)
50
+ docile (1.4.0)
51
+ domain_name (0.5.20190701)
52
+ unf (>= 0.0.5, < 1.0.0)
53
+ dotenv (2.7.6)
54
+ dotenv-rails (2.7.6)
55
+ dotenv (= 2.7.6)
56
+ railties (>= 3.2)
57
+ erubi (1.10.0)
58
+ faker (2.19.0)
59
+ i18n (>= 1.6, < 2)
60
+ ffi (1.15.5)
61
+ formatador (1.1.0)
62
+ fuubar (2.5.1)
63
+ rspec-core (~> 3.0)
64
+ ruby-progressbar (~> 1.4)
65
+ gem-release (0.7.4)
66
+ guard (2.17.0)
67
+ formatador (>= 0.2.4)
68
+ listen (>= 2.7, < 4.0)
69
+ lumberjack (>= 1.0.12, < 2.0)
70
+ nenv (~> 0.1)
71
+ notiffany (~> 0.0)
72
+ pry (>= 0.9.12)
73
+ shellany (~> 0.0)
74
+ thor (>= 0.18.1)
75
+ guard-compat (1.2.1)
76
+ guard-rspec (4.7.3)
77
+ guard (~> 2.1)
78
+ guard-compat (~> 1.1)
79
+ rspec (>= 2.99.0, < 4.0)
80
+ hashdiff (1.0.1)
81
+ http-accept (1.7.0)
82
+ http-cookie (1.0.4)
83
+ domain_name (~> 0.5)
84
+ i18n (1.10.0)
85
+ concurrent-ruby (~> 1.0)
86
+ jwt (2.3.0)
87
+ listen (3.7.1)
88
+ rb-fsevent (~> 0.10, >= 0.10.3)
89
+ rb-inotify (~> 0.9, >= 0.9.10)
90
+ loofah (2.14.0)
91
+ crass (~> 1.0.2)
92
+ nokogiri (>= 1.5.9)
93
+ lumberjack (1.2.8)
94
+ method_source (0.9.2)
95
+ mime-types (3.4.1)
96
+ mime-types-data (~> 3.2015)
97
+ mime-types-data (3.2022.0105)
98
+ mini_portile2 (2.7.1)
99
+ minitest (5.15.0)
100
+ multi_json (1.15.0)
101
+ nenv (0.3.0)
102
+ netrc (0.11.0)
103
+ nokogiri (1.13.1)
104
+ mini_portile2 (~> 2.7.0)
105
+ racc (~> 1.4)
106
+ notiffany (0.1.3)
107
+ nenv (~> 0.1)
108
+ shellany (~> 0.0)
109
+ parallel (1.21.0)
110
+ parser (3.1.0.0)
111
+ ast (~> 2.4.1)
112
+ pry (0.12.2)
113
+ coderay (~> 1.1.0)
114
+ method_source (~> 0.9.0)
115
+ pry-nav (0.3.0)
116
+ pry (>= 0.9.10, < 0.13.0)
117
+ public_suffix (4.0.6)
118
+ racc (1.6.0)
119
+ rack (2.2.3)
120
+ rack-test (0.8.3)
121
+ rack (>= 1.0, < 3)
122
+ rails-dom-testing (2.0.3)
123
+ activesupport (>= 4.2.0)
124
+ nokogiri (>= 1.6)
125
+ rails-html-sanitizer (1.4.2)
126
+ loofah (~> 2.3)
127
+ railties (7.0.2.2)
128
+ actionpack (= 7.0.2.2)
129
+ activesupport (= 7.0.2.2)
130
+ method_source
131
+ rake (>= 12.2)
132
+ thor (~> 1.0)
133
+ zeitwerk (~> 2.5)
134
+ rainbow (3.1.1)
135
+ rake (13.0.6)
136
+ rb-fsevent (0.11.1)
137
+ rb-inotify (0.10.1)
138
+ ffi (~> 1.0)
139
+ regexp_parser (2.2.1)
140
+ rest-client (2.1.0)
141
+ http-accept (>= 1.7.0, < 2.0)
142
+ http-cookie (>= 1.0.2, < 2.0)
143
+ mime-types (>= 1.16, < 4.0)
144
+ netrc (~> 0.8)
145
+ retryable (3.0.5)
146
+ rexml (3.2.5)
147
+ rspec (3.11.0)
148
+ rspec-core (~> 3.11.0)
149
+ rspec-expectations (~> 3.11.0)
150
+ rspec-mocks (~> 3.11.0)
151
+ rspec-core (3.11.0)
152
+ rspec-support (~> 3.11.0)
153
+ rspec-expectations (3.11.0)
154
+ diff-lcs (>= 1.2.0, < 2.0)
155
+ rspec-support (~> 3.11.0)
156
+ rspec-mocks (3.11.0)
157
+ diff-lcs (>= 1.2.0, < 2.0)
158
+ rspec-support (~> 3.11.0)
159
+ rspec-support (3.11.0)
160
+ rubocop (1.25.1)
161
+ parallel (~> 1.10)
162
+ parser (>= 3.1.0.0)
163
+ rainbow (>= 2.2.2, < 4.0)
164
+ regexp_parser (>= 1.8, < 3.0)
165
+ rexml
166
+ rubocop-ast (>= 1.15.1, < 2.0)
167
+ ruby-progressbar (~> 1.7)
168
+ unicode-display_width (>= 1.4.0, < 3.0)
169
+ rubocop-ast (1.15.2)
170
+ parser (>= 3.0.1.1)
171
+ rubocop-rails (2.13.2)
172
+ activesupport (>= 4.2.0)
173
+ rack (>= 1.1)
174
+ rubocop (>= 1.7.0, < 2.0)
175
+ ruby-progressbar (1.11.0)
176
+ shellany (0.0.1)
177
+ simplecov (0.21.2)
178
+ docile (~> 1.1)
179
+ simplecov-html (~> 0.11)
180
+ simplecov_json_formatter (~> 0.1)
181
+ simplecov-html (0.12.3)
182
+ simplecov_json_formatter (0.1.4)
183
+ sync (0.5.0)
184
+ term-ansicolor (1.7.1)
185
+ tins (~> 1.0)
186
+ terminal-notifier-guard (1.7.0)
187
+ thor (1.2.1)
188
+ timecop (0.9.4)
189
+ tins (1.31.0)
190
+ sync
191
+ tzinfo (2.0.4)
192
+ concurrent-ruby (~> 1.0)
193
+ unf (0.1.4)
194
+ unf_ext
195
+ unf_ext (0.0.8)
196
+ unicode-display_width (2.1.0)
197
+ vcr (6.0.0)
198
+ webmock (3.14.0)
199
+ addressable (>= 2.8.0)
200
+ crack (>= 0.3.2)
201
+ hashdiff (>= 0.4.0, < 2.0.0)
202
+ zache (0.12.0)
203
+ zeitwerk (2.5.4)
204
+
205
+ PLATFORMS
206
+ ruby
207
+
208
+ DEPENDENCIES
209
+ auth0!
210
+ bundler
211
+ codecov
212
+ coveralls
213
+ dotenv-rails (~> 2.0)
214
+ faker (~> 2.0)
215
+ fuubar (~> 2.0)
216
+ gem-release (~> 0.7)
217
+ guard-rspec (~> 4.5)
218
+ pry (~> 0.10)
219
+ pry-nav (~> 0.2)
220
+ rack (~> 2.1)
221
+ rack-test (~> 0.6)
222
+ rake (~> 13.0)
223
+ rspec (~> 3.5)
224
+ rubocop
225
+ rubocop-rails
226
+ simplecov
227
+ terminal-notifier-guard
228
+ timecop
229
+ vcr
230
+ webmock
231
+
232
+ BUNDLED WITH
233
+ 1.17.2
data/README.md CHANGED
@@ -77,6 +77,10 @@ class AllUsersController < ApplicationController
77
77
  # Otherwise, you can pass in a Management API token directly for testing or temporary
78
78
  # access using the key below.
79
79
  # token: ENV['AUTH0_RUBY_API_TOKEN'],
80
+ #
81
+ # When passing a token, you can also specify when the token expires in seconds from epoch. Otherwise, expiry is set
82
+ # by default to an hour from now.
83
+ # token_expires_at: Time.now.to_i + 86400,
80
84
  domain: ENV['AUTH0_RUBY_DOMAIN'],
81
85
  api_version: 2,
82
86
  timeout: 15 # optional, defaults to 10
@@ -98,6 +102,12 @@ Finally, we'll add a view to display the results:
98
102
 
99
103
  This should show the parameters passed to the `users` method and a list of users that matched the query (or an empty array if none).
100
104
 
105
+ ### Token management
106
+
107
+ If `token` is omitted, the SDK will attempt to fetch a new token using the `client_credentials` grant, provided that `client_id` and `client_secret` are provided in the configuration. Once the token is about to expire (or has already expired), a new token will be fetched and cached for future calls.
108
+
109
+ For this to work, ensure your application can make a Client Credentials grant (Application settings in Auth0 > Advanced > Grant Types tab) and that the application is authorized for the Management API: https://auth0.com/docs/api-auth/config/using-the-auth0-dashboard
110
+
101
111
  ## Authentication
102
112
 
103
113
  In addition to the Management API, this SDK also provides access to [Authentication API](https://auth0.com/docs/api/authentication) endpoints with the `Auth0::API::AuthenticationEndpoints` module. For basic login capability, we suggest using our OmniAuth stategy [detailed here](https://auth0.com/docs/quickstart/webapp/rails/01-login). Other authentication tasks currently supported are:
@@ -117,14 +127,6 @@ Please note that this module implements endpoints that might be deprecated for n
117
127
 
118
128
  [Organizations](https://auth0.com/docs/organizations) is a set of features that provide better support for developers who build and maintain SaaS and Business-to-Business (B2B) applications.
119
129
 
120
- Using Organizations, you can:
121
-
122
- - Represent teams, business customers, partner companies, or any logical grouping of users that should have different ways of accessing your applications, as organizations.
123
- - Manage their membership in a variety of ways, including user invitation.
124
- - Configure branded, federated login flows for each organization.
125
- - Implement role-based access control, such that users can have different roles when authenticating in the context of different organizations.
126
- - Build administration capabilities into your products, using Organizations APIs, so that those businesses can manage their own organizations.
127
-
128
130
  Note that Organizations is currently only available to customers on our Enterprise and Startup subscription plans.
129
131
 
130
132
  #### Logging in with an Organization
data/auth0.gemspec CHANGED
@@ -16,10 +16,11 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
17
  s.require_paths = ['lib']
18
18
 
19
- s.add_runtime_dependency 'rest-client', '~> 2.0.2' #2.1.0 has breaking changes
19
+ s.add_runtime_dependency 'rest-client', '~> 2.1'
20
20
  s.add_runtime_dependency 'jwt', '~> 2.2'
21
21
  s.add_runtime_dependency 'zache', '~> 0.12'
22
22
  s.add_runtime_dependency 'addressable', '~> 2.8'
23
+ s.add_runtime_dependency 'retryable', '~> 3.0'
23
24
 
24
25
  s.add_development_dependency 'bundler'
25
26
  s.add_development_dependency 'rake', '~> 13.0'
@@ -22,16 +22,14 @@ module Auth0
22
22
  organization: @organization,
23
23
  audience: nil
24
24
  )
25
-
26
25
  request_params = {
27
26
  grant_type: 'client_credentials',
28
27
  client_id: client_id,
29
28
  client_secret: client_secret,
30
- audience: audience,
31
- organization: organization
29
+ audience: audience
32
30
  }
33
31
 
34
- response = post('/oauth/token', request_params)
32
+ response = request_with_retry(:post, '/oauth/token', request_params)
35
33
  ::Auth0::ApiToken.new(response['access_token'], response['scope'], response['expires_in'])
36
34
  end
37
35
 
@@ -58,7 +56,7 @@ module Auth0
58
56
  code: code,
59
57
  redirect_uri: redirect_uri
60
58
  }
61
- ::Auth0::AccessToken.from_response post('/oauth/token', request_params)
59
+ ::Auth0::AccessToken.from_response request_with_retry(:post, '/oauth/token', request_params)
62
60
  end
63
61
 
64
62
  # Get access and ID tokens using a refresh token.
@@ -83,7 +81,7 @@ module Auth0
83
81
  client_secret: client_secret,
84
82
  refresh_token: refresh_token
85
83
  }
86
- ::Auth0::AccessToken.from_response post('/oauth/token', request_params)
84
+ ::Auth0::AccessToken.from_response request_with_retry(:post, '/oauth/token', request_params)
87
85
  end
88
86
 
89
87
  # rubocop:disable Metrics/ParameterLists
@@ -123,7 +121,7 @@ module Auth0
123
121
  audience: audience,
124
122
  grant_type: realm ? 'http://auth0.com/oauth/grant-type/password-realm' : 'password'
125
123
  }
126
- ::Auth0::AccessToken.from_response post('/oauth/token', request_params)
124
+ ::Auth0::AccessToken.from_response request_with_retry(:post, '/oauth/token', request_params)
127
125
  end
128
126
  # rubocop:enable Metrics/ParameterLists
129
127
 
@@ -143,16 +141,18 @@ module Auth0
143
141
  connection: connection_name,
144
142
  client_id: @client_id
145
143
  }
146
- post('/dbconnections/signup', request_params)
144
+
145
+ request_with_retry(:post, '/dbconnections/signup', request_params)
147
146
  end
148
147
 
149
148
  # Change a user's password or trigger a password reset email.
150
149
  # @see https://auth0.com/docs/api/authentication#change-password
151
150
  # @see https://auth0.com/docs/connections/database/password-change
152
151
  # @param email [string] User's current email
153
- # @param password [string] User's new password; empty to trigger a
154
- # password reset email
152
+ # @param password [string] User's new password. This is only available
153
+ # on legacy tenants with change password v1 flow enabled
155
154
  # @param connection_name [string] Database connection name
155
+ # @deprecated Use {#password_reset} instead.
156
156
  def change_password(email, password, connection_name = UP_AUTH)
157
157
  raise Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
158
158
 
@@ -162,7 +162,29 @@ module Auth0
162
162
  connection: connection_name,
163
163
  client_id: @client_id
164
164
  }
165
- post('/dbconnections/change_password', request_params)
165
+
166
+ request_with_retry(:post, '/dbconnections/change_password', request_params)
167
+ end
168
+
169
+ # Trigger a password reset email.
170
+ # @see https://auth0.com/docs/api/authentication#change-password
171
+ # @see https://auth0.com/docs/connections/database/password-change
172
+ # @param email [string] User's current email
173
+ # @param password [string] User's new password; empty to trigger a
174
+ # password reset email
175
+ # @param connection_name [string] Database connection name
176
+ # @param client_id [string] Client ID override (to allow forwarding
177
+ # to a different application's login URI on password reset success page)
178
+ def reset_password(email, connection_name = UP_AUTH, client_id = @client_id)
179
+ raise Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
180
+
181
+ request_params = {
182
+ email: email,
183
+ connection: connection_name,
184
+ client_id: client_id
185
+ }
186
+
187
+ request_with_retry(:post, '/dbconnections/change_password', request_params)
166
188
  end
167
189
 
168
190
  # Start Passwordless email login flow.
@@ -182,7 +204,8 @@ module Auth0
182
204
  client_id: @client_id,
183
205
  client_secret: @client_secret
184
206
  }
185
- post('/passwordless/start', request_params)
207
+
208
+ request_with_retry(:post, '/passwordless/start', request_params)
186
209
  end
187
210
 
188
211
  # Start Passwordless SMS login flow.
@@ -198,28 +221,29 @@ module Auth0
198
221
  client_id: @client_id,
199
222
  client_secret: @client_secret
200
223
  }
201
- post('/passwordless/start', request_params)
224
+
225
+ request_with_retry(:post, '/passwordless/start', request_params)
202
226
  end
203
227
 
204
228
  # Retrive SAML 2.0 metadata XML for an Application.
205
229
  # @see https://auth0.com/docs/api/authentication#get-metadata
206
230
  # @return [xml] SAML 2.0 metadata
207
231
  def saml_metadata
208
- get("/samlp/metadata/#{@client_id}")
232
+ request_with_retry(:get, "/samlp/metadata/#{@client_id}")
209
233
  end
210
234
 
211
235
  # Retrieve WS-Federation metadata XML for a tenant.
212
236
  # @see https://auth0.com/docs/api/authentication#get-metadata36
213
237
  # @return [xml] WS-Federation metadata
214
238
  def wsfed_metadata
215
- get('/wsfed/FederationMetadata/2007-06/FederationMetadata.xml')
239
+ request_with_retry(:get, '/wsfed/FederationMetadata/2007-06/FederationMetadata.xml')
216
240
  end
217
241
 
218
242
  # Return the user information based on the Auth0 access token.
219
243
  # @see https://auth0.com/docs/api/authentication#get-user-info
220
244
  # @return [json] User information based on the Auth0 access token
221
245
  def userinfo(access_token)
222
- get('/userinfo', {}, 'Authorization' => "Bearer #{access_token}")
246
+ request_with_retry(:get, '/userinfo', {}, 'Authorization' => "Bearer #{access_token}")
223
247
  end
224
248
 
225
249
  # Return an authorization URL.
@@ -0,0 +1,210 @@
1
+ module Auth0
2
+ module Api
3
+ module V2
4
+ # Methods to use the actions endpoints
5
+ module Actions
6
+ include Auth0::Mixins::Validation
7
+
8
+ attr_reader :actions_path
9
+
10
+ # Get all actions.
11
+ # @see https://auth0.com/docs/api/management/v2#!/Actions/get_actions
12
+ # @param trigger_id [string] An actions extensibility point.
13
+ # @param action_name [string] The name of the action to retrieve.
14
+ # @param deployed [boolean] filter to only retrieve actions that are deployed.
15
+ # @param per_page [integer] The amount of entries per page. Default: 50. Max value: 100.
16
+ # @param page [integer] The page number. Zero based.
17
+ # @param installed [boolean] When true, return only installed actions. When false, return only custom actions. Returns all actions by default.
18
+ # @return [json] Actions and pagination info
19
+ def actions(trigger_id, action_name, deployed: nil, per_page: nil, page: nil, installed: nil)
20
+ raise Auth0::MissingTriggerId, 'Must supply a valid trigger_id' if trigger_id.to_s.empty?
21
+ raise Auth0::MissingActionName, 'Must supply a valid action_name' if action_name.to_s.empty?
22
+
23
+ request_params = {
24
+ trigger_id: trigger_id,
25
+ action_name: action_name,
26
+ deployed: deployed,
27
+ per_page: per_page,
28
+ page: page,
29
+ installed: installed
30
+ }
31
+ path = "#{actions_path}/actions"
32
+ get(path, request_params)
33
+ end
34
+ alias get_actions actions
35
+
36
+ # Create a new action.
37
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/post_action
38
+ # @param body [hash] See https://auth0.com/docs/api/management/v2/#!/actions/post_action for available options
39
+ # @return [json] Returns the created action.
40
+ def create_action(body = {})
41
+ post(actions_path, body)
42
+ end
43
+
44
+ # Retrieve the set of triggers currently available within actions. A trigger is an extensibility point to which actions can be bound.
45
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/get_triggers
46
+ #
47
+ # @return [json] Returns triggers of the action
48
+ def actions_triggers
49
+ path = "#{actions_path}/triggers"
50
+ get(path)
51
+ end
52
+
53
+ # Get an action by id.
54
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/get_action
55
+ # @param action_id [string] The action_id of the user to retrieve.
56
+ #
57
+ # @return [json] Returns the action with the given action_id if it exists.
58
+ def action(action_id)
59
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
60
+ path = "#{actions_path}/actions/#{action_id}"
61
+ get(path)
62
+ end
63
+ alias get_action action
64
+
65
+
66
+ # Deletes a single action given its id
67
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/delete_action
68
+ # @param action_id [string] The action ID
69
+ # @param force [boolean] Force action deletion detaching bindings (defaults to false)
70
+ def delete_action(action_id, force=false)
71
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
72
+ path = "#{actions_path}/actions/#{action_id}"
73
+ delete(path, { force: force })
74
+ end
75
+
76
+ # Update an existing action.
77
+ # @see https://auth0.com/docs/api/management/v2/#!/Actions/patch_action
78
+ # @param action_id [string] The action ID
79
+ # @param body [hash] The optional parameters to update.
80
+ #
81
+ # @return [json] Returns the updated user.
82
+ def patch_action(action_id, body)
83
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
84
+ raise Auth0::InvalidParameter, 'Must supply a valid body' if body.to_s.empty? || body.empty?
85
+ path = "#{actions_path}/actions/#{action_id}"
86
+ patch(path, body)
87
+ end
88
+ alias update_action patch_action
89
+
90
+ # Retrieve information about a specific execution of a trigger.
91
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/get_action
92
+ # @param execution_id [string] The ID of the exeution to retrieve.
93
+ #
94
+ # @return [json] Returns the action with the given execution_id if it exists.
95
+ def execution(execution_id)
96
+ raise Auth0::MissingExecutionId, 'Must supply a valid execution_id' if execution_id.to_s.empty?
97
+ path = "#{actions_path}/executions/#{execution_id}"
98
+ get(path)
99
+ end
100
+ alias get_execution execution
101
+
102
+ # Retrieve all of an action's versions.
103
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/versions
104
+ # @param action_id [string] The ID of the action.
105
+ # @param per_page [integer] The amount of entries per page. Default: 50. Max value: 100.
106
+ # @param page [integer] The page number. Zero based
107
+ #
108
+ # @return [json] Returns the action with the given execution_id if it exists.
109
+ def actions_versions(action_id, page: nil, per_page: nil)
110
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
111
+ path = "#{actions_path}/actions/#{action_id}/versions"
112
+ request_params = {
113
+ per_page: per_page,
114
+ page: page
115
+ }
116
+
117
+ get(path, request_params)
118
+ end
119
+ alias get_actions_versions actions_versions
120
+
121
+ # Retrieve the actions that are bound to a trigger.
122
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/get_bindings
123
+ # @param trigger_id [string] An actions extensibility point.
124
+ # @param per_page [integer] The amount of entries per page. Default: 50. Max value: 100.
125
+ # @param page [integer] The page number. Zero based
126
+ #
127
+ # @return [json] Returns the action with the given trigger_id if it exists.
128
+ def trigger_bindings(trigger_id, page: nil, per_page: nil)
129
+ raise Auth0::MissingTriggerId, 'Must supply a valid trigger_id' if trigger_id.to_s.empty?
130
+ path = "#{actions_path}/triggers/#{trigger_id}/bindings"
131
+ request_params = {
132
+ per_page: per_page,
133
+ page: page
134
+ }
135
+
136
+ get(path, request_params)
137
+ end
138
+ alias get_trigger_bindings trigger_bindings
139
+
140
+ # Update the actions that are bound (i.e. attached) to a trigger.
141
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/patch_bindings
142
+ # @param trigger_id [string] An actions extensibility point.
143
+ # @param body [hash] The optional parameters to update.
144
+ #
145
+ # @return [json] Returns the bindings that were updated.
146
+ def patch_trigger_bindings(trigger_id, body = nil)
147
+ raise Auth0::MissingTriggerId, 'Must supply a valid trigger_id' if trigger_id.to_s.empty?
148
+ raise Auth0::InvalidParameter, 'Must supply a valid body' if body.to_s.empty? || body.empty?
149
+ path = "#{actions_path}/triggers/#{trigger_id}/bindings"
150
+ patch(path, body)
151
+ end
152
+ alias update_trigger_bindings patch_trigger_bindings
153
+
154
+ # Retrieve a specific version of an action
155
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/get_action_version
156
+ # @param action_id [string] The ID of the action.
157
+ # @param version_id [string] The ID of the action version.
158
+ #
159
+ # @return [json] Returns the action.
160
+ def action_by_version(action_id, version_id)
161
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
162
+ raise Auth0::MissingVersionId, 'Must supply a valid version_id' if version_id.to_s.empty?
163
+ path = "#{actions_path}/actions/#{action_id}/versions/#{version_id}"
164
+ get(path)
165
+ end
166
+ alias get_action_by_version action_by_version
167
+
168
+ # Deploy an action.
169
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/post_deploy_action
170
+ # @param action_id [string] The ID of the action.
171
+ # @return [json] Returns the created action.
172
+ def deploy_action(action_id)
173
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
174
+ path = "#{actions_path}/actions/#{action_id}/deploy"
175
+ post(path)
176
+ end
177
+
178
+ # Test an action.
179
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/post_test_action
180
+ # @param action_id [string] The ID of the action.
181
+ # @param body [hash] See https://auth0.com/docs/api/management/v2/#!/actions/post_test_action for available options
182
+ # @return [json] Returns the created action.
183
+ def test_action(action_id, body = {})
184
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
185
+ raise Auth0::InvalidParameter, 'Must supply a valid body' if body.to_s.empty? || body.empty?
186
+ path = "#{actions_path}/actions/#{action_id}/test"
187
+ post(path, body)
188
+ end
189
+
190
+ # Performs the equivalent of a roll-back of an action to an earlier, specified version.
191
+ # @see https://auth0.com/docs/api/management/v2/#!/actions/post_deploy_draft_version
192
+ # @param action_id [string] The ID of the action.
193
+ # @param version_id [string] The ID of the action version.
194
+ # @return [json] Returns the created action.
195
+ def rollback_action(action_id, version_id)
196
+ raise Auth0::MissingActionId, 'Must supply a valid action_id' if action_id.to_s.empty?
197
+ raise Auth0::MissingVersionId, 'Must supply a valid version_id' if version_id.to_s.empty?
198
+ path = "#{actions_path}/actions/#{action_id}/versions/#{version_id}/deploy"
199
+ post(path)
200
+ end
201
+
202
+ private
203
+ # actions API path
204
+ def actions_path
205
+ @actions_path ||= '/api/v2/actions'
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end