auth0 4.4.0 → 5.1.2
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/.bundle/config +3 -2
- data/.circleci/config.yml +44 -0
- data/.env.example +2 -0
- data/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/config.yml +8 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +39 -0
- data/.github/ISSUE_TEMPLATE/report_a_bug.md +55 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +35 -0
- data/.github/stale.yml +20 -0
- data/.gitignore +1 -2
- data/.rubocop.yml +2 -0
- data/.yardoc/checksums +22 -0
- 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/CHANGELOG.md +334 -19
- data/CODE_OF_CONDUCT.md +3 -0
- data/DEPLOYMENT.md +56 -9
- data/Gemfile +10 -3
- data/README.md +260 -37
- data/Rakefile +4 -23
- data/auth0.gemspec +10 -9
- data/codecov.yml +22 -0
- data/examples/ruby-api/.gitignore +0 -6
- data/lib/auth0/algorithm.rb +5 -0
- data/lib/auth0/api/authentication_endpoints.rb +244 -237
- data/lib/auth0/api/v2/anomaly.rb +36 -0
- data/lib/auth0/api/v2/branding.rb +66 -0
- data/lib/auth0/api/v2/client_grants.rb +14 -5
- data/lib/auth0/api/v2/clients.rb +9 -6
- data/lib/auth0/api/v2/connections.rb +19 -7
- data/lib/auth0/api/v2/device_credentials.rb +5 -4
- data/lib/auth0/api/v2/guardian.rb +142 -0
- data/lib/auth0/api/v2/jobs.rb +77 -13
- data/lib/auth0/api/v2/log_streams.rb +78 -0
- data/lib/auth0/api/v2/logs.rb +11 -11
- data/lib/auth0/api/v2/organizations.rb +335 -0
- data/lib/auth0/api/v2/prompts.rb +70 -0
- data/lib/auth0/api/v2/resource_servers.rb +32 -8
- data/lib/auth0/api/v2/roles.rb +172 -0
- data/lib/auth0/api/v2/rules.rb +6 -2
- data/lib/auth0/api/v2/tickets.rb +55 -8
- data/lib/auth0/api/v2/users.rb +168 -28
- data/lib/auth0/api/v2/users_by_email.rb +3 -2
- data/lib/auth0/api/v2.rb +16 -2
- data/lib/auth0/client.rb +1 -1
- data/lib/auth0/exception.rb +34 -9
- data/lib/auth0/mixins/access_token_struct.rb +20 -0
- data/lib/auth0/mixins/api_token_struct.rb +10 -0
- data/lib/auth0/mixins/headers.rb +35 -0
- data/lib/auth0/mixins/httpproxy.rb +37 -14
- data/lib/auth0/mixins/initializer.rb +10 -26
- data/lib/auth0/mixins/permission_struct.rb +3 -0
- data/lib/auth0/mixins/validation.rb +346 -0
- data/lib/auth0/mixins.rb +9 -1
- data/lib/auth0/version.rb +1 -1
- data/lib/auth0.rb +1 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +55 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +117 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +119 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +57 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +55 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +118 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +55 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +58 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_check_if_ip_is_blocked/should_return_200_response_code.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_remove_ip_block/should_remove_an_IP_successfully.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +56 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_first_page_of_one_result.yml +66 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +118 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +91 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +92 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +132 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +132 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +94 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +118 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +110 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +66 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +68 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_delete_device_credential/should_delete_the_test_credential_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/_filter_by_type/should_exclude_the_test_credential.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_have_at_least_1_entry.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_include_the_test_credential.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +68 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +51 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +117 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +116 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_create_a_new_verification_email_job.yml +119 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +175 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +109 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +110 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +265 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +265 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +75 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +76 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +258 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +68 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +128 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +64 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +59 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +95 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +61 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +96 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +96 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +63 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +68 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user_provider/should_attempt_to_delete_the_MFA_provider_for_the_User.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +68 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +62 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +69 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v2_search_engine_query.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v3_search_engine_query.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +65 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +67 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +60 -0
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +60 -0
- data/spec/integration/lib/auth0/api/api_authentication_spec.rb +96 -54
- data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +17 -0
- data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +18 -5
- data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +46 -33
- data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +115 -61
- data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +117 -103
- data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +101 -58
- data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +72 -77
- data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +113 -60
- data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +46 -38
- data/spec/integration/lib/auth0/api/v2/api_resource_servers_spec.rb +110 -40
- data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +145 -0
- data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +119 -62
- data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +11 -14
- data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +40 -34
- data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +42 -28
- data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +1 -1
- data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +252 -120
- data/spec/integration/lib/auth0/auth0_client_spec.rb +32 -26
- data/spec/lib/auth0/api/v2/anomaly_spec.rb +26 -0
- data/spec/lib/auth0/api/v2/branding_spec.rb +70 -0
- data/spec/lib/auth0/api/v2/client_grants_spec.rb +34 -2
- data/spec/lib/auth0/api/v2/clients_spec.rb +50 -5
- data/spec/lib/auth0/api/v2/connections_spec.rb +49 -1
- data/spec/lib/auth0/api/v2/guardian_spec.rb +154 -0
- data/spec/lib/auth0/api/v2/jobs_spec.rb +109 -6
- data/spec/lib/auth0/api/v2/log_streams_spec.rb +84 -0
- data/spec/lib/auth0/api/v2/organizations_spec.rb +593 -0
- data/spec/lib/auth0/api/v2/prompts_spec.rb +88 -0
- data/spec/lib/auth0/api/v2/resource_servers_spec.rb +23 -0
- data/spec/lib/auth0/api/v2/roles_spec.rb +362 -0
- data/spec/lib/auth0/api/v2/rules_spec.rb +23 -1
- data/spec/lib/auth0/api/v2/tickets_spec.rb +95 -5
- data/spec/lib/auth0/api/v2/users_spec.rb +465 -61
- data/spec/lib/auth0/client_spec.rb +196 -18
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +83 -4
- data/spec/lib/auth0/mixins/initializer_spec.rb +1 -0
- data/spec/lib/auth0/mixins/validation_spec.rb +498 -0
- data/spec/spec_helper.rb +54 -11
- data/spec/support/credentials.rb +6 -18
- data/spec/support/dummy_class.rb +7 -3
- data/spec/support/dummy_class_for_proxy.rb +1 -0
- data/spec/support/stub_response.rb +1 -1
- metadata +497 -53
- data/.travis.yml +0 -18
- data/build_travis.sh +0 -7
- data/deploy_documentation.sh +0 -29
- data/doc_config/templates/default/fulldoc/html/css/full_list.css +0 -79
- data/doc_config/templates/default/fulldoc/html/css/style.css +0 -546
- data/doc_config/templates/default/layout/html/breadcrumb.erb +0 -11
- data/doc_config/templates/default/layout/html/footer.erb +0 -115
- data/doc_config/templates/default/layout/html/headers.erb +0 -17
- data/doc_config/templates/default/layout/html/layout.erb +0 -27
- data/lib/auth0/api/v1/clients.rb +0 -48
- data/lib/auth0/api/v1/connections.rb +0 -53
- data/lib/auth0/api/v1/logs.rb +0 -34
- data/lib/auth0/api/v1/rules.rb +0 -45
- data/lib/auth0/api/v1/users.rb +0 -164
- data/lib/auth0/api/v1.rb +0 -19
- data/spec/lib/auth0/api/authentication_endpoints_spec.rb +0 -348
- data/spec/spec_helper_full.rb +0 -45
- data/spec/spec_helper_unit.rb +0 -3
@@ -1,314 +1,276 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# rubocop:disable Metrics/ModuleLength
|
3
|
+
|
4
|
+
require 'jwt'
|
5
|
+
|
2
6
|
module Auth0
|
3
7
|
module Api
|
4
|
-
# {https://auth0.com/docs/
|
5
|
-
# Methods to use the
|
8
|
+
# {https://auth0.com/docs/api/authentication}
|
9
|
+
# Methods to use the Authentication API
|
6
10
|
module AuthenticationEndpoints
|
7
11
|
UP_AUTH = 'Username-Password-Authentication'.freeze
|
8
12
|
JWT_BEARER = 'urn:ietf:params:oauth:grant-type:jwt-bearer'.freeze
|
9
13
|
|
10
|
-
#
|
11
|
-
# @see https://auth0.com/docs/auth-
|
12
|
-
# @param
|
13
|
-
# @param
|
14
|
-
# @return [json] Returns the
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
# Request an API access token using a Client Credentials grant
|
15
|
+
# @see https://auth0.com/docs/api-auth/tutorials/client-credentials
|
16
|
+
# @param audience [string] API audience to use
|
17
|
+
# @param organization [string] Organization ID
|
18
|
+
# @return [json] Returns the API token
|
19
|
+
def api_token(
|
20
|
+
client_id: @client_id,
|
21
|
+
client_secret: @client_secret,
|
22
|
+
organization: @organization,
|
23
|
+
audience: nil
|
24
|
+
)
|
25
|
+
|
26
|
+
request_params = {
|
27
|
+
grant_type: 'client_credentials',
|
28
|
+
client_id: client_id,
|
29
|
+
client_secret: client_secret,
|
30
|
+
audience: audience,
|
31
|
+
organization: organization
|
32
|
+
}
|
33
|
+
|
34
|
+
response = post('/oauth/token', request_params)
|
35
|
+
::Auth0::ApiToken.new(response['access_token'], response['scope'], response['expires_in'])
|
23
36
|
end
|
24
37
|
|
25
|
-
#
|
26
|
-
# @see https://auth0.com/docs/
|
27
|
-
# @param
|
28
|
-
# @param
|
29
|
-
#
|
30
|
-
# @param
|
31
|
-
# @
|
32
|
-
|
33
|
-
|
34
|
-
|
38
|
+
# Get access and ID tokens using an Authorization Code.
|
39
|
+
# @see https://auth0.com/docs/api/authentication#authorization-code
|
40
|
+
# @param code [string] The authentication code obtained from /authorize
|
41
|
+
# @param redirect_uri [string] URL to redirect to after authorization.
|
42
|
+
# Required only if it was set at the GET /authorize endpoint
|
43
|
+
# @param client_id [string] Client ID for the Application
|
44
|
+
# @param client_secret [string] Client Secret for the Application.
|
45
|
+
# @return [Auth0::AccessToken] Returns the access_token and id_token
|
46
|
+
def exchange_auth_code_for_tokens(
|
47
|
+
code,
|
48
|
+
redirect_uri: nil,
|
49
|
+
client_id: @client_id,
|
50
|
+
client_secret: @client_secret
|
51
|
+
)
|
52
|
+
raise Auth0::InvalidParameter, 'Must provide an authorization code' if code.to_s.empty?
|
53
|
+
|
35
54
|
request_params = {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
scope: scope,
|
42
|
-
redirect_uri: redirect_uri
|
55
|
+
grant_type: 'authorization_code',
|
56
|
+
client_id: client_id,
|
57
|
+
client_secret: client_secret,
|
58
|
+
code: code,
|
59
|
+
redirect_uri: redirect_uri
|
43
60
|
}
|
44
|
-
post('/oauth/token', request_params)
|
61
|
+
::Auth0::AccessToken.from_response post('/oauth/token', request_params)
|
45
62
|
end
|
46
63
|
|
47
|
-
#
|
48
|
-
# @see https://auth0.com/docs/
|
49
|
-
# @param
|
50
|
-
#
|
51
|
-
# @param
|
52
|
-
# @param
|
53
|
-
#
|
54
|
-
#
|
55
|
-
# @return [
|
56
|
-
def
|
57
|
-
|
58
|
-
|
64
|
+
# Get access and ID tokens using a refresh token.
|
65
|
+
# @see https://auth0.com/docs/api/authentication#refresh-token
|
66
|
+
# @param refresh_token [string] Refresh token to use. Request this with
|
67
|
+
# the offline_access scope when logging in.
|
68
|
+
# @param client_id [string] Client ID for the Application
|
69
|
+
# @param client_secret [string] Client Secret for the Application.
|
70
|
+
# Required when the Application's Token Endpoint Authentication Method
|
71
|
+
# is Post or Basic.
|
72
|
+
# @return [Auth0::AccessToken] Returns tokens allowed in the refresh_token
|
73
|
+
def exchange_refresh_token(
|
74
|
+
refresh_token,
|
75
|
+
client_id: @client_id,
|
76
|
+
client_secret: @client_secret
|
77
|
+
)
|
78
|
+
raise Auth0::InvalidParameter, 'Must provide a refresh token' if refresh_token.to_s.empty?
|
79
|
+
|
59
80
|
request_params = {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
scope: options.fetch(:scope, 'openid'),
|
65
|
-
connection: connection_name,
|
66
|
-
grant_type: options.fetch(:grant_type, password),
|
67
|
-
id_token: id_token,
|
68
|
-
device: options.fetch(:device, nil)
|
81
|
+
grant_type: 'refresh_token',
|
82
|
+
client_id: client_id,
|
83
|
+
client_secret: client_secret,
|
84
|
+
refresh_token: refresh_token
|
69
85
|
}
|
70
|
-
post('/oauth/token', request_params)
|
86
|
+
::Auth0::AccessToken.from_response post('/oauth/token', request_params)
|
71
87
|
end
|
72
88
|
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
76
|
-
# @
|
77
|
-
# @param
|
89
|
+
# rubocop:disable Metrics/ParameterLists
|
90
|
+
# Get access and ID tokens using Resource Owner Password.
|
91
|
+
# Requires that your tenant has a Default Audience or Default Directory.
|
92
|
+
# @see https://auth0.com/docs/api/authentication#resource-owner-password
|
93
|
+
# @param login_name [string] Email or username for the connection
|
94
|
+
# @param password [string] Password
|
95
|
+
# @param client_id [string] Client ID from Application settings
|
96
|
+
# @param client_secret [string] Client Secret from Application settings
|
97
|
+
# @param realm [string] Specific realm to authenticate against
|
98
|
+
# @param audience [string] API audience
|
99
|
+
# @param scope [string] Scope(s) requested
|
100
|
+
# - Include an audience (above) for API access scopes
|
101
|
+
# - Use the default "openid" for userinfo calls
|
102
|
+
# @return [json] Returns the access_token and id_token
|
103
|
+
def login_with_resource_owner(
|
104
|
+
login_name,
|
105
|
+
password,
|
106
|
+
client_id: @client_id,
|
107
|
+
client_secret: @client_secret,
|
108
|
+
realm: nil,
|
109
|
+
audience: nil,
|
110
|
+
scope: 'openid'
|
111
|
+
)
|
112
|
+
|
113
|
+
raise Auth0::InvalidParameter, 'Must supply a valid login_name' if login_name.empty?
|
114
|
+
raise Auth0::InvalidParameter, 'Must supply a valid password' if password.empty?
|
115
|
+
|
116
|
+
request_params = {
|
117
|
+
username: login_name,
|
118
|
+
password: password,
|
119
|
+
client_id: client_id,
|
120
|
+
client_secret: client_secret,
|
121
|
+
realm: realm,
|
122
|
+
scope: scope,
|
123
|
+
audience: audience,
|
124
|
+
grant_type: realm ? 'http://auth0.com/oauth/grant-type/password-realm' : 'password'
|
125
|
+
}
|
126
|
+
::Auth0::AccessToken.from_response post('/oauth/token', request_params)
|
127
|
+
end
|
128
|
+
# rubocop:enable Metrics/ParameterLists
|
129
|
+
|
130
|
+
# Sign up with a database connection using a username and password.
|
131
|
+
# @see https://auth0.com/docs/api/authentication#signup
|
132
|
+
# @param email [string] New user's email
|
133
|
+
# @param password [string] New user's password
|
134
|
+
# @param connection_name [string] Database connection name
|
78
135
|
# @return [json] Returns the created user
|
79
136
|
def signup(email, password, connection_name = UP_AUTH)
|
80
137
|
raise Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
|
81
138
|
raise Auth0::InvalidParameter, 'Must supply a valid password' if password.to_s.empty?
|
139
|
+
|
82
140
|
request_params = {
|
83
|
-
|
84
|
-
|
141
|
+
email: email,
|
142
|
+
password: password,
|
85
143
|
connection: connection_name,
|
86
|
-
|
144
|
+
client_id: @client_id
|
87
145
|
}
|
88
146
|
post('/dbconnections/signup', request_params)
|
89
147
|
end
|
90
148
|
|
91
|
-
#
|
92
|
-
#
|
93
|
-
# @see https://auth0.com/docs/
|
94
|
-
# @param email [string] User email
|
95
|
-
# @param password [string] User's new password
|
96
|
-
#
|
149
|
+
# Change a user's password or trigger a password reset email.
|
150
|
+
# @see https://auth0.com/docs/api/authentication#change-password
|
151
|
+
# @see https://auth0.com/docs/connections/database/password-change
|
152
|
+
# @param email [string] User's current email
|
153
|
+
# @param password [string] User's new password; empty to trigger a
|
154
|
+
# password reset email
|
155
|
+
# @param connection_name [string] Database connection name
|
97
156
|
def change_password(email, password, connection_name = UP_AUTH)
|
98
157
|
raise Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
|
158
|
+
|
99
159
|
request_params = {
|
100
|
-
|
101
|
-
|
160
|
+
email: email,
|
161
|
+
password: password,
|
102
162
|
connection: connection_name,
|
103
|
-
|
163
|
+
client_id: @client_id
|
104
164
|
}
|
105
165
|
post('/dbconnections/change_password', request_params)
|
106
166
|
end
|
107
167
|
|
108
|
-
# Start
|
109
|
-
# @see https://auth0.com/docs/
|
110
|
-
# @
|
111
|
-
# @param
|
112
|
-
# @param
|
168
|
+
# Start Passwordless email login flow.
|
169
|
+
# @see https://auth0.com/docs/api/authentication#get-code-or-link
|
170
|
+
# @see https://auth0.com/docs/connections/passwordless#passwordless-on-regular-web-apps
|
171
|
+
# @param email [string] Email to send a link or code
|
172
|
+
# @param send [string] Pass 'link' to send a magic link, 'code' to send a code
|
173
|
+
# @param auth_params [hash] Append or override the magic link parameters
|
113
174
|
def start_passwordless_email_flow(email, send = 'link', auth_params = {})
|
114
175
|
raise Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
|
176
|
+
|
115
177
|
request_params = {
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
178
|
+
email: email,
|
179
|
+
send: send,
|
180
|
+
authParams: auth_params,
|
181
|
+
connection: 'email',
|
182
|
+
client_id: @client_id,
|
183
|
+
client_secret: @client_secret
|
121
184
|
}
|
122
185
|
post('/passwordless/start', request_params)
|
123
186
|
end
|
124
187
|
|
125
|
-
# Start
|
126
|
-
# @see https://auth0.com/docs/
|
188
|
+
# Start Passwordless SMS login flow.
|
189
|
+
# @see https://auth0.com/docs/api/authentication#get-code-or-link
|
190
|
+
# @see https://auth0.com/docs/connections/passwordless#passwordless-on-regular-web-apps
|
127
191
|
# @param phone_number [string] User's phone number.
|
128
192
|
def start_passwordless_sms_flow(phone_number)
|
129
193
|
raise Auth0::InvalidParameter, 'Must supply a valid phone number' if phone_number.to_s.empty?
|
130
|
-
request_params = {
|
131
|
-
client_id: @client_id,
|
132
|
-
connection: 'sms',
|
133
|
-
phone_number: phone_number
|
134
|
-
}
|
135
|
-
post('/passwordless/start', request_params)
|
136
|
-
end
|
137
194
|
|
138
|
-
# Logins using phone number/verification code.
|
139
|
-
# @see https://auth0.com/docs/auth-api#!#post--ro_with_sms
|
140
|
-
# @param phone_number [string] User's phone number.
|
141
|
-
# @param code [string] Verification code.
|
142
|
-
# @return [json] Returns the access token and id token
|
143
|
-
def phone_login(phone_number, code, scope = 'openid')
|
144
|
-
raise Auth0::InvalidParameter, 'Must supply a valid phone number' if phone_number.to_s.empty?
|
145
|
-
raise Auth0::InvalidParameter, 'Must supply a valid code' if code.to_s.empty?
|
146
195
|
request_params = {
|
147
|
-
|
148
|
-
username: phone_number,
|
149
|
-
password: code,
|
150
|
-
scope: scope,
|
196
|
+
phone_number: phone_number,
|
151
197
|
connection: 'sms',
|
152
|
-
|
198
|
+
client_id: @client_id,
|
199
|
+
client_secret: @client_secret
|
153
200
|
}
|
154
|
-
post('/
|
201
|
+
post('/passwordless/start', request_params)
|
155
202
|
end
|
156
203
|
|
157
|
-
#
|
158
|
-
# @see https://auth0.com/docs/
|
204
|
+
# Retrive SAML 2.0 metadata XML for an Application.
|
205
|
+
# @see https://auth0.com/docs/api/authentication#get-metadata
|
159
206
|
# @return [xml] SAML 2.0 metadata
|
160
207
|
def saml_metadata
|
161
208
|
get("/samlp/metadata/#{@client_id}")
|
162
209
|
end
|
163
210
|
|
164
|
-
#
|
165
|
-
# @see https://auth0.com/docs/
|
166
|
-
# @return [xml] Federation
|
211
|
+
# Retrieve WS-Federation metadata XML for a tenant.
|
212
|
+
# @see https://auth0.com/docs/api/authentication#get-metadata36
|
213
|
+
# @return [xml] WS-Federation metadata
|
167
214
|
def wsfed_metadata
|
168
215
|
get('/wsfed/FederationMetadata/2007-06/FederationMetadata.xml')
|
169
216
|
end
|
170
217
|
|
171
|
-
#
|
172
|
-
# @see https://auth0.com/docs/
|
173
|
-
# @param id_token [string] Token's id.
|
174
|
-
# @return User information associated with the user id (sub property) of the token.
|
175
|
-
def token_info(id_token)
|
176
|
-
raise Auth0::InvalidParameter, 'Must supply a valid id_token' if id_token.to_s.empty?
|
177
|
-
request_params = { id_token: id_token }
|
178
|
-
post('/tokeninfo', request_params)
|
179
|
-
end
|
180
|
-
|
181
|
-
# Refreshes a delegation token
|
182
|
-
# @see https://auth0.com/docs/auth-api#!#post--delegation
|
183
|
-
# @param refresh_token [string] Token to refresh
|
184
|
-
# @param target [string] Target to sign the new token.
|
185
|
-
# @param scope [string] Defaults to openid. Can be 'openid name email'.
|
186
|
-
# @param api_type [string] Defaults to app. Can be aws, azure_sb, azure_blob, firebase, layer, salesforce_api,
|
187
|
-
# salesforce_sandbox_api, sap_api or wams
|
188
|
-
# @param extra_parameters [hash] Extra parameters.
|
189
|
-
# @return [json] Returns the refreshed delegation token
|
190
|
-
def refresh_delegation(refresh_token, target, scope = 'openid', api_type = 'app', extra_parameters = {})
|
191
|
-
raise Auth0::InvalidParameter, 'Must supply a valid token to refresh' if refresh_token.to_s.empty?
|
192
|
-
request_params = {
|
193
|
-
client_id: @client_id,
|
194
|
-
grant_type: JWT_BEARER,
|
195
|
-
refresh_token: refresh_token,
|
196
|
-
target: target,
|
197
|
-
api_type: api_type,
|
198
|
-
scope: scope
|
199
|
-
}.merge(extra_parameters)
|
200
|
-
post('/delegation', request_params)
|
201
|
-
end
|
202
|
-
|
203
|
-
# Retrives a delegation token
|
204
|
-
# @see https://auth0.com/docs/auth-api#!#post--delegation
|
205
|
-
# @param id_token [string] Token's id.
|
206
|
-
# @param target [string] Target to sign the new token.
|
207
|
-
# @param scope [string] Defaults to openid. Can be 'openid name email'.
|
208
|
-
# @param api_type [string] Defaults to app. Can be aws, azure_sb, azure_blob, firebase, layer, salesforce_api,
|
209
|
-
# salesforce_sandbox_api, sap_api or wams
|
210
|
-
# @param extra_parameters [hash] Extra parameters.
|
211
|
-
# @return [json] Returns the refreshed delegation token
|
212
|
-
def delegation(id_token, target, scope = 'openid', api_type = 'app', extra_parameters = {})
|
213
|
-
raise Auth0::InvalidParameter, 'Must supply a valid id_token' if id_token.to_s.empty?
|
214
|
-
request_params = {
|
215
|
-
client_id: @client_id,
|
216
|
-
grant_type: JWT_BEARER,
|
217
|
-
id_token: id_token,
|
218
|
-
target: target,
|
219
|
-
api_type: api_type,
|
220
|
-
scope: scope
|
221
|
-
}.merge(extra_parameters)
|
222
|
-
post('/delegation', request_params)
|
223
|
-
end
|
224
|
-
|
225
|
-
# Retrives an impersonation URL to login as another user
|
226
|
-
# @see https://auth0.com/docs/auth-api#!#post--users--user_id--impersonate
|
227
|
-
# @param user_id [string] Impersonate user id
|
228
|
-
# @param app_client_id [string] Application client id
|
229
|
-
# @param impersonator_id [string] Impersonator user id id.
|
230
|
-
# @param options [string] Additional Parameters
|
231
|
-
# @return [string] Impersonation URL
|
232
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
233
|
-
def impersonate(user_id, app_client_id, impersonator_id, options)
|
234
|
-
raise Auth0::InvalidParameter, 'Must supply a valid user_id' if user_id.to_s.empty?
|
235
|
-
raise Auth0::InvalidParameter, 'Must supply a valid app_client_id' if app_client_id.to_s.empty?
|
236
|
-
raise Auth0::InvalidParameter, 'Must supply a valid impersonator_id' if impersonator_id.to_s.empty?
|
237
|
-
raise Auth0::MissingParameter, 'Must supply client_secret' if @client_secret.nil?
|
238
|
-
authorization_header obtain_access_token
|
239
|
-
request_params = {
|
240
|
-
protocol: options.fetch(:protocol, 'oauth2'),
|
241
|
-
impersonator_id: impersonator_id,
|
242
|
-
client_id: app_client_id,
|
243
|
-
additionalParameters: {
|
244
|
-
response_type: options.fetch(:response_type, 'code'),
|
245
|
-
state: options.fetch(:state, ''),
|
246
|
-
scope: options.fetch(:scope, 'openid'),
|
247
|
-
callback_url: options.fetch(:callback_url, '')
|
248
|
-
}
|
249
|
-
}
|
250
|
-
result = post("/users/#{user_id}/impersonate", request_params)
|
251
|
-
authorization_header @token
|
252
|
-
result
|
253
|
-
end
|
254
|
-
|
255
|
-
# Unlinks a User
|
256
|
-
# @see https://auth0.com/docs/auth-api#!#post--unlink
|
257
|
-
# @param access_token [string] Logged-in user access token
|
258
|
-
# @param user_id [string] User Id
|
259
|
-
def unlink_user(access_token, user_id)
|
260
|
-
raise Auth0::InvalidParameter, 'Must supply a valid access_token' if access_token.to_s.empty?
|
261
|
-
raise Auth0::InvalidParameter, 'Must supply a valid user_id' if user_id.to_s.empty?
|
262
|
-
request_params = {
|
263
|
-
access_token: access_token,
|
264
|
-
user_id: user_id
|
265
|
-
}
|
266
|
-
post('/unlink', request_params)
|
267
|
-
end
|
268
|
-
|
269
|
-
# Returns the user information based on the Auth0 access token.
|
270
|
-
# @see https://auth0.com/docs/auth-api#!#get--userinfo
|
218
|
+
# Return the user information based on the Auth0 access token.
|
219
|
+
# @see https://auth0.com/docs/api/authentication#get-user-info
|
271
220
|
# @return [json] User information based on the Auth0 access token
|
272
|
-
def
|
273
|
-
get('/userinfo')
|
221
|
+
def userinfo(access_token)
|
222
|
+
get('/userinfo', {}, 'Authorization' => "Bearer #{access_token}")
|
274
223
|
end
|
275
224
|
|
276
|
-
#
|
277
|
-
# @see https://auth0.com/docs/
|
278
|
-
# @param redirect_uri [string]
|
279
|
-
# @param options [hash] Can contain response_type, connection, state and additional_parameters.
|
225
|
+
# Return an authorization URL.
|
226
|
+
# @see https://auth0.com/docs/api/authentication#authorization-code-grant
|
227
|
+
# @param redirect_uri [string] URL to redirect after authorization
|
228
|
+
# @param options [hash] Can contain response_type, connection, state, organization, invitation, and additional_parameters.
|
280
229
|
# @return [url] Authorization URL.
|
281
230
|
def authorization_url(redirect_uri, options = {})
|
282
231
|
raise Auth0::InvalidParameter, 'Must supply a valid redirect_uri' if redirect_uri.to_s.empty?
|
232
|
+
|
283
233
|
request_params = {
|
284
234
|
client_id: @client_id,
|
285
235
|
response_type: options.fetch(:response_type, 'code'),
|
286
236
|
connection: options.fetch(:connection, nil),
|
287
237
|
redirect_uri: redirect_uri,
|
288
238
|
state: options.fetch(:state, nil),
|
289
|
-
scope: options.fetch(:scope, nil)
|
239
|
+
scope: options.fetch(:scope, nil),
|
240
|
+
organization: options.fetch(:organization, @organization),
|
241
|
+
invitation: options.fetch(:invitation, nil)
|
290
242
|
}.merge(options.fetch(:additional_parameters, {}))
|
291
243
|
|
292
244
|
URI::HTTPS.build(host: @domain, path: '/authorize', query: to_query(request_params))
|
293
245
|
end
|
294
246
|
|
295
|
-
# Returns an logout
|
296
|
-
# @see https://auth0.com/docs/
|
297
|
-
# @
|
298
|
-
# @
|
299
|
-
|
247
|
+
# Returns an Auth0 logout URL with a return URL.
|
248
|
+
# @see https://auth0.com/docs/api/authentication#logout
|
249
|
+
# @see https://auth0.com/docs/logout
|
250
|
+
# @param return_to [string] URL to redirect after logout.
|
251
|
+
# @param include_client [bool] Include the client_id in the logout URL.
|
252
|
+
# @param federated [boolean] Perform a federated logout.
|
253
|
+
# @return [url] Logout URI
|
254
|
+
def logout_url(return_to, include_client: false, federated: false)
|
300
255
|
request_params = {
|
301
|
-
returnTo: return_to
|
256
|
+
returnTo: return_to,
|
257
|
+
client_id: include_client ? @client_id : nil,
|
258
|
+
federated: federated ? '1' : nil
|
302
259
|
}
|
303
260
|
|
304
|
-
URI::HTTPS.build(
|
261
|
+
URI::HTTPS.build(
|
262
|
+
host: @domain,
|
263
|
+
path: '/v2/logout',
|
264
|
+
query: to_query(request_params)
|
265
|
+
)
|
305
266
|
end
|
306
267
|
|
307
|
-
#
|
308
|
-
#
|
309
|
-
#
|
310
|
-
# @
|
311
|
-
# @
|
268
|
+
# Return a SAMLP URL.
|
269
|
+
# The SAML Request AssertionConsumerServiceURL will be used to POST back
|
270
|
+
# the assertion and it must match with the application callback URL.
|
271
|
+
# @see https://auth0.com/docs/api/authentication#accept-request
|
272
|
+
# @param connection [string] Connection to use; empty to show all
|
273
|
+
# @return [url] SAMLP URL
|
312
274
|
def samlp_url(connection = UP_AUTH)
|
313
275
|
request_params = {
|
314
276
|
connection: connection
|
@@ -316,22 +278,67 @@ module Auth0
|
|
316
278
|
URI::HTTPS.build(host: @domain, path: "/samlp/#{@client_id}", query: to_query(request_params))
|
317
279
|
end
|
318
280
|
|
319
|
-
#
|
320
|
-
# @see https://auth0.com/docs/
|
321
|
-
# @param connection [string] to
|
322
|
-
# @
|
323
|
-
|
281
|
+
# Return a WS-Federation URL.
|
282
|
+
# @see https://auth0.com/docs/api/authentication#accept-request35
|
283
|
+
# @param connection [string] Connection to use; empty to show all
|
284
|
+
# @param options [hash] Extra options; supports wtrealm, wctx, wreply
|
285
|
+
# @return [url] WS-Federation URL
|
286
|
+
def wsfed_url(connection = UP_AUTH, options = {})
|
324
287
|
request_params = {
|
325
|
-
whr: connection
|
288
|
+
whr: connection,
|
289
|
+
wtrealm: options[:wtrealm],
|
290
|
+
wctx: options[:wctx],
|
291
|
+
wreply: options[:wreply]
|
326
292
|
}
|
327
|
-
|
293
|
+
|
294
|
+
url_client_id = @client_id unless request_params[:wtrealm]
|
295
|
+
URI::HTTPS.build(
|
296
|
+
host: @domain,
|
297
|
+
path: "/wsfed/#{url_client_id}",
|
298
|
+
query: to_query(request_params)
|
299
|
+
)
|
300
|
+
end
|
301
|
+
|
302
|
+
# Validate an ID token (signature and expiration).
|
303
|
+
# @see https://auth0.com/docs/tokens/guides/validate-id-tokens
|
304
|
+
# @param id_token [string] The JWT to validate.
|
305
|
+
# @param algorithm [JWKAlgorithm] The expected signing algorithm.
|
306
|
+
|
307
|
+
# @param leeway [integer] The clock skew to accept when verifying date related claims in seconds.
|
308
|
+
# Must be a non-negative value. Defaults to *60 seconds*.
|
309
|
+
# @param nonce [string] The nonce value sent during authentication.
|
310
|
+
# @param max_age [integer] The max_age value sent during authentication.
|
311
|
+
# Must be a non-negative value.
|
312
|
+
# @param issuer [string] The expected issuer claim value.
|
313
|
+
# Defaults to +https://YOUR_AUTH0_DOMAIN/+.
|
314
|
+
# @param audience [string] The expected audience claim value.
|
315
|
+
# Defaults to your *Auth0 Client ID*.
|
316
|
+
# @param organization [string] Organization ID
|
317
|
+
# Defaults to your *Auth0 Organization ID*.
|
318
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/ParameterLists
|
319
|
+
def validate_id_token(id_token, algorithm: nil, leeway: 60, nonce: nil, max_age: nil, issuer: nil, audience: nil, organization: @organization)
|
320
|
+
context = {
|
321
|
+
issuer: issuer || "https://#{@domain}/",
|
322
|
+
audience: audience || @client_id,
|
323
|
+
algorithm: algorithm || Auth0::Algorithm::RS256.jwks_url("https://#{@domain}/.well-known/jwks.json"),
|
324
|
+
leeway: leeway
|
325
|
+
}
|
326
|
+
|
327
|
+
context[:nonce] = nonce unless nonce.nil?
|
328
|
+
context[:max_age] = max_age unless max_age.nil?
|
329
|
+
context[:organization] = organization unless !organization
|
330
|
+
|
331
|
+
Auth0::Mixins::Validation::IdTokenValidator.new(context).validate(id_token)
|
328
332
|
end
|
333
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Metrics/ParameterLists
|
329
334
|
|
330
335
|
private
|
331
336
|
|
337
|
+
# Build a URL query string from a hash.
|
332
338
|
def to_query(hash)
|
333
|
-
hash.map { |k, v| "#{k}=#{
|
339
|
+
hash.map { |k, v| "#{k}=#{CGI.escape(v)}" unless v.nil? }.reject(&:nil?).join('&')
|
334
340
|
end
|
335
341
|
end
|
336
342
|
end
|
337
343
|
end
|
344
|
+
# rubocop:enable Metrics/ModuleLength
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Auth0
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
# Methods to use the anomaly endpoints
|
5
|
+
module Anomaly
|
6
|
+
# Use this route to determine if a given IP is currently blocked
|
7
|
+
# by the failed login to multiple user accounts trigger.
|
8
|
+
# @see https://auth0.com/docs/api/management/v2#!/Anomaly/get_ips_by_id
|
9
|
+
# @param ip [string] The IP to check.
|
10
|
+
def check_if_ip_is_blocked(ip)
|
11
|
+
raise Auth0::InvalidParameter, 'Must specify an IP' if ip.to_s.empty?
|
12
|
+
|
13
|
+
path = "#{anomaly_path}/#{ip}"
|
14
|
+
get(path)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Resets an IP that is currently blocked by the failed login to multiple user accounts trigger.
|
18
|
+
# @see https://auth0.com/docs/api/management/v2#!/Anomaly/delete_ips_by_id
|
19
|
+
# @param ip [string] The IP to remove block.
|
20
|
+
def remove_ip_block(ip)
|
21
|
+
raise Auth0::InvalidParameter, 'Must specify an IP' if ip.to_s.empty?
|
22
|
+
|
23
|
+
path = "#{anomaly_path}/#{ip}"
|
24
|
+
delete(path)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# Anomaly API path
|
30
|
+
def anomaly_path
|
31
|
+
@anomaly_path ||= '/api/v2/anomaly/blocks/ips'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|