auth0 5.5.0 → 5.6.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 (206) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/Gemfile +1 -0
  4. data/README.md +10 -8
  5. data/auth0.gemspec +1 -1
  6. data/lib/auth0/api/authentication_endpoints.rb +40 -16
  7. data/lib/auth0/api/v2/actions.rb +210 -0
  8. data/lib/auth0/api/v2/grants.rb +49 -0
  9. data/lib/auth0/api/v2.rb +4 -0
  10. data/lib/auth0/exception.rb +12 -0
  11. data/lib/auth0/mixins/api_token_struct.rb +0 -1
  12. data/lib/auth0/mixins/httpproxy.rb +10 -5
  13. data/lib/auth0/mixins/initializer.rb +1 -3
  14. data/lib/auth0/mixins/token_management.rb +32 -0
  15. data/lib/auth0/mixins/validation.rb +1 -1
  16. data/lib/auth0/mixins.rb +2 -0
  17. data/lib/auth0/version.rb +1 -1
  18. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +53 -23
  19. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +49 -18
  20. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +49 -18
  21. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +46 -15
  22. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +49 -79
  23. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +49 -80
  24. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +74 -21
  25. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +53 -14
  26. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +106 -48
  27. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +62 -19
  28. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +57 -22
  29. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +38 -20
  30. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +37 -19
  31. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +38 -23
  32. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +42 -26
  33. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +42 -26
  34. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +38 -20
  35. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +39 -27
  36. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +44 -82
  37. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +39 -27
  38. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +38 -20
  39. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +38 -20
  40. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +43 -56
  41. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +39 -28
  42. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +43 -57
  43. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +43 -24
  44. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +236 -96
  45. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +52 -27
  46. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +39 -25
  47. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +235 -96
  48. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +38 -20
  49. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +43 -57
  50. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +45 -82
  51. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +15 -16
  52. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +15 -16
  53. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +15 -16
  54. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +14 -15
  55. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +14 -15
  56. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +14 -15
  57. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +15 -15
  58. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +15 -15
  59. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +15 -16
  60. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +29 -27
  61. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +15 -16
  62. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +16 -17
  63. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +40 -32
  64. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +40 -30
  65. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +40 -32
  66. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +38 -20
  67. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +37 -28
  68. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +37 -19
  69. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +34 -16
  70. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +36 -27
  71. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +36 -28
  72. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +36 -28
  73. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +36 -28
  74. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +37 -19
  75. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +38 -23
  76. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +76 -46
  77. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +46 -25
  78. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +84 -48
  79. 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
  80. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +116 -71
  81. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +76 -39
  82. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +76 -43
  83. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +43 -23
  84. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +224 -196
  85. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +224 -196
  86. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +38 -25
  87. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +39 -39
  88. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +41 -40
  89. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +38 -26
  90. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +229 -189
  91. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +40 -32
  92. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +38 -20
  93. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +38 -20
  94. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +38 -20
  95. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +38 -20
  96. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +39 -24
  97. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +39 -24
  98. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +146 -23
  99. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +146 -23
  100. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +131 -24
  101. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +40 -25
  102. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +38 -20
  103. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +39 -32
  104. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +38 -31
  105. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +42 -30
  106. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +38 -30
  107. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +37 -30
  108. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +37 -30
  109. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +37 -30
  110. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +37 -30
  111. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +37 -29
  112. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +39 -29
  113. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +37 -30
  114. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +38 -31
  115. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +39 -31
  116. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +38 -31
  117. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +36 -26
  118. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +36 -26
  119. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +38 -20
  120. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +38 -20
  121. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +40 -27
  122. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +40 -27
  123. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +39 -26
  124. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +40 -27
  125. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +80 -24
  126. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +82 -25
  127. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +59 -27
  128. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +68 -26
  129. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +78 -49
  130. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +84 -28
  131. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +40 -27
  132. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +42 -29
  133. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +42 -29
  134. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +38 -23
  135. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +38 -27
  136. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +72 -59
  137. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +38 -25
  138. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +38 -25
  139. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +72 -58
  140. 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
  141. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +39 -26
  142. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +39 -26
  143. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +40 -32
  144. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +38 -20
  145. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +39 -35
  146. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +37 -25
  147. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +36 -24
  148. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +36 -24
  149. 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
  150. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +37 -28
  151. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +37 -28
  152. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +37 -28
  153. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +38 -28
  154. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +36 -24
  155. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +38 -29
  156. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +38 -28
  157. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +39 -27
  158. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +39 -27
  159. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +37 -28
  160. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +37 -28
  161. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +37 -28
  162. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +37 -28
  163. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +37 -28
  164. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +42 -30
  165. 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
  166. 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
  167. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +36 -27
  168. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +36 -27
  169. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +36 -27
  170. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +36 -27
  171. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +37 -27
  172. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +38 -29
  173. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +38 -29
  174. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +39 -29
  175. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +38 -29
  176. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +36 -24
  177. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +42 -28
  178. data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +0 -9
  179. data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +3 -3
  180. data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +0 -31
  181. data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +4 -4
  182. data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +5 -5
  183. data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +3 -3
  184. data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +4 -4
  185. data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +8 -5
  186. data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +6 -33
  187. data/spec/lib/auth0/api/v2/actions_spec.rb +312 -0
  188. data/spec/lib/auth0/api/v2/grants_spec.rb +91 -0
  189. data/spec/lib/auth0/client_spec.rb +3 -3
  190. data/spec/lib/auth0/mixins/httpproxy_spec.rb +104 -0
  191. data/spec/lib/auth0/mixins/initializer_spec.rb +84 -4
  192. data/spec/lib/auth0/mixins/token_management_spec.rb +125 -0
  193. data/spec/spec_helper.rb +1 -1
  194. data/spec/support/dummy_class_for_proxy.rb +1 -0
  195. data/spec/support/dummy_class_for_tokens.rb +17 -0
  196. metadata +16 -25
  197. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_check_if_ip_is_blocked/should_return_200_response_code.yml +0 -65
  198. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_remove_ip_block/should_remove_an_IP_successfully.yml +0 -60
  199. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_first_page_of_one_result.yml +0 -66
  200. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_delete_device_credential/should_delete_the_test_credential_without_an_error.yml +0 -54
  201. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/_filter_by_type/should_exclude_the_test_credential.yml +0 -59
  202. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_have_at_least_1_entry.yml +0 -62
  203. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_include_the_test_credential.yml +0 -62
  204. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +0 -54
  205. data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +0 -17
  206. data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +0 -128
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3d59041ebfdd2dfcbc326ea1ea9e416796afd2818607014757d90266ed16c07
4
- data.tar.gz: e9e950591d2027fc475fa437f144dea929a724eeea94bd9491b0a0af5095b271
3
+ metadata.gz: dd91396b4162ecec7d480c49ad4ab50568a7a116a0bd8be32edd188621d11793
4
+ data.tar.gz: d2584f0f09793611513c23334216237a8adbb923a08f1025683aa6a525e427b7
5
5
  SHA512:
