auth0 4.17.0 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.version +1 -0
- data/CHANGELOG.md +407 -22
- data/README.md +80 -178
- data/auth0.gemspec +10 -15
- data/lib/auth0/api/authentication_endpoints.rb +162 -249
- data/lib/auth0/api/v2/actions.rb +209 -0
- data/lib/auth0/api/v2/attack_protection.rb +79 -0
- data/lib/auth0/api/v2/branding.rb +65 -0
- data/lib/auth0/api/v2/client_grants.rb +27 -2
- data/lib/auth0/api/v2/clients.rb +42 -0
- data/lib/auth0/api/v2/connections.rb +14 -5
- data/lib/auth0/api/v2/device_credentials.rb +12 -7
- data/lib/auth0/api/v2/grants.rb +49 -0
- data/lib/auth0/api/v2/jobs.rb +18 -5
- data/lib/auth0/api/v2/logs.rb +2 -2
- data/lib/auth0/api/v2/organizations.rb +407 -0
- data/lib/auth0/api/v2/refresh_tokens.rb +34 -0
- data/lib/auth0/api/v2/roles.rb +7 -3
- data/lib/auth0/api/v2/sessions.rb +43 -0
- data/lib/auth0/api/v2/tickets.rb +14 -2
- data/lib/auth0/api/v2/users.rb +203 -12
- data/lib/auth0/api/v2.rb +18 -4
- data/lib/auth0/client_assertion.rb +45 -0
- data/lib/auth0/exception.rb +17 -8
- data/lib/auth0/mixins/access_token_struct.rb +2 -2
- data/lib/auth0/mixins/api_token_struct.rb +2 -3
- data/lib/auth0/mixins/httpproxy.rb +98 -36
- data/lib/auth0/mixins/initializer.rb +6 -9
- data/lib/auth0/mixins/permission_struct.rb +2 -2
- data/lib/auth0/mixins/token_management.rb +35 -0
- data/lib/auth0/mixins/validation.rb +33 -6
- data/lib/auth0/mixins.rb +2 -1
- data/lib/auth0/version.rb +1 -1
- metadata +58 -632
- data/.bundle/config +0 -4
- data/.circleci/config.yml +0 -23
- data/.env.example +0 -2
- data/.gemrelease +0 -2
- data/.github/CODEOWNERS +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -39
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -35
- data/.github/stale.yml +0 -20
- data/.gitignore +0 -14
- data/.rspec +0 -3
- data/.rubocop.yml +0 -10
- data/.rubocop_todo.yml +0 -5
- data/CODE_OF_CONDUCT.md +0 -3
- data/DEPLOYMENT.md +0 -61
- data/Dockerfile +0 -5
- data/Gemfile +0 -19
- data/Gemfile.lock +0 -227
- data/Guardfile +0 -37
- data/RUBYGEM.md +0 -9
- data/Rakefile +0 -53
- data/codecov.yml +0 -22
- 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/examples/ruby-api/.env.example +0 -2
- data/examples/ruby-api/.gitignore +0 -86
- data/examples/ruby-api/Gemfile +0 -8
- data/examples/ruby-api/README.md +0 -24
- data/examples/ruby-api/config.ru +0 -2
- data/examples/ruby-api/main.rb +0 -33
- data/examples/ruby-on-rails-api/.env.example +0 -2
- data/examples/ruby-on-rails-api/.gitignore +0 -18
- data/examples/ruby-on-rails-api/Gemfile +0 -48
- data/examples/ruby-on-rails-api/README.md +0 -27
- data/examples/ruby-on-rails-api/Rakefile +0 -6
- data/examples/ruby-on-rails-api/app/assets/images/.keep +0 -0
- data/examples/ruby-on-rails-api/app/assets/javascripts/application.js +0 -16
- data/examples/ruby-on-rails-api/app/assets/stylesheets/application.css +0 -15
- data/examples/ruby-on-rails-api/app/controllers/application_controller.rb +0 -8
- data/examples/ruby-on-rails-api/app/controllers/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/app/controllers/ping_controller.rb +0 -6
- data/examples/ruby-on-rails-api/app/controllers/secured_ping_controller.rb +0 -11
- data/examples/ruby-on-rails-api/app/helpers/application_helper.rb +0 -3
- data/examples/ruby-on-rails-api/app/mailers/.keep +0 -0
- data/examples/ruby-on-rails-api/app/models/.keep +0 -0
- data/examples/ruby-on-rails-api/app/models/User.rb +0 -5
- data/examples/ruby-on-rails-api/app/models/concerns/.keep +0 -0
- data/examples/ruby-on-rails-api/app/views/layouts/application.html.erb +0 -14
- data/examples/ruby-on-rails-api/bin/bundle +0 -3
- data/examples/ruby-on-rails-api/bin/rails +0 -4
- data/examples/ruby-on-rails-api/bin/rake +0 -4
- data/examples/ruby-on-rails-api/bin/setup +0 -29
- data/examples/ruby-on-rails-api/config/application.rb +0 -23
- data/examples/ruby-on-rails-api/config/boot.rb +0 -4
- data/examples/ruby-on-rails-api/config/database.yml +0 -27
- data/examples/ruby-on-rails-api/config/environment.rb +0 -5
- data/examples/ruby-on-rails-api/config/environments/development.rb +0 -37
- data/examples/ruby-on-rails-api/config/environments/production.rb +0 -83
- data/examples/ruby-on-rails-api/config/environments/test.rb +0 -41
- data/examples/ruby-on-rails-api/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/ruby-on-rails-api/config/initializers/cookies_serializer.rb +0 -3
- data/examples/ruby-on-rails-api/config/initializers/dotenv.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/inflections.rb +0 -16
- data/examples/ruby-on-rails-api/config/initializers/knock.rb +0 -35
- data/examples/ruby-on-rails-api/config/initializers/mime_types.rb +0 -4
- data/examples/ruby-on-rails-api/config/initializers/session_store.rb +0 -3
- data/examples/ruby-on-rails-api/config/initializers/wrap_parameters.rb +0 -14
- data/examples/ruby-on-rails-api/config/locales/en.yml +0 -23
- data/examples/ruby-on-rails-api/config/routes.rb +0 -58
- data/examples/ruby-on-rails-api/config/secrets.yml +0 -28
- data/examples/ruby-on-rails-api/config.ru +0 -4
- data/examples/ruby-on-rails-api/db/schema.rb +0 -15
- data/examples/ruby-on-rails-api/db/seeds.rb +0 -7
- data/examples/ruby-on-rails-api/lib/assets/.keep +0 -0
- data/examples/ruby-on-rails-api/lib/tasks/.keep +0 -0
- data/examples/ruby-on-rails-api/log/.keep +0 -0
- data/examples/ruby-on-rails-api/public/404.html +0 -67
- data/examples/ruby-on-rails-api/public/422.html +0 -67
- data/examples/ruby-on-rails-api/public/500.html +0 -66
- data/examples/ruby-on-rails-api/public/favicon.ico +0 -0
- data/examples/ruby-on-rails-api/public/robots.txt +0 -5
- data/examples/ruby-on-rails-api/test/controllers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/fixtures/.keep +0 -0
- data/examples/ruby-on-rails-api/test/helpers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/integration/.keep +0 -0
- data/examples/ruby-on-rails-api/test/mailers/.keep +0 -0
- data/examples/ruby-on-rails-api/test/models/.keep +0 -0
- data/examples/ruby-on-rails-api/test/ping_controller_test.rb +0 -8
- data/examples/ruby-on-rails-api/test/secured_ping_controller_test.rb +0 -26
- data/examples/ruby-on-rails-api/test/test_helper.rb +0 -16
- data/lib/auth0/api/v1/clients.rb +0 -58
- data/lib/auth0/api/v1/connections.rb +0 -68
- data/lib/auth0/api/v1/logs.rb +0 -43
- data/lib/auth0/api/v1/rules.rb +0 -57
- data/lib/auth0/api/v1/users.rb +0 -227
- data/lib/auth0/api/v1.rb +0 -19
- data/publish_rubygem.sh +0 -10
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +0 -117
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +0 -57
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +0 -118
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +0 -55
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +0 -58
- data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +0 -54
- 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_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +0 -56
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +0 -62
- 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_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +0 -118
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +0 -91
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +0 -92
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +0 -132
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +0 -132
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +0 -94
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +0 -118
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +0 -66
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +0 -68
- 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/create_test_credential.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +0 -68
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +0 -51
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +0 -117
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +0 -116
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_create_a_new_verification_email_job.yml +0 -119
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +0 -175
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +0 -109
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +0 -110
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +0 -265
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +0 -265
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +0 -75
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +0 -76
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +0 -258
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +0 -68
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +0 -128
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +0 -64
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +0 -59
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +0 -95
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +0 -61
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +0 -96
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +0 -96
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +0 -63
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +0 -68
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +0 -54
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user_provider/should_attempt_to_delete_the_MFA_provider_for_the_User.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +0 -68
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +0 -62
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +0 -69
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v2_search_engine_query.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/is_expected_to_find_a_user_with_a_v3_search_engine_query.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +0 -65
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +0 -67
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +0 -60
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +0 -60
- data/spec/integration/lib/auth0/api/api_authentication_spec.rb +0 -120
- data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +0 -17
- data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +0 -27
- data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +0 -75
- data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +0 -166
- data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +0 -159
- data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +0 -128
- data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +0 -117
- data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +0 -124
- data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +0 -91
- data/spec/integration/lib/auth0/api/v2/api_resource_servers_spec.rb +0 -130
- data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +0 -145
- data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +0 -177
- data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +0 -22
- data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +0 -59
- data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +0 -59
- data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +0 -73
- data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +0 -300
- data/spec/integration/lib/auth0/auth0_client_spec.rb +0 -90
- data/spec/lib/auth0/api/authentication_endpoints_spec.rb +0 -703
- data/spec/lib/auth0/api/v2/anomaly_spec.rb +0 -26
- data/spec/lib/auth0/api/v2/blacklists_spec.rb +0 -25
- data/spec/lib/auth0/api/v2/client_grants_spec.rb +0 -76
- data/spec/lib/auth0/api/v2/clients_spec.rb +0 -104
- data/spec/lib/auth0/api/v2/connections_spec.rb +0 -140
- data/spec/lib/auth0/api/v2/device_credentials_spec.rb +0 -73
- data/spec/lib/auth0/api/v2/emails_spec.rb +0 -47
- data/spec/lib/auth0/api/v2/guardian_spec.rb +0 -154
- data/spec/lib/auth0/api/v2/jobs_spec.rb +0 -128
- data/spec/lib/auth0/api/v2/log_streams_spec.rb +0 -84
- data/spec/lib/auth0/api/v2/logs_spec.rb +0 -48
- data/spec/lib/auth0/api/v2/prompts_spec.rb +0 -88
- data/spec/lib/auth0/api/v2/resource_servers_spec.rb +0 -86
- data/spec/lib/auth0/api/v2/roles_spec.rb +0 -362
- data/spec/lib/auth0/api/v2/rules_spec.rb +0 -95
- data/spec/lib/auth0/api/v2/stats_spec.rb +0 -22
- data/spec/lib/auth0/api/v2/tenants_spec.rb +0 -26
- data/spec/lib/auth0/api/v2/tickets_spec.rb +0 -63
- data/spec/lib/auth0/api/v2/user_blocks_spec.rb +0 -52
- data/spec/lib/auth0/api/v2/users_by_email_spec.rb +0 -21
- data/spec/lib/auth0/api/v2/users_spec.rb +0 -542
- data/spec/lib/auth0/client_spec.rb +0 -153
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +0 -304
- data/spec/lib/auth0/mixins/initializer_spec.rb +0 -30
- data/spec/lib/auth0/mixins/validation_spec.rb +0 -466
- data/spec/spec_helper.rb +0 -63
- data/spec/support/credentials.rb +0 -30
- data/spec/support/dummy_class.rb +0 -18
- data/spec/support/dummy_class_for_proxy.rb +0 -5
- data/spec/support/dummy_class_for_restclient.rb +0 -2
- data/spec/support/import_users.json +0 -13
- data/spec/support/stub_response.rb +0 -1
data/lib/auth0/api/v2/users.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Auth0
|
|
2
2
|
module Api
|
|
3
3
|
module V2
|
|
4
|
-
# Methods to use the users endpoints
|
|
4
|
+
# Methods to use the users' endpoints
|
|
5
5
|
module Users
|
|
6
6
|
include Auth0::Mixins::Validation
|
|
7
7
|
|
|
@@ -43,13 +43,15 @@ module Auth0
|
|
|
43
43
|
# The attribute connection is always mandatory but depending on the type of connection you are using there
|
|
44
44
|
# could be others too. For instance, Auth0 DB Connections require email and password.
|
|
45
45
|
# @see https://auth0.com/docs/api/v2#!/Users/post_users
|
|
46
|
-
# @param
|
|
47
|
-
# @param options [hash]
|
|
48
|
-
# * :connection [string] The connection the user belongs to.
|
|
46
|
+
# @param connection [string] The connection the user belongs to.
|
|
47
|
+
# @param options [hash] See https://auth0.com/docs/api/management/v2#!/Users/post_users for available options
|
|
49
48
|
# @return [json] Returns the created user.
|
|
50
|
-
def create_user(
|
|
49
|
+
def create_user(connection, options = {})
|
|
50
|
+
if !connection.is_a?(String) || connection.empty?
|
|
51
|
+
raise Auth0::MissingParameter, 'Must supply a valid connection'
|
|
52
|
+
end
|
|
51
53
|
request_params = Hash[options.map { |(k, v)| [k.to_sym, v] }]
|
|
52
|
-
request_params[:
|
|
54
|
+
request_params[:connection] = connection
|
|
53
55
|
post(users_path, request_params)
|
|
54
56
|
end
|
|
55
57
|
|
|
@@ -92,10 +94,10 @@ module Auth0
|
|
|
92
94
|
# Some considerations:
|
|
93
95
|
# The properties of the new object will replace the old ones.
|
|
94
96
|
# The metadata fields are an exception to this rule (user_metadata and app_metadata). These properties are
|
|
95
|
-
# merged instead of being replaced but be careful, the merge only occurs on the first level.
|
|
97
|
+
# merged instead of being replaced, but be careful, the merge only occurs on the first level.
|
|
96
98
|
# If you are updating email_verified, phone_verified, username or password you need to specify the connection
|
|
97
99
|
# property too.
|
|
98
|
-
# If
|
|
100
|
+
# If you are updating email or phone_number you need to specify the connection and the client_id properties.
|
|
99
101
|
# @see https://auth0.com/docs/api/v2#!/Users/patch_users_by_id
|
|
100
102
|
# @param user_id [string] The user_id of the user to update.
|
|
101
103
|
# @param body [hash] The optional parameters to update.
|
|
@@ -109,6 +111,15 @@ module Auth0
|
|
|
109
111
|
end
|
|
110
112
|
alias update_user patch_user
|
|
111
113
|
|
|
114
|
+
# Delete all authenticators
|
|
115
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/delete_authenticators
|
|
116
|
+
# @param user_id [string] The user_id of the user to delete all authenticators
|
|
117
|
+
def delete_user_authenticators(user_id)
|
|
118
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
119
|
+
path = "#{users_path}/#{user_id}/authenticators"
|
|
120
|
+
delete(path)
|
|
121
|
+
end
|
|
122
|
+
|
|
112
123
|
# Delete a user's multifactor provider
|
|
113
124
|
# @see https://auth0.com/docs/api/v2#!/Users/delete_multifactor_by_provider
|
|
114
125
|
# @param user_id [string] The user_id of the user to delete the multifactor provider from.
|
|
@@ -126,7 +137,7 @@ module Auth0
|
|
|
126
137
|
# update:current_user_identities scope. In this case only the link_with param is required in the body,
|
|
127
138
|
# containing the JWT obtained upon the secondary account's authentication.
|
|
128
139
|
# 2. With an API V2 generated token with update:users scope. In this case you need to send provider and user_id
|
|
129
|
-
# in the body. Optionally you can also send the connection_id param which is suitable for identifying a
|
|
140
|
+
# in the body. Optionally, you can also send the connection_id param, which is suitable for identifying a
|
|
130
141
|
# particular database connection for the 'auth0' provider.
|
|
131
142
|
# @see https://auth0.com/docs/api/v2#!/Users/post_identities
|
|
132
143
|
# @param user_id [string] The user_id of the primary identity where you are linking the secondary account to.
|
|
@@ -213,7 +224,7 @@ module Auth0
|
|
|
213
224
|
# @see https://auth0.com/docs/api/management/v2#!/Users/delete_user_roles
|
|
214
225
|
#
|
|
215
226
|
# @param user_id [string] The user_id of the roles to remove.
|
|
216
|
-
# @param roles [array] An array of role
|
|
227
|
+
# @param roles [array] An array of role ids to remove.
|
|
217
228
|
def remove_user_roles(user_id, roles)
|
|
218
229
|
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
219
230
|
validate_strings_array roles
|
|
@@ -294,7 +305,7 @@ module Auth0
|
|
|
294
305
|
# @param user_id [string] The user_id of the recovery codes to regenerate.
|
|
295
306
|
def generate_recovery_code(user_id)
|
|
296
307
|
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
297
|
-
post "#{users_path}/#{user_id}/recovery-code-
|
|
308
|
+
post "#{users_path}/#{user_id}/recovery-code-regeneration"
|
|
298
309
|
end
|
|
299
310
|
|
|
300
311
|
# Invalidate all remembered browsers for all authentication factors for a specific user.
|
|
@@ -306,13 +317,193 @@ module Auth0
|
|
|
306
317
|
post "#{users_path}/#{user_id}/multifactor/actions/invalidate-remember-browser"
|
|
307
318
|
end
|
|
308
319
|
|
|
320
|
+
|
|
321
|
+
# Get a list of organizations for a user.
|
|
322
|
+
#
|
|
323
|
+
# @param user_id [string] The user_id of the permissions to get.
|
|
324
|
+
#
|
|
325
|
+
# @return [json] Returns organizations for the given user_id.
|
|
326
|
+
def get_user_organizations(user_id)
|
|
327
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
328
|
+
|
|
329
|
+
get "#{users_path}/#{user_id}/organizations"
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
# Get the available authentication methods for a user.
|
|
333
|
+
#
|
|
334
|
+
# @param user_id [string] The user ID of the authentication methods to get
|
|
335
|
+
# @param options [hash] A hash of options for getting permissions
|
|
336
|
+
# * :per_page [integer] The amount of permissions per page. (optional)
|
|
337
|
+
# * :page [integer] The page number. Zero based. (optional)
|
|
338
|
+
# * :include_totals [boolean] True if a query summary must be included in the result. (optional)
|
|
339
|
+
# @return [json] The user's authentication methods
|
|
340
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/get_authentication_methods
|
|
341
|
+
def user_authentication_methods(user_id, options = {})
|
|
342
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
343
|
+
|
|
344
|
+
request_params = {
|
|
345
|
+
per_page: options.fetch(:per_page, nil),
|
|
346
|
+
page: options.fetch(:page, nil),
|
|
347
|
+
include_totals: options.fetch(:include_totals, nil)
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
get "#{users_path}/#{user_id}/authentication-methods", request_params
|
|
351
|
+
end
|
|
352
|
+
alias get_user_authentication_methods user_authentication_methods
|
|
353
|
+
|
|
354
|
+
# Get a specific authentication method for a user.
|
|
355
|
+
#
|
|
356
|
+
# @param user_id [string] The user ID of the authentication methods to get
|
|
357
|
+
# @param authentication_method_id [string] The ID of the authentication method
|
|
358
|
+
# @return [json] The user authentication method
|
|
359
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/get_authentication_methods_by_authentication_method_id
|
|
360
|
+
def user_authentication_method(user_id, authentication_method_id)
|
|
361
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
362
|
+
raise Auth0::MissingParameter, 'Must supply a valid authentication_method_id' if authentication_method_id.to_s.empty?
|
|
363
|
+
|
|
364
|
+
get "#{users_path}/#{user_id}/authentication-methods/#{authentication_method_id}"
|
|
365
|
+
end
|
|
366
|
+
alias get_user_authentication_method user_authentication_method
|
|
367
|
+
|
|
368
|
+
# Create an authentication method for a user
|
|
369
|
+
#
|
|
370
|
+
# @param user_id [string] The user ID of the authentication methods to get
|
|
371
|
+
# @param body [hash] The post body content
|
|
372
|
+
# * :type [string] "phone" or "email" or "totp" or "webauthn-roaming"
|
|
373
|
+
# * :name [string] A human-readable label to identify the authentication method (optional)
|
|
374
|
+
# * :totp_secret [string] Base32 encoded secret for TOTP generation (optional)
|
|
375
|
+
# * :phone_number [string] Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice (optional)
|
|
376
|
+
# * :email [string] Applies to email authentication methods only. The email address used to send verification messages (optional)
|
|
377
|
+
# * :preferred_authentication_method [string] Preferred phone authentication method (optional)
|
|
378
|
+
# * :key_id [string] Applies to email webauthn authenticators only. The id of the credential (optional)
|
|
379
|
+
# * :public_key [string] Applies to email webauthn authenticators only. The public key (optional)
|
|
380
|
+
# * :relying_party_identifier [string] Applies to email webauthn authenticators only. The relying party identifier (optional)
|
|
381
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/post_authentication_methods
|
|
382
|
+
def post_user_authentication_method(user_id, body)
|
|
383
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
384
|
+
raise Auth0::MissingParameter, 'Must supply a body' if body.to_s.empty?
|
|
385
|
+
|
|
386
|
+
post "#{users_path}/#{user_id}/authentication-methods", body
|
|
387
|
+
end
|
|
388
|
+
alias create_user_authentication_method post_user_authentication_method
|
|
389
|
+
|
|
390
|
+
# Updates all authentication methods by replacing them with the given ones
|
|
391
|
+
#
|
|
392
|
+
# @param user_id [string] The user ID of the authentication methods to get
|
|
393
|
+
# @param body [hash array] The mehods to update
|
|
394
|
+
# * :type [string] "phone" or "email" or "totp" or "webauthn-roaming"
|
|
395
|
+
# * :name [string] A human-readable label to identify the authentication method (optional)
|
|
396
|
+
# * :totp_secret [string] Base32 encoded secret for TOTP generation (optional)
|
|
397
|
+
# * :phone_number [string] Applies to phone authentication methods only. The destination phone number used to send verification codes via text and voice (optional)
|
|
398
|
+
# * :email [string] Applies to email authentication methods only. The email address used to send verification messages (optional)
|
|
399
|
+
# * :preferred_authentication_method [string] Preferred phone authentication method (optional)
|
|
400
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/put_authentication_methods
|
|
401
|
+
def put_all_user_authentication_methods(user_id, body)
|
|
402
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
403
|
+
raise Auth0::MissingParameter, 'Must supply a body' if body.to_s.empty?
|
|
404
|
+
|
|
405
|
+
put "#{users_path}/#{user_id}/authentication-methods", body
|
|
406
|
+
end
|
|
407
|
+
alias update_all_user_authentication_methods put_all_user_authentication_methods
|
|
408
|
+
|
|
409
|
+
# Updates a user authentication method
|
|
410
|
+
#
|
|
411
|
+
# @param user_id [string] The user ID of the authentication methods to get
|
|
412
|
+
# @param body [hash array] The mehods to update
|
|
413
|
+
# * :name [string] A human-readable label to identify the authentication method (optional)
|
|
414
|
+
# * :preferred_authentication_method [string] Preferred phone authentication method (optional)
|
|
415
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/put_authentication_methods
|
|
416
|
+
def patch_user_authentication_method(user_id, authentication_method_id, body)
|
|
417
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
418
|
+
raise Auth0::MissingParameter, 'Must supply an authentication_method_id' if authentication_method_id.to_s.empty?
|
|
419
|
+
raise Auth0::MissingParameter, 'Must supply a body' if body.to_s.empty?
|
|
420
|
+
|
|
421
|
+
patch "#{users_path}/#{user_id}/authentication-methods/#{authentication_method_id}", body
|
|
422
|
+
end
|
|
423
|
+
alias update_user_authentication_method patch_user_authentication_method
|
|
424
|
+
|
|
425
|
+
# Deletes all of the user's authentication methods
|
|
426
|
+
#
|
|
427
|
+
# @param user_id [string] The user ID
|
|
428
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/delete_authentication_methods
|
|
429
|
+
def delete_user_authentication_methods(user_id)
|
|
430
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
431
|
+
|
|
432
|
+
delete "#{users_path}/#{user_id}/authentication-methods"
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
# Deletes the user's authentication method specified by authentication_method_id
|
|
437
|
+
#
|
|
438
|
+
# @param user_id [string] The user ID
|
|
439
|
+
# @param authentication_method_id [string] The ID of the authentication method
|
|
440
|
+
# @see https://auth0.com/docs/api/management/v2#!/Users/delete_authentication_methods_by_authentication_method_id
|
|
441
|
+
def delete_user_authentication_method(user_id, authentication_method_id)
|
|
442
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
443
|
+
raise Auth0::MissingParameter, 'Must supply an authentication_method_id' if authentication_method_id.to_s.empty?
|
|
444
|
+
|
|
445
|
+
delete "#{users_path}/#{user_id}/authentication-methods/#{authentication_method_id}"
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
# Delete all sessions for a user.
|
|
449
|
+
#
|
|
450
|
+
# @param user_id [string] The user ID
|
|
451
|
+
# @see https://auth0.com/docs/api/management/v2/users/delete-sessions-for-user
|
|
452
|
+
def delete_user_sessions(user_id)
|
|
453
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
454
|
+
|
|
455
|
+
delete "#{users_path}/#{user_id}/sessions"
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
# Retrieve details for a user's sessions.
|
|
459
|
+
#
|
|
460
|
+
# @param user_id [string] The user ID
|
|
461
|
+
# @see https://auth0.com/docs/api/management/v2/users/get-sessions-for-user
|
|
462
|
+
def user_sessions(user_id)
|
|
463
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
464
|
+
|
|
465
|
+
get "#{users_path}/#{user_id}/sessions"
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
# Retrieve details for a user's refresh tokens.
|
|
469
|
+
# @see https://auth0.com/docs/api/management/v2/users/get-refresh-tokens-for-user
|
|
470
|
+
#
|
|
471
|
+
# @param use_id [String] The user ID
|
|
472
|
+
# @param options [hash] A hash of options for getting permissions
|
|
473
|
+
# * :take [Integer] Number of results per page. Defaults to 50.
|
|
474
|
+
# * :from [String] Optional token ID from which to start selection (exclusive).
|
|
475
|
+
# * :include_totals [boolean] Return results inside an object that contains the total result count (true)
|
|
476
|
+
# or as a direct array of results (false, default)
|
|
477
|
+
#
|
|
478
|
+
# @return [json] Returns refresh tokens for the given user_id.
|
|
479
|
+
def user_refresh_tokens(user_id, options = {})
|
|
480
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
481
|
+
|
|
482
|
+
request_params = {
|
|
483
|
+
take: options.fetch(:take, nil),
|
|
484
|
+
from: options.fetch(:from, nil),
|
|
485
|
+
include_totals: options.fetch(:include_totals, nil)
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
get "#{users_path}/#{user_id}/refresh-tokens", request_params
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
# Delete all refresh tokens for a user.
|
|
492
|
+
#
|
|
493
|
+
# @param user_id [String] ID of the user to get remove refresh tokens for
|
|
494
|
+
# @see https://auth0.com/docs/api/management/v2/users/delete-refresh-tokens-for-user
|
|
495
|
+
def delete_user_refresh_tokens(user_id)
|
|
496
|
+
raise Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
|
497
|
+
|
|
498
|
+
delete "#{users_path}/#{user_id}/refresh-tokens"
|
|
499
|
+
end
|
|
500
|
+
|
|
309
501
|
private
|
|
310
502
|
|
|
311
503
|
# Users API path
|
|
312
504
|
def users_path
|
|
313
505
|
@users_path ||= '/api/v2/users'
|
|
314
506
|
end
|
|
315
|
-
|
|
316
507
|
end
|
|
317
508
|
end
|
|
318
509
|
end
|
data/lib/auth0/api/v2.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
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'
|
|
5
|
+
require 'auth0/api/v2/branding'
|
|
3
6
|
require 'auth0/api/v2/clients'
|
|
4
7
|
require 'auth0/api/v2/client_grants'
|
|
5
8
|
require 'auth0/api/v2/connections'
|
|
@@ -7,6 +10,8 @@ require 'auth0/api/v2/device_credentials'
|
|
|
7
10
|
require 'auth0/api/v2/emails'
|
|
8
11
|
require 'auth0/api/v2/jobs'
|
|
9
12
|
require 'auth0/api/v2/prompts'
|
|
13
|
+
require 'auth0/api/v2/organizations'
|
|
14
|
+
require 'auth0/api/v2/refresh_tokens'
|
|
10
15
|
require 'auth0/api/v2/rules'
|
|
11
16
|
require 'auth0/api/v2/roles'
|
|
12
17
|
require 'auth0/api/v2/stats'
|
|
@@ -19,32 +24,41 @@ require 'auth0/api/v2/logs'
|
|
|
19
24
|
require 'auth0/api/v2/log_streams'
|
|
20
25
|
require 'auth0/api/v2/resource_servers'
|
|
21
26
|
require 'auth0/api/v2/guardian'
|
|
27
|
+
require 'auth0/api/v2/attack_protection'
|
|
28
|
+
require 'auth0/api/v2/sessions'
|
|
22
29
|
|
|
23
30
|
module Auth0
|
|
24
31
|
module Api
|
|
25
32
|
# https://auth0.com/docs/apiv2
|
|
26
33
|
module V2
|
|
34
|
+
include Auth0::Api::V2::Grants
|
|
35
|
+
include Auth0::Api::V2::Actions
|
|
27
36
|
include Auth0::Api::V2::Anomaly
|
|
28
37
|
include Auth0::Api::V2::Blacklists
|
|
38
|
+
include Auth0::Api::V2::Branding
|
|
29
39
|
include Auth0::Api::V2::Clients
|
|
30
40
|
include Auth0::Api::V2::ClientGrants
|
|
31
41
|
include Auth0::Api::V2::Connections
|
|
32
42
|
include Auth0::Api::V2::DeviceCredentials
|
|
33
43
|
include Auth0::Api::V2::Emails
|
|
44
|
+
include Auth0::Api::V2::Guardian
|
|
34
45
|
include Auth0::Api::V2::Jobs
|
|
46
|
+
include Auth0::Api::V2::Logs
|
|
47
|
+
include Auth0::Api::V2::LogStreams
|
|
35
48
|
include Auth0::Api::V2::Prompts
|
|
49
|
+
include Auth0::Api::V2::Organizations
|
|
50
|
+
include Auth0::Api::V2::RefreshTokens
|
|
36
51
|
include Auth0::Api::V2::Rules
|
|
37
52
|
include Auth0::Api::V2::Roles
|
|
38
53
|
include Auth0::Api::V2::Stats
|
|
39
54
|
include Auth0::Api::V2::Users
|
|
40
55
|
include Auth0::Api::V2::UsersByEmail
|
|
41
56
|
include Auth0::Api::V2::UserBlocks
|
|
57
|
+
include Auth0::Api::V2::ResourceServers
|
|
42
58
|
include Auth0::Api::V2::Tenants
|
|
43
59
|
include Auth0::Api::V2::Tickets
|
|
44
|
-
include Auth0::Api::V2::
|
|
45
|
-
include Auth0::Api::V2::
|
|
46
|
-
include Auth0::Api::V2::ResourceServers
|
|
47
|
-
include Auth0::Api::V2::Guardian
|
|
60
|
+
include Auth0::Api::V2::AttackProtection
|
|
61
|
+
include Auth0::Api::V2::Sessions
|
|
48
62
|
end
|
|
49
63
|
end
|
|
50
64
|
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'jwt'
|
|
4
|
+
|
|
5
|
+
module Auth0
|
|
6
|
+
module ClientAssertion
|
|
7
|
+
CLIENT_ASSERTION_TYPE = 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer'.freeze
|
|
8
|
+
|
|
9
|
+
# Adds keys into the supplied hash for either the client secret, or client assertion. If `client_assertion_signing_key` is not nil,
|
|
10
|
+
# it takes precedence over `client_secret`.
|
|
11
|
+
# @param [hash] The hash to add the keys to
|
|
12
|
+
# @param client_id [string] The client ID
|
|
13
|
+
# @param client_secret [string] The client secret
|
|
14
|
+
# @param client_assertion_signing_key [PKey] The key used to sign the client assertion JWT
|
|
15
|
+
# @param client_assertion_signing_alg [string] The algorithm used when signing the client assertion JWT
|
|
16
|
+
def populate_client_assertion_or_secret(hash,
|
|
17
|
+
domain: @domain,
|
|
18
|
+
client_id: @client_id,
|
|
19
|
+
client_secret: @client_secret,
|
|
20
|
+
client_assertion_signing_key: @client_assertion_signing_key,
|
|
21
|
+
client_assertion_signing_alg: @client_assertion_signing_alg)
|
|
22
|
+
|
|
23
|
+
if !client_assertion_signing_key.nil?
|
|
24
|
+
# Create JWT
|
|
25
|
+
now = Time.now.to_i
|
|
26
|
+
|
|
27
|
+
payload = {
|
|
28
|
+
iss: client_id,
|
|
29
|
+
sub: client_id,
|
|
30
|
+
aud: "https://#{domain}/",
|
|
31
|
+
iat: now,
|
|
32
|
+
exp: now + 180,
|
|
33
|
+
jti: SecureRandom.uuid
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
jwt = JWT.encode payload, client_assertion_signing_key, client_assertion_signing_alg
|
|
37
|
+
|
|
38
|
+
hash[:client_assertion] = jwt
|
|
39
|
+
hash[:client_assertion_type] = Auth0::ClientAssertion::CLIENT_ASSERTION_TYPE
|
|
40
|
+
else
|
|
41
|
+
hash[:client_secret] = client_secret
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/auth0/exception.rb
CHANGED
|
@@ -38,25 +38,34 @@ module Auth0
|
|
|
38
38
|
class MissingUserId < Auth0::Exception; end
|
|
39
39
|
# exception for unset client_id
|
|
40
40
|
class MissingClientId < Auth0::Exception; end
|
|
41
|
+
# exception for unset organization_id
|
|
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
|
|
41
53
|
# exception for an unset parameter
|
|
42
54
|
class MissingParameter < Auth0::Exception; end
|
|
55
|
+
# exception for unset version_id
|
|
56
|
+
class MissingVersionId < Auth0::Exception; end
|
|
43
57
|
# Api v2 access denied
|
|
44
58
|
class AccessDenied < Auth0::HTTPError; end
|
|
45
59
|
# Invalid parameter passed, e.g. empty where ID is required
|
|
46
60
|
class InvalidParameter < Auth0::Exception; end
|
|
47
|
-
# Invalid
|
|
48
|
-
# or JWT for API v2/
|
|
61
|
+
# Invalid JWT
|
|
49
62
|
class InvalidCredentials < Auth0::Exception; end
|
|
50
63
|
# Invalid Auth0 API namespace
|
|
51
64
|
class InvalidApiNamespace < Auth0::Exception; end
|
|
52
65
|
# Auth0 API rate-limiting encountered
|
|
53
|
-
|
|
54
|
-
# of Auth0::HTTPError directly rather than Auth0::Unsupported.
|
|
55
|
-
# It's currently under Unsupported to avoid breaking compatibility
|
|
56
|
-
# with prior gem versions that treated 429 errors as unknown errors.
|
|
57
|
-
class RateLimitEncountered < Auth0::Unsupported
|
|
66
|
+
class RateLimitEncountered < Auth0::HTTPError
|
|
58
67
|
def reset
|
|
59
|
-
Time.at(headers[
|
|
68
|
+
Time.at(Integer(headers[:x_ratelimit_reset])).utc
|
|
60
69
|
end
|
|
61
70
|
end
|
|
62
71
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
ApiToken = Struct.new :access_token, :scope, :expires_in do
|
|
2
|
-
|
|
1
|
+
Auth0::ApiToken = Struct.new :access_token, :scope, :expires_in do
|
|
3
2
|
def token
|
|
4
3
|
access_token
|
|
5
4
|
end
|
|
@@ -7,4 +6,4 @@ ApiToken = Struct.new :access_token, :scope, :expires_in do
|
|
|
7
6
|
def scopes
|
|
8
7
|
scope.split
|
|
9
8
|
end
|
|
10
|
-
end
|
|
9
|
+
end
|
|
@@ -1,46 +1,55 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'addressable/uri'
|
|
4
|
+
require 'retryable'
|
|
5
|
+
require_relative '../exception'
|
|
2
6
|
|
|
3
7
|
module Auth0
|
|
4
8
|
module Mixins
|
|
5
9
|
# here's the proxy for Rest calls based on rest-client, we're building all request on that gem
|
|
6
10
|
# for now, if you want to feel free to use your own http client
|
|
7
11
|
module HTTPProxy
|
|
8
|
-
attr_accessor :headers, :base_uri, :timeout
|
|
12
|
+
attr_accessor :headers, :base_uri, :timeout, :retry_count
|
|
13
|
+
|
|
14
|
+
DEFAULT_RETRIES = 3
|
|
15
|
+
MAX_ALLOWED_RETRIES = 10
|
|
16
|
+
MAX_REQUEST_RETRY_JITTER = 250
|
|
17
|
+
MAX_REQUEST_RETRY_DELAY = 1000
|
|
18
|
+
MIN_REQUEST_RETRY_DELAY = 250
|
|
19
|
+
BASE_DELAY = 100
|
|
9
20
|
|
|
10
21
|
# proxying requests from instance methods to HTTP class methods
|
|
11
|
-
%i
|
|
12
|
-
define_method(method) do |
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
elsif method == :post_file
|
|
28
|
-
body.merge!(multipart: true)
|
|
29
|
-
call(:post, url(safe_path), timeout, headers, body)
|
|
30
|
-
else
|
|
31
|
-
call(method, url(safe_path), timeout, headers, body.to_json)
|
|
32
|
-
end
|
|
33
|
-
case result.code
|
|
34
|
-
when 200...226 then safe_parse_json(result.body)
|
|
35
|
-
when 400 then raise Auth0::BadRequest.new(result.body, code: result.code, headers: result.headers)
|
|
36
|
-
when 401 then raise Auth0::Unauthorized.new(result.body, code: result.code, headers: result.headers)
|
|
37
|
-
when 403 then raise Auth0::AccessDenied.new(result.body, code: result.code, headers: result.headers)
|
|
38
|
-
when 404 then raise Auth0::NotFound.new(result.body, code: result.code, headers: result.headers)
|
|
39
|
-
when 429 then raise Auth0::RateLimitEncountered.new(result.body, code: result.code, headers: result.headers)
|
|
40
|
-
when 500 then raise Auth0::ServerError.new(result.body, code: result.code, headers: result.headers)
|
|
41
|
-
else raise Auth0::Unsupported.new(result.body, code: result.code, headers: result.headers)
|
|
42
|
-
end
|
|
22
|
+
%i[get post post_file post_form put patch delete delete_with_body].each do |method|
|
|
23
|
+
define_method(method) do |uri, body = {}, extra_headers = {}|
|
|
24
|
+
body = safe_merge_body(body, extra_headers)
|
|
25
|
+
token = get_token
|
|
26
|
+
authorization_header(token) unless token.nil?
|
|
27
|
+
request_with_retry(method, uri, body, extra_headers)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def retry_options
|
|
32
|
+
sleep_timer = lambda do |attempt|
|
|
33
|
+
wait = BASE_DELAY * (2**attempt - 1) # Exponential delay with each subsequent request attempt.
|
|
34
|
+
wait += rand(wait + 1..wait + MAX_REQUEST_RETRY_JITTER) # Add jitter to the delay window.
|
|
35
|
+
wait = [MAX_REQUEST_RETRY_DELAY, wait].min # Cap delay at MAX_REQUEST_RETRY_DELAY.
|
|
36
|
+
wait = [MIN_REQUEST_RETRY_DELAY, wait].max # Ensure delay is no less than MIN_REQUEST_RETRY_DELAY.
|
|
37
|
+
wait / 1000.to_f.round(2) # convert ms to seconds
|
|
43
38
|
end
|
|
39
|
+
|
|
40
|
+
tries = 1 + [Integer(retry_count || DEFAULT_RETRIES), MAX_ALLOWED_RETRIES].min # Cap retries at MAX_ALLOWED_RETRIES
|
|
41
|
+
|
|
42
|
+
{
|
|
43
|
+
tries: tries,
|
|
44
|
+
sleep: sleep_timer,
|
|
45
|
+
on: Auth0::RateLimitEncountered
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def encode_uri(uri)
|
|
50
|
+
# if a base_uri is set then the uri can be encoded as a path
|
|
51
|
+
path = base_uri ? Addressable::URI.new(path: uri).normalized_path : Addressable::URI.escape(uri)
|
|
52
|
+
url(path)
|
|
44
53
|
end
|
|
45
54
|
|
|
46
55
|
def url(path)
|
|
@@ -49,6 +58,7 @@ module Auth0
|
|
|
49
58
|
|
|
50
59
|
def add_headers(h = {})
|
|
51
60
|
raise ArgumentError, 'Headers must be an object which responds to #to_hash' unless h.respond_to?(:to_hash)
|
|
61
|
+
|
|
52
62
|
@headers ||= {}
|
|
53
63
|
@headers.merge!(h.to_hash)
|
|
54
64
|
end
|
|
@@ -59,6 +69,50 @@ module Auth0
|
|
|
59
69
|
body
|
|
60
70
|
end
|
|
61
71
|
|
|
72
|
+
def request_with_retry(method, uri, body = {}, extra_headers = {})
|
|
73
|
+
Retryable.retryable(retry_options) do
|
|
74
|
+
request(method, uri, body, extra_headers)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def request(method, uri, body = {}, extra_headers = {})
|
|
79
|
+
result = case method
|
|
80
|
+
when :get
|
|
81
|
+
@headers ||= {}
|
|
82
|
+
get_headers = @headers.merge({ params: body }).merge(extra_headers)
|
|
83
|
+
call(:get, encode_uri(uri), timeout, get_headers)
|
|
84
|
+
when :delete
|
|
85
|
+
@headers ||= {}
|
|
86
|
+
delete_headers = @headers.merge({ params: body })
|
|
87
|
+
call(:delete, encode_uri(uri), timeout, delete_headers)
|
|
88
|
+
when :delete_with_body
|
|
89
|
+
call(:delete, encode_uri(uri), timeout, headers, body.to_json)
|
|
90
|
+
when :post_file
|
|
91
|
+
body.merge!(multipart: true)
|
|
92
|
+
# Ignore the default Content-Type headers and let the HTTP client define them
|
|
93
|
+
post_file_headers = headers.except('Content-Type') unless headers.nil?
|
|
94
|
+
# Actual call with the altered headers
|
|
95
|
+
call(:post, encode_uri(uri), timeout, post_file_headers, body)
|
|
96
|
+
when :post_form
|
|
97
|
+
form_post_headers = headers.except('Content-Type') unless headers.nil?
|
|
98
|
+
call(:post, encode_uri(uri), timeout, form_post_headers, body.compact)
|
|
99
|
+
else
|
|
100
|
+
call(method, encode_uri(uri), timeout, headers, body.to_json)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
case result.code
|
|
104
|
+
when 200...226 then safe_parse_json(result.body)
|
|
105
|
+
when 400 then raise Auth0::BadRequest.new(result.body, code: result.code, headers: result.headers)
|
|
106
|
+
when 401 then raise Auth0::Unauthorized.new(result.body, code: result.code, headers: result.headers)
|
|
107
|
+
when 403 then raise Auth0::AccessDenied.new(result.body, code: result.code, headers: result.headers)
|
|
108
|
+
when 404 then raise Auth0::NotFound.new(result.body, code: result.code, headers: result.headers)
|
|
109
|
+
when 429 then raise Auth0::RateLimitEncountered.new(result.body, code: result.code,
|
|
110
|
+
headers: result.headers)
|
|
111
|
+
when 500 then raise Auth0::ServerError.new(result.body, code: result.code, headers: result.headers)
|
|
112
|
+
else raise Auth0::Unsupported.new(result.body, code: result.code, headers: result.headers)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
62
116
|
def call(method, url, timeout, headers, body = nil)
|
|
63
117
|
RestClient::Request.execute(
|
|
64
118
|
method: method,
|
|
@@ -70,11 +124,19 @@ module Auth0
|
|
|
70
124
|
rescue RestClient::Exception => e
|
|
71
125
|
case e
|
|
72
126
|
when RestClient::RequestTimeout
|
|
73
|
-
raise Auth0::RequestTimeout
|
|
127
|
+
raise Auth0::RequestTimeout, e.message
|
|
74
128
|
else
|
|
75
|
-
|
|
129
|
+
e.response
|
|
76
130
|
end
|
|
77
131
|
end
|
|
132
|
+
|
|
133
|
+
private
|
|
134
|
+
|
|
135
|
+
def safe_merge_body(body, extra = {})
|
|
136
|
+
return body unless body.is_a?(Hash)
|
|
137
|
+
merged = extra.any? ? body.merge(extra) : body
|
|
138
|
+
merged.compact
|
|
139
|
+
end
|
|
78
140
|
end
|
|
79
141
|
end
|
|
80
142
|
end
|
|
@@ -15,9 +15,13 @@ 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]
|
|
19
|
+
@client_assertion_signing_key = options[:client_assertion_signing_key]
|
|
20
|
+
@client_assertion_signing_alg = options[:client_assertion_signing_alg] || 'RS256';
|
|
18
21
|
extend Auth0::Api::AuthenticationEndpoints
|
|
19
22
|
@client_id = options[:client_id]
|
|
20
23
|
@client_secret = options[:client_secret]
|
|
24
|
+
@organization = options[:organization]
|
|
21
25
|
initialize_api(options)
|
|
22
26
|
end
|
|
23
27
|
|
|
@@ -40,7 +44,7 @@ module Auth0
|
|
|
40
44
|
private
|
|
41
45
|
|
|
42
46
|
def initialize_api(options)
|
|
43
|
-
|
|
47
|
+
initialize_v2(options)
|
|
44
48
|
raise InvalidCredentials, 'Must supply a valid API token' if @token.nil?
|
|
45
49
|
if options.fetch(:authorization, nil) == 'Basic'
|
|
46
50
|
authorization_header_basic(options)
|
|
@@ -57,14 +61,7 @@ module Auth0
|
|
|
57
61
|
|
|
58
62
|
def initialize_v2(options)
|
|
59
63
|
extend Auth0::Api::V2
|
|
60
|
-
|
|
61
|
-
@token = api_token.token if @token.nil? && @client_id && @client_secret
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def initialize_v1
|
|
65
|
-
extend Auth0::Api::V1
|
|
66
|
-
raise InvalidCredentials, 'Invalid API v1 client_id and client_secret' if @client_id.nil? || @client_secret.nil?
|
|
67
|
-
@token = obtain_access_token
|
|
64
|
+
initialize_token(options)
|
|
68
65
|
end
|
|
69
66
|
|
|
70
67
|
def api_v2?(options)
|