auth0 5.3.0 → 5.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.shiprc +7 -0
- data/CHANGELOG.md +109 -31
- data/Gemfile +1 -0
- data/README.md +10 -8
- data/auth0.gemspec +2 -1
- data/lib/auth0/api/authentication_endpoints.rb +40 -16
- data/lib/auth0/api/v2/actions.rb +210 -0
- data/lib/auth0/api/v2/branding.rb +0 -1
- data/lib/auth0/api/v2/grants.rb +49 -0
- data/lib/auth0/api/v2.rb +4 -0
- data/lib/auth0/exception.rb +12 -0
- data/lib/auth0/mixins/api_token_struct.rb +0 -1
- data/lib/auth0/mixins/httpproxy.rb +77 -34
- data/lib/auth0/mixins/initializer.rb +2 -3
- data/lib/auth0/mixins/token_management.rb +32 -0
- data/lib/auth0/mixins/validation.rb +1 -1
- data/lib/auth0/mixins.rb +2 -0
- data/lib/auth0/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +53 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +49 -18
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +49 -18
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +46 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +49 -79
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +49 -80
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +74 -21
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +53 -14
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +106 -48
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +62 -19
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +57 -22
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +37 -19
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +38 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +42 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +42 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +39 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +44 -82
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +39 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +43 -56
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +39 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +43 -57
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +43 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +236 -96
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +52 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +39 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +235 -96
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +43 -57
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +45 -82
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +15 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +15 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +15 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +14 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +14 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +14 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +15 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +15 -15
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +15 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +29 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +15 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +16 -17
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +40 -32
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +40 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +40 -32
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +37 -19
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +34 -16
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +36 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +36 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +36 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +36 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +37 -19
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +38 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +76 -46
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +46 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +84 -48
- 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
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +116 -71
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +76 -39
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +76 -43
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +43 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +224 -196
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +224 -196
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +38 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +39 -39
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +41 -40
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +38 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +229 -189
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +40 -32
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +39 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +39 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +146 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +146 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +131 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +40 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +39 -32
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +38 -31
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +42 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +38 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +37 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +37 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +37 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +37 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +37 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +39 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +37 -30
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +38 -31
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +39 -31
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +38 -31
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +36 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +36 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +40 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +40 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +39 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +40 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +80 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +82 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +59 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +68 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +78 -49
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +84 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +40 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +42 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +42 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +38 -23
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +38 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +72 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +38 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +38 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +72 -58
- 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
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +39 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +39 -26
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +40 -32
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +38 -20
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +39 -35
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +37 -25
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +36 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +36 -24
- 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
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +38 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +36 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +38 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +38 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +39 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +39 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +37 -28
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +42 -30
- 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
- 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
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +36 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +36 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +36 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +36 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +37 -27
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +38 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +38 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +39 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +38 -29
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +36 -24
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +42 -28
- data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +0 -9
- data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +3 -3
- data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +0 -31
- data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +4 -4
- data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +5 -5
- data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +3 -3
- data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +4 -4
- data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +8 -5
- data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +6 -33
- data/spec/lib/auth0/api/v2/actions_spec.rb +312 -0
- data/spec/lib/auth0/api/v2/grants_spec.rb +91 -0
- data/spec/lib/auth0/client_spec.rb +3 -3
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +320 -25
- data/spec/lib/auth0/mixins/initializer_spec.rb +87 -0
- data/spec/lib/auth0/mixins/token_management_spec.rb +125 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/dummy_class_for_proxy.rb +2 -2
- data/spec/support/dummy_class_for_tokens.rb +17 -0
- metadata +31 -30
- data/.yardoc/checksums +0 -22
- data/.yardoc/complete +0 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_check_if_ip_is_blocked/should_return_200_response_code.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_remove_ip_block/should_remove_an_IP_successfully.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_first_page_of_one_result.yml +0 -66
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_delete_device_credential/should_delete_the_test_credential_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/_filter_by_type/should_exclude_the_test_credential.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_have_at_least_1_entry.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_include_the_test_credential.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +0 -54
- data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +0 -17
- data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +0 -128
|
@@ -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
|
|
@@ -35,7 +35,6 @@ module Auth0
|
|
|
35
35
|
|
|
36
36
|
# Delete template for New Universal Login Experience
|
|
37
37
|
# @see https://auth0.com/docs/api/management/v2/#!/Branding/delete_universal_login
|
|
38
|
-
# @param rule_id [string] The id of the rule to delete.
|
|
39
38
|
def delete_branding_templates_for_universal_login
|
|
40
39
|
delete(templates_path)
|
|
41
40
|
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}"
|
|
37
|
+
delete(path, user_id: user_id)
|
|
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
|
data/lib/auth0/exception.rb
CHANGED
|
@@ -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,51 +1,53 @@
|
|
|
1
1
|
require "addressable/uri"
|
|
2
|
+
require "retryable"
|
|
3
|
+
require_relative "../exception.rb"
|
|
2
4
|
|
|
3
5
|
module Auth0
|
|
4
6
|
module Mixins
|
|
5
7
|
# here's the proxy for Rest calls based on rest-client, we're building all request on that gem
|
|
6
8
|
# for now, if you want to feel free to use your own http client
|
|
7
9
|
module HTTPProxy
|
|
8
|
-
attr_accessor :headers, :base_uri, :timeout
|
|
10
|
+
attr_accessor :headers, :base_uri, :timeout, :retry_count
|
|
11
|
+
DEAFULT_RETRIES = 3
|
|
12
|
+
MAX_ALLOWED_RETRIES = 10
|
|
13
|
+
MAX_REQUEST_RETRY_JITTER = 250
|
|
14
|
+
MAX_REQUEST_RETRY_DELAY = 1000
|
|
15
|
+
MIN_REQUEST_RETRY_DELAY = 100
|
|
9
16
|
|
|
10
17
|
# proxying requests from instance methods to HTTP class methods
|
|
11
18
|
%i(get post post_file put patch delete delete_with_body).each do |method|
|
|
12
|
-
define_method(method) do |
|
|
13
|
-
safe_path = Addressable::URI.escape(path)
|
|
19
|
+
define_method(method) do |uri, body = {}, extra_headers = {}|
|
|
14
20
|
body = body.delete_if { |_, v| v.nil? }
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
# Merge custom headers into existing ones for this req.
|
|
19
|
-
# This prevents future calls from using them.
|
|
20
|
-
get_headers = headers.merge extra_headers
|
|
21
|
-
# Make the call with extra_headers, if provided.
|
|
22
|
-
call(:get, url(safe_path), timeout, get_headers)
|
|
23
|
-
elsif method == :delete
|
|
24
|
-
call(:delete, url(safe_path), timeout, add_headers({params: body}))
|
|
25
|
-
elsif method == :delete_with_body
|
|
26
|
-
call(:delete, url(safe_path), timeout, headers, body.to_json)
|
|
27
|
-
elsif method == :post_file
|
|
28
|
-
body.merge!(multipart: true)
|
|
29
|
-
# Ignore the default Content-Type headers and let the HTTP client define them
|
|
30
|
-
post_file_headers = headers.slice(*headers.keys - ['Content-Type'])
|
|
31
|
-
# Actual call with the altered headers
|
|
32
|
-
call(:post, url(safe_path), timeout, post_file_headers, body)
|
|
33
|
-
else
|
|
34
|
-
call(method, url(safe_path), timeout, headers, body.to_json)
|
|
35
|
-
end
|
|
36
|
-
case result.code
|
|
37
|
-
when 200...226 then safe_parse_json(result.body)
|
|
38
|
-
when 400 then raise Auth0::BadRequest.new(result.body, code: result.code, headers: result.headers)
|
|
39
|
-
when 401 then raise Auth0::Unauthorized.new(result.body, code: result.code, headers: result.headers)
|
|
40
|
-
when 403 then raise Auth0::AccessDenied.new(result.body, code: result.code, headers: result.headers)
|
|
41
|
-
when 404 then raise Auth0::NotFound.new(result.body, code: result.code, headers: result.headers)
|
|
42
|
-
when 429 then raise Auth0::RateLimitEncountered.new(result.body, code: result.code, headers: result.headers)
|
|
43
|
-
when 500 then raise Auth0::ServerError.new(result.body, code: result.code, headers: result.headers)
|
|
44
|
-
else raise Auth0::Unsupported.new(result.body, code: result.code, headers: result.headers)
|
|
45
|
-
end
|
|
21
|
+
token = get_token()
|
|
22
|
+
authorization_header(token) unless token.nil?
|
|
23
|
+
request_with_retry(method, uri, body, extra_headers)
|
|
46
24
|
end
|
|
47
25
|
end
|
|
48
26
|
|
|
27
|
+
def retry_options
|
|
28
|
+
sleep_timer = lambda do |attempt|
|
|
29
|
+
wait = 1000 * 2**attempt # Exponential delay with each subsequent request attempt.
|
|
30
|
+
wait += rand(wait..wait+MAX_REQUEST_RETRY_JITTER) # Add jitter to the delay window.
|
|
31
|
+
wait = [MAX_REQUEST_RETRY_DELAY, wait].min # Cap delay at MAX_REQUEST_RETRY_DELAY.
|
|
32
|
+
wait = [MIN_REQUEST_RETRY_DELAY, wait].max # Ensure delay is no less than MIN_REQUEST_RETRY_DELAY.
|
|
33
|
+
wait / 1000.to_f.round(2) # convert ms to seconds
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
tries = 1 + [Integer(retry_count || DEAFULT_RETRIES), MAX_ALLOWED_RETRIES].min # Cap retries at MAX_ALLOWED_RETRIES
|
|
37
|
+
|
|
38
|
+
{
|
|
39
|
+
tries: tries,
|
|
40
|
+
sleep: sleep_timer,
|
|
41
|
+
on: Auth0::RateLimitEncountered
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def encode_uri(uri)
|
|
46
|
+
# if a base_uri is set then the uri can be encoded as a path
|
|
47
|
+
path = base_uri ? Addressable::URI.new(path: uri).normalized_path : Addressable::URI.escape(uri)
|
|
48
|
+
url(path)
|
|
49
|
+
end
|
|
50
|
+
|
|
49
51
|
def url(path)
|
|
50
52
|
"#{base_uri}#{path}"
|
|
51
53
|
end
|
|
@@ -62,6 +64,47 @@ module Auth0
|
|
|
62
64
|
body
|
|
63
65
|
end
|
|
64
66
|
|
|
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 = {})
|
|
74
|
+
result = if method == :get
|
|
75
|
+
# Mutate the headers property to add parameters.
|
|
76
|
+
add_headers({params: body})
|
|
77
|
+
# Merge custom headers into existing ones for this req.
|
|
78
|
+
# This prevents future calls from using them.
|
|
79
|
+
get_headers = headers.merge extra_headers
|
|
80
|
+
# Make the call with extra_headers, if provided.
|
|
81
|
+
call(:get, encode_uri(uri), timeout, get_headers)
|
|
82
|
+
elsif method == :delete
|
|
83
|
+
call(:delete, encode_uri(uri), timeout, add_headers({params: body}))
|
|
84
|
+
elsif method == :delete_with_body
|
|
85
|
+
call(:delete, encode_uri(uri), timeout, headers, body.to_json)
|
|
86
|
+
elsif method == :post_file
|
|
87
|
+
body.merge!(multipart: true)
|
|
88
|
+
# Ignore the default Content-Type headers and let the HTTP client define them
|
|
89
|
+
post_file_headers = headers.slice(*headers.keys - ['Content-Type'])
|
|
90
|
+
# Actual call with the altered headers
|
|
91
|
+
call(:post, encode_uri(uri), timeout, post_file_headers, body)
|
|
92
|
+
else
|
|
93
|
+
call(method, encode_uri(uri), timeout, headers, body.to_json)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
case result.code
|
|
97
|
+
when 200...226 then safe_parse_json(result.body)
|
|
98
|
+
when 400 then raise Auth0::BadRequest.new(result.body, code: result.code, headers: result.headers)
|
|
99
|
+
when 401 then raise Auth0::Unauthorized.new(result.body, code: result.code, headers: result.headers)
|
|
100
|
+
when 403 then raise Auth0::AccessDenied.new(result.body, code: result.code, headers: result.headers)
|
|
101
|
+
when 404 then raise Auth0::NotFound.new(result.body, code: result.code, headers: result.headers)
|
|
102
|
+
when 429 then raise Auth0::RateLimitEncountered.new(result.body, code: result.code, headers: result.headers)
|
|
103
|
+
when 500 then raise Auth0::ServerError.new(result.body, code: result.code, headers: result.headers)
|
|
104
|
+
else raise Auth0::Unsupported.new(result.body, code: result.code, headers: result.headers)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
65
108
|
def call(method, url, timeout, headers, body = nil)
|
|
66
109
|
RestClient::Request.execute(
|
|
67
110
|
method: method,
|
|
@@ -15,6 +15,7 @@ module Auth0
|
|
|
15
15
|
@base_uri = base_url(options)
|
|
16
16
|
@headers = client_headers
|
|
17
17
|
@timeout = options[:timeout] || 10
|
|
18
|
+
@retry_count = options[:retry_count]
|
|
18
19
|
extend Auth0::Api::AuthenticationEndpoints
|
|
19
20
|
@client_id = options[:client_id]
|
|
20
21
|
@client_secret = options[:client_secret]
|
|
@@ -58,9 +59,7 @@ module Auth0
|
|
|
58
59
|
|
|
59
60
|
def initialize_v2(options)
|
|
60
61
|
extend Auth0::Api::V2
|
|
61
|
-
|
|
62
|
-
api_identifier = options[:api_identifier] || "https://#{@domain}/api/v2/"
|
|
63
|
-
@token = api_token(audience: api_identifier).token if @token.nil? && @client_id && @client_secret
|
|
62
|
+
initialize_token(options)
|
|
64
63
|
end
|
|
65
64
|
|
|
66
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
|
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
|
@@ -5,22 +5,22 @@ http_interactions:
|
|
|
5
5
|
uri: https://auth0-sdk-tests.auth0.com/dbconnections/change_password
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
|
-
string: '{"email":"rubytest-username-1@auth0.com","password":"","connection":"Username-Password-Authentication","client_id":"2cnWuug6zaFX1j0ge1P99jAUn0F4XSuI"}'
|
|
8
|
+
string: '{"email":"rubytest-210908-username-1@auth0.com","password":"","connection":"Username-Password-Authentication","client_id":"2cnWuug6zaFX1j0ge1P99jAUn0F4XSuI"}'
|
|
9
9
|
headers:
|
|
10
10
|
Accept:
|
|
11
11
|
- "*/*"
|
|
12
|
-
Accept-Encoding:
|
|
13
|
-
- gzip, deflate
|
|
14
12
|
User-Agent:
|
|
15
|
-
-
|
|
13
|
+
- rest-client/2.1.0 (darwin19.6.0 x86_64) ruby/2.7.0p0
|
|
16
14
|
Content-Type:
|
|
17
15
|
- application/json
|
|
18
16
|
Auth0-Client:
|
|
19
|
-
-
|
|
17
|
+
- eyJuYW1lIjoicnVieS1hdXRoMCIsInZlcnNpb24iOiI1LjUuMCIsImVudiI6eyJydWJ5IjoiMi43LjAifX0=
|
|
20
18
|
Authorization:
|
|
21
19
|
- Bearer API_TOKEN
|
|
22
20
|
Content-Length:
|
|
23
|
-
- '
|
|
21
|
+
- '157'
|
|
22
|
+
Accept-Encoding:
|
|
23
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
|
24
24
|
Host:
|
|
25
25
|
- auth0-sdk-tests.auth0.com
|
|
26
26
|
response:
|
|
@@ -29,35 +29,65 @@ http_interactions:
|
|
|
29
29
|
message: OK
|
|
30
30
|
headers:
|
|
31
31
|
Date:
|
|
32
|
-
-
|
|
32
|
+
- Fri, 03 Sep 2021 20:16:11 GMT
|
|
33
33
|
Content-Type:
|
|
34
34
|
- text/html; charset=utf-8
|
|
35
35
|
Transfer-Encoding:
|
|
36
36
|
- chunked
|
|
37
37
|
Connection:
|
|
38
38
|
- keep-alive
|
|
39
|
+
Cf-Ray:
|
|
40
|
+
- 6891a783fa1aeb79-LAX
|
|
41
|
+
Access-Control-Allow-Origin:
|
|
42
|
+
- "*"
|
|
43
|
+
Cache-Control:
|
|
44
|
+
- private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-transform
|
|
45
|
+
Etag:
|
|
46
|
+
- W/"34-isurgRF3drpbztqj/kuLX3wcQN4"
|
|
47
|
+
Set-Cookie:
|
|
48
|
+
- did=s%3Av0%3Ac7c670e0-0cf3-11ec-8fcc-b1ac7dd7e8e6.SMKCwsFbZxS1wgznun%2Bc4MrNN8Yb7eXSJYergKRIbm4;
|
|
49
|
+
Max-Age=31557600; Path=/; Expires=Sun, 04 Sep 2022 02:16:10 GMT; HttpOnly;
|
|
50
|
+
Secure; SameSite=None
|
|
51
|
+
- did_compat=s%3Av0%3Ac7c670e0-0cf3-11ec-8fcc-b1ac7dd7e8e6.SMKCwsFbZxS1wgznun%2Bc4MrNN8Yb7eXSJYergKRIbm4;
|
|
52
|
+
Max-Age=31557600; Path=/; Expires=Sun, 04 Sep 2022 02:16:11 GMT; HttpOnly;
|
|
53
|
+
Secure
|
|
54
|
+
Strict-Transport-Security:
|
|
55
|
+
- max-age=31536000
|
|
39
56
|
Vary:
|
|
40
|
-
- Accept-Encoding
|
|
57
|
+
- Accept-Encoding, Origin
|
|
58
|
+
Cf-Cache-Status:
|
|
59
|
+
- DYNAMIC
|
|
60
|
+
Access-Control-Allow-Credentials:
|
|
61
|
+
- 'false'
|
|
62
|
+
Access-Control-Expose-Headers:
|
|
63
|
+
- X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
|
|
64
|
+
Expect-Ct:
|
|
65
|
+
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
|
|
66
|
+
Ot-Baggage-Auth0-Request-Id:
|
|
67
|
+
- 6891a783fa1aeb79
|
|
68
|
+
Ot-Tracer-Sampled:
|
|
69
|
+
- 'true'
|
|
70
|
+
Ot-Tracer-Spanid:
|
|
71
|
+
- 73ed236e3e952604
|
|
72
|
+
Ot-Tracer-Traceid:
|
|
73
|
+
- 75dde96b4f4143d1
|
|
41
74
|
X-Auth0-Requestid:
|
|
42
|
-
-
|
|
75
|
+
- 46bd91e5c530f4b3a9f7
|
|
76
|
+
X-Content-Type-Options:
|
|
77
|
+
- nosniff
|
|
43
78
|
X-Ratelimit-Limit:
|
|
44
79
|
- '10'
|
|
45
80
|
X-Ratelimit-Remaining:
|
|
46
81
|
- '9'
|
|
47
82
|
X-Ratelimit-Reset:
|
|
48
|
-
- '
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
|
|
54
|
-
- noindex, nofollow, nosnippet, noarchive
|
|
55
|
-
Content-Encoding:
|
|
56
|
-
- gzip
|
|
83
|
+
- '1630700231'
|
|
84
|
+
Server:
|
|
85
|
+
- cloudflare
|
|
86
|
+
Alt-Svc:
|
|
87
|
+
- h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443";
|
|
88
|
+
ma=86400
|
|
57
89
|
body:
|
|
58
90
|
encoding: ASCII-8BIT
|
|
59
|
-
string:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
recorded_at: Wed, 10 Oct 2018 23:19:59 GMT
|
|
63
|
-
recorded_with: VCR 4.0.0
|
|
91
|
+
string: We've just sent you an email to reset your password.
|
|
92
|
+
recorded_at: Fri, 03 Sep 2021 20:16:10 GMT
|
|
93
|
+
recorded_with: VCR 6.0.0
|