6
- metadata.gz: 4f6733b62fa9839d0c03f4a9b641c5f86ffd3a47b7961d76156881f95f34a5ca0cf63c765fccc124418affaca78f34d72e899d5592eddf690f18d4d939b3f9fe
7
- data.tar.gz: b9bf5d5f1e570a595388fbd3555ca23d6964c6a445d150b233f51dd2a19da30ef4a906825567da350a6411adbdee0a2af562953a3034e41f0c714a0ad0a4d04a
6
+ metadata.gz: 30fac0340e6481da011ab2d99a1c87f9d4e66557357412d1a67d2dc34f4c1b18172af80ff5a04cfcf03ca2497470e7de51f8e5b3ba292ca44b17fbbcd0ab3e0f
7
+ data.tar.gz: f47a705a3223ba68fb4cd9857cb30817ff0c81981e97a9efd250e92f05b62bba37976a7ab7dd2ab666dd354822e032eb6873221f9e7d35ffaf3b59020518202c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Change Log
2
2
 
3
+ ## [v5.6.0](https://github.com/auth0/ruby-auth0/tree/v5.6.0) (2021-09-14)
4
+
5
+ [Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.5.0..v5.6.0)
6
+
7
+ **Added**
8
+
9
+ - New Actions endpoints CH: Added review:medium. [\#293](https://github.com/auth0/ruby-auth0/pull/293) ([davidpatrick](https://github.com/davidpatrick))
10
+
11
+ - Updates rest-client to 2.1. [\#296](https://github.com/auth0/ruby-auth0/pull/296) ([davidpatrick](https://github.com/davidpatrick))
12
+
13
+ - Add New Grants. [\#295](https://github.com/auth0/ruby-auth0/pull/295) ([Norio4](https://github.com/Norio4))
14
+
15
+ - Add token cache and renew functionality for API requests [\#301](https://github.com/auth0/ruby-auth0/pull/295) ([stevehobbsdev](https://github.com/stevehobbsdev))
16
+
17
+ - Optional `client_id` parameter for `reset_password` [\#299](https://github.com/auth0/ruby-auth0/pull/295) ([DJRH](https://github.com/DJRH))
18
+
19
+ **Deprecated**
20
+
21
+ - Deprecate change_password in favor of reset_password. [\#297](https://github.com/auth0/ruby-auth0/pull/297) ([davidpatrick](https://github.com/davidpatrick))
22
+
3
23
  ## [v5.5.0](https://github.com/auth0/ruby-auth0/tree/v5.5.0) (2021-08-06)
4
24
 
5
25
  [Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.4.0..v5.5.0)
data/Gemfile CHANGED
@@ -15,4 +15,5 @@ group :test do
15
15
  gem 'vcr', require: false
16
16
  gem 'codecov', require: false
17
17
  gem 'simplecov'
18
+ gem 'timecop', require: false
18
19
  end
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,7 +16,7 @@ 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'
@@ -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
@@ -0,0 +1,49 @@
1
+ module Auth0
2
+ module Api
3
+ module V2
4
+ module Grants
5
+ attr_reader :grants_path
6
+
7
+ # Retrieve the grants associated with your account.
8
+ # @see https://auth0.com/docs/api/management/v2#!/Grants/get_grants
9
+ # @param client_id [string] The client_id of the grants to retrieve.
10
+ # @param user_id [string] The user_id of the grants to retrieve.
11
+ # @param audience [string] The audience of the grants to retrieve.
12
+ # @param page [int] The page index of the results to return. First page is 0.
13
+ # @param per_page [int] The number of results per page. Paging is disabled if parameter not sent.
14
+ # @param include_totals [boolean] Return results inside an object that contains the total result count (true) or as a direct array of results (false, default).
15
+ # @return [json] Returns the grants.
16
+ def grants(client_id: nil, user_id: nil, audience: nil, page: nil, per_page: nil, include_totals: nil)
17
+ request_params = {
18
+ client_id: client_id,
19
+ user_id: user_id,
20
+ audience: audience,
21
+ page: page,
22
+ per_page: per_page,
23
+ include_totals: include_totals
24
+ }
25
+ get(grants_path, request_params)
26
+ end
27
+ alias get_all_grants grants
28
+
29
+ # Delete a grant associated with your account.
30
+ # @see https://auth0.com/docs/api/management/v2#!/Grants/delete_grants_by_id
31
+ # @param id [string] The id of the grant to delete.
32
+ # @param user_id [string] The user_id of the grant to delete.
33
+ def delete_grant(id, user_id)
34
+ raise Auth0::InvalidParameter, 'Must specify a grant id as id' if id.to_s.empty?
35
+ raise Auth0::InvalidParameter, 'Must specify a user id' if user_id.to_s.empty?
36
+ path = "#{grants_path}/#{id}?user_id=#{user_id}"
37
+ delete(path)
38
+ end
39
+
40
+ private
41
+
42
+ # Grants API path
43
+ def grants_path
44
+ @grants_path ||= '/api/v2/grants'
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
data/lib/auth0/api/v2.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'auth0/api/v2/grants'
2
+ require 'auth0/api/v2/actions'
1
3
  require 'auth0/api/v2/anomaly'
2
4
  require 'auth0/api/v2/blacklists'
3
5
  require 'auth0/api/v2/branding'
@@ -26,6 +28,8 @@ module Auth0
26
28
  module Api
27
29
  # https://auth0.com/docs/apiv2
28
30
  module V2
31
+ include Auth0::Api::V2::Grants
32
+ include Auth0::Api::V2::Actions
29
33
  include Auth0::Api::V2::Anomaly
30
34
  include Auth0::Api::V2::Blacklists
31
35
  include Auth0::Api::V2::Branding
@@ -40,8 +40,20 @@ module Auth0
40
40
  class MissingClientId < Auth0::Exception; end
41
41
  # exception for unset organization_id
42
42
  class MissingOrganizationId < Auth0::Exception; end
43
+ # exception for unset trigger_id
44
+ class MissingTriggerId < Auth0::Exception; end
45
+ # exception for unset action_name
46
+ class MissingActionName < Auth0::Exception; end
47
+ # exception for unset action_id
48
+ class MissingActionId < Auth0::Exception; end
49
+ # exception for unset execution_id
50
+ class MissingExecutionId < Auth0::Exception; end
51
+ # exception for unset trigger_id
52
+ class MissingTriggerId < Auth0::Exception; end
43
53
  # exception for an unset parameter
44
54
  class MissingParameter < Auth0::Exception; end
55
+ # exception for unset version_id
56
+ class MissingVersionId < Auth0::Exception; end
45
57
  # Api v2 access denied
46
58
  class AccessDenied < Auth0::HTTPError; end
47
59
  # Invalid parameter passed, e.g. empty where ID is required
@@ -1,5 +1,4 @@
1
1
  Auth0::ApiToken = Struct.new :access_token, :scope, :expires_in do
2
-
3
2
  def token
4
3
  access_token
5
4
  end
@@ -18,10 +18,9 @@ module Auth0
18
18
  %i(get post post_file put patch delete delete_with_body).each do |method|
19
19
  define_method(method) do |uri, body = {}, extra_headers = {}|
20
20
  body = body.delete_if { |_, v| v.nil? }
21
-
22
- Retryable.retryable(retry_options) do
23
- request(method, uri, body, extra_headers)
24
- end
21
+ token = get_token()
22
+ authorization_header(token) unless token.nil?
23
+ request_with_retry(method, uri, body, extra_headers)
25
24
  end
26
25
  end
27
26
 
@@ -65,7 +64,13 @@ module Auth0
65
64
  body
66
65
  end
67
66
 
68
- def request(method, uri, body, extra_headers)
67
+ def request_with_retry(method, uri, body = {}, extra_headers = {})
68
+ Retryable.retryable(retry_options) do
69
+ request(method, uri, body, extra_headers)
70
+ end
71
+ end
72
+
73
+ def request(method, uri, body = {}, extra_headers = {})
69
74
  result = if method == :get
70
75
  # Mutate the headers property to add parameters.
71
76
  add_headers({params: body})
@@ -59,9 +59,7 @@ module Auth0
59
59
 
60
60
  def initialize_v2(options)
61
61
  extend Auth0::Api::V2
62
- @token = options[:access_token] || options[:token]
63
- api_identifier = options[:api_identifier] || "https://#{@domain}/api/v2/"
64
- @token = api_token(audience: api_identifier).token if @token.nil? && @client_id && @client_secret
62
+ initialize_token(options)
65
63
  end
66
64
 
67
65
  def api_v2?(options)
@@ -0,0 +1,32 @@
1
+ module Auth0
2
+ module Mixins
3
+ module TokenManagement
4
+
5
+ private
6
+
7
+ def initialize_token(options)
8
+ @token = options[:access_token] || options[:token]
9
+
10
+ # default expiry to an hour if a token was given but no expires_at
11
+ @token_expires_at = @token ? options[:token_expires_at] || Time.now.to_i + 3600 : nil
12
+
13
+ @audience = options[:api_identifier] || "https://#{@domain}/api/v2/"
14
+ get_token() if @token.nil?
15
+ end
16
+
17
+ def get_token
18
+ has_expired = @token && @token_expires_at ? @token_expires_at < (Time.now.to_i + 10) : false
19
+
20
+ if (@token.nil? || has_expired) && @client_id && @client_secret
21
+ response = api_token(audience: @audience)
22
+ @token = response.token
23
+ @token_expires_at = response.expires_in ? Time.now.to_i + response.expires_in : nil
24
+
25
+ @token
26
+ else
27
+ @token
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -335,7 +335,7 @@ module Auth0
335
335
  private
336
336
 
337
337
  def fetch_jwks
338
- result = get(@jwks_url)
338
+ result = request_with_retry(:get, @jwks_url, {}, {})
339
339
  @did_fetch_jwks = result.is_a?(Hash) && result.key?('keys')
340
340
  result if @did_fetch_jwks
341
341
  end
data/lib/auth0/mixins.rb CHANGED
@@ -9,6 +9,7 @@ require 'auth0/mixins/httpproxy'
9
9
  require 'auth0/mixins/initializer'
10
10
  require 'auth0/mixins/permission_struct'
11
11
  require 'auth0/mixins/validation'
12
+ require 'auth0/mixins/token_management'
12
13
 
13
14
  require 'auth0/api/authentication_endpoints'
14
15
  require 'auth0/api/v2'
@@ -17,6 +18,7 @@ module Auth0
17
18
  # Collecting dependencies here
18
19
  module Mixins
19
20
  include Auth0::Mixins::Headers
21
+ include Auth0::Mixins::TokenManagement
20
22
  include Auth0::Mixins::HTTPProxy
21
23
  include Auth0::Mixins::Initializer
22
24
  end
data/lib/auth0/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # current version of gem
2
2
  module Auth0
3
- VERSION = '5.5.0'.freeze
3
+ VERSION = '5.6.0'.freeze
4
4
  end