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.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/.bundle/config +3 -2
  3. data/.circleci/config.yml +44 -0
  4. data/.env.example +2 -0
  5. data/.github/CODEOWNERS +1 -0
  6. data/.github/ISSUE_TEMPLATE/config.yml +8 -0
  7. data/.github/ISSUE_TEMPLATE/feature_request.md +39 -0
  8. data/.github/ISSUE_TEMPLATE/report_a_bug.md +55 -0
  9. data/.github/PULL_REQUEST_TEMPLATE.md +35 -0
  10. data/.github/stale.yml +20 -0
  11. data/.gitignore +1 -2
  12. data/.rubocop.yml +2 -0
  13. data/.yardoc/checksums +22 -0
  14. data/.yardoc/complete +0 -0
  15. data/.yardoc/object_types +0 -0
  16. data/.yardoc/objects/root.dat +0 -0
  17. data/.yardoc/proxy_types +0 -0
  18. data/CHANGELOG.md +334 -19
  19. data/CODE_OF_CONDUCT.md +3 -0
  20. data/DEPLOYMENT.md +56 -9
  21. data/Gemfile +10 -3
  22. data/README.md +260 -37
  23. data/Rakefile +4 -23
  24. data/auth0.gemspec +10 -9
  25. data/codecov.yml +22 -0
  26. data/examples/ruby-api/.gitignore +0 -6
  27. data/lib/auth0/algorithm.rb +5 -0
  28. data/lib/auth0/api/authentication_endpoints.rb +244 -237
  29. data/lib/auth0/api/v2/anomaly.rb +36 -0
  30. data/lib/auth0/api/v2/branding.rb +66 -0
  31. data/lib/auth0/api/v2/client_grants.rb +14 -5
  32. data/lib/auth0/api/v2/clients.rb +9 -6
  33. data/lib/auth0/api/v2/connections.rb +19 -7
  34. data/lib/auth0/api/v2/device_credentials.rb +5 -4
  35. data/lib/auth0/api/v2/guardian.rb +142 -0
  36. data/lib/auth0/api/v2/jobs.rb +77 -13
  37. data/lib/auth0/api/v2/log_streams.rb +78 -0
  38. data/lib/auth0/api/v2/logs.rb +11 -11
  39. data/lib/auth0/api/v2/organizations.rb +335 -0
  40. data/lib/auth0/api/v2/prompts.rb +70 -0
  41. data/lib/auth0/api/v2/resource_servers.rb +32 -8
  42. data/lib/auth0/api/v2/roles.rb +172 -0
  43. data/lib/auth0/api/v2/rules.rb +6 -2
  44. data/lib/auth0/api/v2/tickets.rb +55 -8
  45. data/lib/auth0/api/v2/users.rb +168 -28
  46. data/lib/auth0/api/v2/users_by_email.rb +3 -2
  47. data/lib/auth0/api/v2.rb +16 -2
  48. data/lib/auth0/client.rb +1 -1
  49. data/lib/auth0/exception.rb +34 -9
  50. data/lib/auth0/mixins/access_token_struct.rb +20 -0
  51. data/lib/auth0/mixins/api_token_struct.rb +10 -0
  52. data/lib/auth0/mixins/headers.rb +35 -0
  53. data/lib/auth0/mixins/httpproxy.rb +37 -14
  54. data/lib/auth0/mixins/initializer.rb +10 -26
  55. data/lib/auth0/mixins/permission_struct.rb +3 -0
  56. data/lib/auth0/mixins/validation.rb +346 -0
  57. data/lib/auth0/mixins.rb +9 -1
  58. data/lib/auth0/version.rb +1 -1
  59. data/lib/auth0.rb +1 -0
  60. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_change_password/should_trigger_a_password_reset.yml +63 -0
  61. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_email.yml +54 -0
  62. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_incorrect_password.yml +54 -0
  63. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_fail_with_an_invalid_audience.yml +55 -0
  64. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_custom_audience.yml +117 -0
  65. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_login_with_resource_owner/should_login_successfully_with_a_default_scope.yml +119 -0
  66. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_saml_metadata/should_retrieve_SAML_metadata.yml +57 -0
  67. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_fail_as_not_authorized.yml +55 -0
  68. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_userinfo/should_return_the_userinfo.yml +118 -0
  69. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/_wsfed_metadata/should_retrieve_WSFED_metadata.yml +55 -0
  70. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/create_test_user.yml +58 -0
  71. data/spec/fixtures/vcr_cassettes/Auth0_Api_AuthenticationEndpoints/delete_test_user.yml +54 -0
  72. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_check_if_ip_is_blocked/should_return_200_response_code.yml +65 -0
  73. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Anomaly/_remove_ip_block/should_remove_an_IP_successfully.yml +60 -0
  74. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_add_token_to_blacklist/should_add_a_token_to_the_blacklist.yml +56 -0
  75. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Blacklists/_blacklisted_tokens/should_get_the_added_token_from_the_blacklist.yml +59 -0
  76. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_at_least_1_result.yml +62 -0
  77. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_first_page_of_one_result.yml +66 -0
  78. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_client_grants/should_return_the_test_client_grant.yml +62 -0
  79. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_delete_client_grant/should_delete_the_test_client_grant.yml +54 -0
  80. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/_patch_client_grant/should_update_the_test_client_grant.yml +64 -0
  81. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client.yml +118 -0
  82. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/create_test_client_grant.yml +64 -0
  83. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client.yml +54 -0
  84. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ClientGrants/delete_test_client_grant.yml +54 -0
  85. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_exclude_and_include_fields_properly.yml +91 -0
  86. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/_filters/should_include_the_specified_fields.yml +63 -0
  87. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_client/should_get_the_test_client.yml +92 -0
  88. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_fields_not_specified.yml +60 -0
  89. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_exclude_the_specified_fields.yml +132 -0
  90. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_include_the_specified_fields.yml +63 -0
  91. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/_filters/should_paginate_results.yml +65 -0
  92. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_clients/should_get_at_least_one_client.yml +132 -0
  93. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_delete_client/should_delete_the_test_client_without_an_error.yml +54 -0
  94. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +94 -0
  95. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/create_test_client.yml +118 -0
  96. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_exclude_the_fields_indicated.yml +63 -0
  97. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/_filters/should_include_the_fields_indicated.yml +61 -0
  98. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connection/should_find_the_correct_connection.yml +63 -0
  99. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_include_previously-created_connection_when_filtered.yml +59 -0
  100. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_exclude_the_fields_indicated_from_filtered_results.yml +59 -0
  101. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/_filters/should_should_include_the_fields_indicated_from_filtered_results.yml +59 -0
  102. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_include_the_previously_created_connection.yml +59 -0
  103. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_connections/should_not_be_empty.yml +59 -0
  104. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection/should_delete_the_connection.yml +54 -0
  105. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_delete_connection_user/should_delete_the_user_created.yml +110 -0
  106. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +66 -0
  107. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_connection.yml +65 -0
  108. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/create_test_user.yml +68 -0
  109. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_delete_device_credential/should_delete_the_test_credential_without_an_error.yml +54 -0
  110. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/_filter_by_type/should_exclude_the_test_credential.yml +59 -0
  111. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_have_at_least_1_entry.yml +62 -0
  112. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/_device_credentials/should_include_the_test_credential.yml +62 -0
  113. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_credential.yml +62 -0
  114. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/create_test_user.yml +68 -0
  115. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_credential.yml +54 -0
  116. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_DeviceCredentials/delete_test_user.yml +54 -0
  117. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_configure_provider/should_configure_a_new_email_provider.yml +63 -0
  118. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_delete_the_existing_email_provider_without_an_error.yml +54 -0
  119. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_delete_provider/should_throw_an_error_trying_to_get_the_email_provider.yml +51 -0
  120. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_with_specific_fields.yml +60 -0
  121. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/_filters/should_get_the_existing_email_provider_without_specific_fields.yml +61 -0
  122. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_get_provider/should_get_the_existing_email_provider.yml +61 -0
  123. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/_update_provider/should_update_the_existing_email_provider.yml +63 -0
  124. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Emails/delete_existing_provider.yml +54 -0
  125. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_create_an_export_users_job_successfully.yml +61 -0
  126. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_export_users_and_get_job/should_get_the_export_users_job.yml +117 -0
  127. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_create_an_import_users_job_successfully.yml +60 -0
  128. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_import_users_and_get_job/should_get_the_import_users_job.yml +116 -0
  129. 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
  130. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_get_the_completed_verification_email.yml +175 -0
  131. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/_send_verification_email_and_get_job/should_reject_an_invalid_client_id.yml +109 -0
  132. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/delete_imported_user.yml +110 -0
  133. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Jobs/search_for_connection_id.yml +59 -0
  134. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_match_the_created_log_entry.yml +265 -0
  135. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_log/should_not_be_empty.yml +265 -0
  136. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_fields_not_specified.yml +61 -0
  137. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_exclude_the_specified_fields.yml +75 -0
  138. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_have_one_log_entry.yml +76 -0
  139. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_filters/should_include_the_specified_fields.yml +62 -0
  140. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/_logs/_from/should_take_one_log_entry.yml +258 -0
  141. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/create_test_user.yml +68 -0
  142. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_disabled_rule.yml +54 -0
  143. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_enabled_rule.yml +54 -0
  144. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Logs/delete_test_user.yml +54 -0
  145. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_delete_resource_server/should_delete_the_test_server_without_an_error.yml +54 -0
  146. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_patch_resource_server/should_update_the_resource_server_with_the_correct_attributes.yml +61 -0
  147. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_server/should_get_the_test_server.yml +59 -0
  148. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_get_the_test_server.yml +59 -0
  149. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_at_least_1_result.yml +59 -0
  150. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/_resource_servers/should_return_the_first_page_of_one_result.yml +64 -0
  151. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/create_test_server.yml +61 -0
  152. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_ResourceServers/delete_test_server.yml +54 -0
  153. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_permissions/should_add_a_Permission_to_the_Role_successfully.yml +69 -0
  154. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_add_role_users/should_add_a_User_to_the_Role_successfully.yml +69 -0
  155. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_delete_role/should_delete_the_Role_successfully.yml +62 -0
  156. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role/should_get_the_Role_successfully.yml +67 -0
  157. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_exactly_1_Permission.yml +67 -0
  158. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_permissions/should_get_the_added_Permission_from_the_Role_successfully.yml +67 -0
  159. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_exactly_1_User.yml +67 -0
  160. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_role_users/should_get_the_added_User_from_the_Role_successfully.yml +67 -0
  161. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_get_roles/should_get_the_Role_successfully.yml +67 -0
  162. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_remove_role_permissions/should_remove_a_Permission_from_the_Role_successfully.yml +64 -0
  163. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/_update_role/should_update_the_Role_successfully.yml +69 -0
  164. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_api.yml +69 -0
  165. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_role.yml +69 -0
  166. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/create_test_user.yml +69 -0
  167. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_api.yml +62 -0
  168. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Roles/delete_test_user.yml +62 -0
  169. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_disabled_rule_without_an_error.yml +54 -0
  170. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_delete_rule/should_delete_the_test_enabled_rule_without_an_error.yml +54 -0
  171. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_fields_not_specified.yml +62 -0
  172. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_exclude_the_specified_fields.yml +62 -0
  173. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/_filters/should_include_the_specified_fields.yml +61 -0
  174. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rule/should_get_a_specific_rule.yml +62 -0
  175. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_exclude_fields_not_specified.yml +60 -0
  176. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_include_the_specified_fields.yml +61 -0
  177. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_disabled_rule.yml +63 -0
  178. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_at_least_1_enabled_rule.yml +62 -0
  179. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/_filters/should_return_paginated_results.yml +128 -0
  180. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_rules/should_return_at_least_1_rule.yml +64 -0
  181. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +64 -0
  182. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_disabled_rule.yml +65 -0
  183. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/create_test_enabled_rule.yml +65 -0
  184. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_active_users/should_have_at_least_one_active_user.yml +59 -0
  185. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Stats/_daily_stats/should_have_at_least_one_stats_entry_for_the_timeframe.yml +63 -0
  186. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings/should_get_the_tenant_settings.yml +95 -0
  187. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_exclude_a_field_not_requested.yml +61 -0
  188. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_get_tenant_settings_with_specific_fields/should_include_the_field_requested.yml +61 -0
  189. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +96 -0
  190. 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
  191. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_email_verification/should_create_an_email_verification_ticket.yml +63 -0
  192. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/_post_password_change/should_create_a_password_change_ticket.yml +63 -0
  193. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/create_test_user.yml +68 -0
  194. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tickets/delete_test_user.yml +54 -0
  195. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_permissions/should_add_a_Permissions_for_a_User_successfully.yml +67 -0
  196. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +62 -0
  197. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_User_successfully.yml +60 -0
  198. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_delete_user/should_delete_the_secondary_User_successfully.yml +60 -0
  199. 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
  200. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_enrollments/should_get_Enrollments_for_a_User_successfully.yml +65 -0
  201. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_exactly_1_Permission_for_a_User_successfully.yml +65 -0
  202. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_permissions/should_get_the_correct_Permission_for_a_User_successfully.yml +65 -0
  203. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_get_user_roles/should_get_Roles_for_a_User_successfully.yml +65 -0
  204. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_invalidate_browsers/should_invalidate_MFA_browsers_for_the_User_successfully.yml +62 -0
  205. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_link_user_account/should_link_two_Users_successfully.yml +67 -0
  206. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +68 -0
  207. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_permissions/should_remove_a_Permission_from_a_User_successfully.yml +62 -0
  208. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_remove_user_roles/should_remove_a_Role_from_a_User_successfully.yml +62 -0
  209. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_unlink_user_account/should_unlink_two_Users_successfully.yml +65 -0
  210. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_fields_not_indicated.yml +65 -0
  211. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_exclude_the_fields_indicated.yml +65 -0
  212. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/_filters/should_include_the_fields_indicated.yml +65 -0
  213. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user/should_retrieve_the_created_user.yml +65 -0
  214. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_user_logs/should_get_Logs_for_a_User_successfully.yml +69 -0
  215. 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
  216. 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
  217. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_exclude_the_indicated_fields_when_paginated.yml +65 -0
  218. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_include_the_indicated_fields_when_paginated.yml +65 -0
  219. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_not_include_other_fields_when_paginated.yml +65 -0
  220. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/_filters/should_return_the_correct_number_of_results_when_paginated.yml +65 -0
  221. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_users/should_have_at_least_one_user.yml +65 -0
  222. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_secondary_test_user.yml +67 -0
  223. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_api.yml +67 -0
  224. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_role.yml +67 -0
  225. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/create_test_user.yml +67 -0
  226. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_api.yml +60 -0
  227. data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/delete_test_role.yml +60 -0
  228. data/spec/integration/lib/auth0/api/api_authentication_spec.rb +96 -54
  229. data/spec/integration/lib/auth0/api/v2/api_anomaly_spec.rb +17 -0
  230. data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +18 -5
  231. data/spec/integration/lib/auth0/api/v2/api_client_grants_spec.rb +46 -33
  232. data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +115 -61
  233. data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +117 -103
  234. data/spec/integration/lib/auth0/api/v2/api_device_credentials_spec.rb +101 -58
  235. data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +72 -77
  236. data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +113 -60
  237. data/spec/integration/lib/auth0/api/v2/api_logs_spec.rb +46 -38
  238. data/spec/integration/lib/auth0/api/v2/api_resource_servers_spec.rb +110 -40
  239. data/spec/integration/lib/auth0/api/v2/api_roles_spec.rb +145 -0
  240. data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +119 -62
  241. data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +11 -14
  242. data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +40 -34
  243. data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +42 -28
  244. data/spec/integration/lib/auth0/api/v2/api_user_blocks_spec.rb +1 -1
  245. data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +252 -120
  246. data/spec/integration/lib/auth0/auth0_client_spec.rb +32 -26
  247. data/spec/lib/auth0/api/v2/anomaly_spec.rb +26 -0
  248. data/spec/lib/auth0/api/v2/branding_spec.rb +70 -0
  249. data/spec/lib/auth0/api/v2/client_grants_spec.rb +34 -2
  250. data/spec/lib/auth0/api/v2/clients_spec.rb +50 -5
  251. data/spec/lib/auth0/api/v2/connections_spec.rb +49 -1
  252. data/spec/lib/auth0/api/v2/guardian_spec.rb +154 -0
  253. data/spec/lib/auth0/api/v2/jobs_spec.rb +109 -6
  254. data/spec/lib/auth0/api/v2/log_streams_spec.rb +84 -0
  255. data/spec/lib/auth0/api/v2/organizations_spec.rb +593 -0
  256. data/spec/lib/auth0/api/v2/prompts_spec.rb +88 -0
  257. data/spec/lib/auth0/api/v2/resource_servers_spec.rb +23 -0
  258. data/spec/lib/auth0/api/v2/roles_spec.rb +362 -0
  259. data/spec/lib/auth0/api/v2/rules_spec.rb +23 -1
  260. data/spec/lib/auth0/api/v2/tickets_spec.rb +95 -5
  261. data/spec/lib/auth0/api/v2/users_spec.rb +465 -61
  262. data/spec/lib/auth0/client_spec.rb +196 -18
  263. data/spec/lib/auth0/mixins/httpproxy_spec.rb +83 -4
  264. data/spec/lib/auth0/mixins/initializer_spec.rb +1 -0
  265. data/spec/lib/auth0/mixins/validation_spec.rb +498 -0
  266. data/spec/spec_helper.rb +54 -11
  267. data/spec/support/credentials.rb +6 -18
  268. data/spec/support/dummy_class.rb +7 -3
  269. data/spec/support/dummy_class_for_proxy.rb +1 -0
  270. data/spec/support/stub_response.rb +1 -1
  271. metadata +497 -53
  272. data/.travis.yml +0 -18
  273. data/build_travis.sh +0 -7
  274. data/deploy_documentation.sh +0 -29
  275. data/doc_config/templates/default/fulldoc/html/css/full_list.css +0 -79
  276. data/doc_config/templates/default/fulldoc/html/css/style.css +0 -546
  277. data/doc_config/templates/default/layout/html/breadcrumb.erb +0 -11
  278. data/doc_config/templates/default/layout/html/footer.erb +0 -115
  279. data/doc_config/templates/default/layout/html/headers.erb +0 -17
  280. data/doc_config/templates/default/layout/html/layout.erb +0 -27
  281. data/lib/auth0/api/v1/clients.rb +0 -48
  282. data/lib/auth0/api/v1/connections.rb +0 -53
  283. data/lib/auth0/api/v1/logs.rb +0 -34
  284. data/lib/auth0/api/v1/rules.rb +0 -45
  285. data/lib/auth0/api/v1/users.rb +0 -164
  286. data/lib/auth0/api/v1.rb +0 -19
  287. data/spec/lib/auth0/api/authentication_endpoints_spec.rb +0 -348
  288. data/spec/spec_helper_full.rb +0 -45
  289. data/spec/spec_helper_unit.rb +0 -3
@@ -1,45 +1,59 @@
1
1
  require 'spec_helper'
2
2
  describe Auth0::Api::V2::Tickets do
3
- attr_reader :client, :user
3
+ attr_reader :client, :test_user
4
4
 
5
5
  before(:all) do
6
6
  @client = Auth0Client.new(v2_creds)
7
- username = Faker::Internet.user_name
8
- email = "#{entity_suffix}#{Faker::Internet.safe_email(username)}"
9
- password = Faker::Internet.password
10
- sleep 1
11
- @user = client.create_user(username, 'email' => email,
12
- 'password' => password,
13
- 'email_verified' => false,
14
- 'connection' => Auth0::Api::AuthenticationEndpoints::UP_AUTH,
15
- 'app_metadata' => {})
7
+ test_user_name = "#{entity_suffix}-username"
8
+
9
+ VCR.use_cassette('Auth0_Api_V2_Tickets/create_test_user') do
10
+ @test_user = client.create_user(
11
+ test_user_name,
12
+ 'email' => "#{entity_suffix}-#{test_user_name}@auth0.com",
13
+ 'password' => Faker::Internet.password,
14
+ 'connection' => Auth0::Api::AuthenticationEndpoints::UP_AUTH
15
+ )
16
+ end
16
17
  end
17
18
 
18
19
  after(:all) do
19
- sleep 1
20
- client.delete_user(user['user_id'])
20
+ VCR.use_cassette('Auth0_Api_V2_Tickets/delete_test_user') do
21
+ client.delete_user(test_user['user_id'])
22
+ end
21
23
  end
22
24
 
23
- describe '.post_email_verification' do
24
- let(:email_verification) do
25
- sleep 1
26
- client.post_email_verification(user['user_id'], result_url: 'http://myapp.com/callback')
25
+ describe '.post_email_verification', vcr: true do
26
+ it 'should create an email verification ticket' do
27
+ expect(
28
+ client.post_email_verification(
29
+ test_user['user_id'],
30
+ result_url: 'https://auth0.com/callback'
31
+ )
32
+ ).to include('ticket')
27
33
  end
28
- it do
29
- sleep 1
30
- expect(email_verification).to include('ticket')
34
+
35
+ it 'should raise an error if the user id is empty' do
36
+ expect do
37
+ client.post_email_verification( '' )
38
+ end.to raise_error Auth0::InvalidParameter, 'Must supply a valid user id to post an email verification'
31
39
  end
32
- end
33
40
 
34
- describe '.post_password_change' do
35
- let(:password_change) do
36
- sleep 1
37
- client.post_password_change(new_password: 'secret', user_id: user['user_id'],
38
- result_url: 'http://myapp.com/callback')
41
+ it 'should raise an error if the identity supplied is not a Hash' do
42
+ expect do
43
+ client.post_email_verification( '', identity: 'not a hash')
44
+ end.to raise_error Auth0::InvalidParameter, 'Must supply a valid user id to post an email verification'
39
45
  end
40
- it do
41
- sleep 1
42
- expect(password_change).to include('ticket')
46
+ end
47
+
48
+ describe '.post_password_change', vcr: true do
49
+ it 'should create a password change ticket' do
50
+ expect(
51
+ client.post_password_change(
52
+ new_password: 'secret',
53
+ user_id: test_user['user_id'],
54
+ result_url: 'https://auth0.com/callback'
55
+ )
56
+ ).to include('ticket')
43
57
  end
44
58
  end
45
59
  end
@@ -6,7 +6,7 @@ describe Auth0::Api::V2::UserBlocks do
6
6
  before(:all) do
7
7
  @client = Auth0Client.new(v2_creds)
8
8
  username = Faker::Internet.user_name
9
- @email = "#{entity_suffix}#{Faker::Internet.safe_email(username)}"
9
+ @email = "#{entity_suffix}#{Faker::Internet.safe_email(name: username)}"
10
10
  password = Faker::Internet.password
11
11
  @user = client.create_user(username, 'email' => email,
12
12
  'password' => password,
@@ -1,168 +1,300 @@
1
1
  require 'spec_helper'
2
2
  describe Auth0::Api::V2::Users do
3
- let(:client) { Auth0Client.new(v2_creds) }
4
- let(:username) { Faker::Internet.user_name }
5
- let(:email) { "#{entity_suffix}#{Faker::Internet.safe_email(username)}" }
6
- let(:password) { Faker::Internet.password }
7
- let(:user) do
8
- sleep 1
9
- client.create_user(username, 'email' => email,
10
- 'password' => password,
11
- 'email_verified' => false,
12
- 'connection' => Auth0::Api::AuthenticationEndpoints::UP_AUTH,
13
- 'app_metadata' => {})
14
- end
15
-
16
- describe '.users' do
3
+
4
+ attr_reader :client, :test_user_name, :test_user_email, :test_user, :test_user_secondary,
5
+ :test_role, :test_api_name, :test_permission_name, :test_permission
6
+
7
+ before(:all) do
8
+ @client ||= Auth0::Client.new(v2_creds)
9
+
10
+ @test_user_name = "#{entity_suffix}-username"
11
+ @test_user_email = "#{entity_suffix}-#{@test_user_name}@auth0.com"
12
+
13
+ @test_api_name = "#{entity_suffix}-test-api-for-users"
14
+ @test_api_scope = 'test:scope'
15
+
16
+ @test_permission_name = "#{entity_suffix}-test-permission-for-users"
17
+ @test_permission = ::Auth0::Permission.new("#{entity_suffix}-test-permission-for-users", @test_api_name)
18
+
19
+ VCR.use_cassette('Auth0_Api_V2_Users/create_test_user') do
20
+ @test_user ||= client.create_user(
21
+ @test_user_name,
22
+ email: @test_user_email,
23
+ password: Faker::Internet.password,
24
+ connection: Auth0::Api::AuthenticationEndpoints::UP_AUTH
25
+ )
26
+ end
27
+
28
+ VCR.use_cassette('Auth0_Api_V2_Users/create_secondary_test_user') do
29
+ @test_user_secondary ||= client.create_user(
30
+ "#{test_user_name}-secondary",
31
+ email: "#{entity_suffix}-#{@test_user_name}-secondary@auth0.com",
32
+ password: Faker::Internet.password,
33
+ connection: Auth0::Api::AuthenticationEndpoints::UP_AUTH
34
+ )
35
+ end
36
+
37
+ VCR.use_cassette('Auth0_Api_V2_Users/create_test_api') do
38
+ @test_api ||= client.create_resource_server(
39
+ @test_api_name,
40
+ name: @test_api_name,
41
+ scopes: [{ value: @test_api_scope }]
42
+ )
43
+ end
44
+
45
+ VCR.use_cassette('Auth0_Api_V2_Users/create_test_role') do
46
+ @test_role ||= client.create_role(
47
+ "#{entity_suffix}-test-role-for-users",
48
+ description: 'Test role description'
49
+ )
50
+ end
51
+ end
52
+
53
+ after(:all) do
54
+ VCR.use_cassette('Auth0_Api_V2_Users/delete_test_api') do
55
+ client.delete_resource_server @test_api['id']
56
+ end
57
+
58
+ VCR.use_cassette('Auth0_Api_V2_Users/delete_test_role') do
59
+ client.delete_role @test_role['id']
60
+ end
61
+ end
62
+
63
+ describe '.create_user', vcr: true do
64
+ it 'should return the created user' do
65
+ expect(test_user).to include('user_id', 'email', 'email_verified', 'name')
66
+ expect(test_user).to include(
67
+ 'email' => test_user_email,
68
+ 'name' => test_user_name,
69
+ 'email_verified' => false
70
+ )
71
+ end
72
+ end
73
+
74
+ describe '.users', vcr: true do
17
75
  let(:users) do
18
- sleep 1
19
76
  client.users
20
77
  end
21
78
 
22
- it do
23
- sleep 1
79
+ it 'should have at least one user' do
24
80
  expect(users.size).to be > 0
25
81
  end
26
82
 
27
83
  context '#filters' do
28
- it do
29
- sleep 1
84
+ it 'should return the correct number of results when paginated' do
30
85
  expect(client.users(per_page: 1).size).to be 1
31
86
  end
32
- it do
33
- sleep 1
87
+
88
+ it 'should include the indicated fields when paginated' do
34
89
  expect(
35
- client.users(per_page: 1, fields: [:picture, :email, :user_id].join(','), include_fields: true).first
90
+ client.users(
91
+ per_page: 1,
92
+ fields: [:picture, :email, :user_id].join(','),
93
+ include_fields: true
94
+ ).first
36
95
  ).to(include('email', 'user_id', 'picture'))
37
96
  end
38
- it do
39
- sleep 1
40
- expect(client.users(per_page: 1, fields: [:email].join(',')).first).to_not include('user_id', 'picture')
97
+
98
+ it 'should not include other fields when paginated' do
99
+ expect(
100
+ client.users(
101
+ per_page: 1,
102
+ fields: [:email].join(',')
103
+ ).first
104
+ ).to_not include('user_id', 'picture')
41
105
  end
42
- it do
43
- sleep 1
106
+
107
+ it 'should exclude the indicated fields when paginated' do
44
108
  expect(
45
- client.users(per_page: 1, fields: [:email].join(','), include_fields: false).first
109
+ client.users(
110
+ per_page: 1,
111
+ fields: [:email].join(','),
112
+ include_fields: false
113
+ ).first
46
114
  ).to include('user_id', 'picture')
47
115
  end
116
+
117
+ it 'is expected to find a user with a v2 search engine query' do
118
+ expect(
119
+ client.users(
120
+ per_page: 1,
121
+ fields: 'user_id',
122
+ q: "updated_at:{2016-01-01 TO *}",
123
+ search_engine: 'v2'
124
+ ).first
125
+ ).to include('user_id')
126
+ end
127
+
128
+ it 'is expected to find a user with a v3 search engine query' do
129
+ expect(
130
+ client.users(
131
+ per_page: 1,
132
+ fields: 'user_id',
133
+ q: "updated_at:[2016-01-01 TO *]",
134
+ search_engine: 'v3'
135
+ ).first
136
+ ).to include('user_id')
137
+ end
48
138
  end
49
139
  end
50
140
 
51
- describe '.user' do
52
- let(:subject) do
53
- sleep 1
54
- client.user(user['user_id'])
141
+ describe '.user', vcr: true do
142
+ it 'should retrieve the created user' do
143
+ expect(
144
+ client.user(test_user['user_id'])
145
+ ).to include(
146
+ 'email' => test_user_email,
147
+ 'name' => test_user_name
148
+ )
55
149
  end
56
150
 
57
- it do
58
- sleep 1
59
- should include('email' => email, 'name' => username)
151
+ context '#filters' do
152
+ it 'should include the fields indicated' do
153
+ expect(
154
+ client.user(
155
+ test_user['user_id'],
156
+ fields: [:picture, :email, :user_id].join(','),
157
+ include_fields: true
158
+ )
159
+ ).to include('email', 'user_id', 'picture')
160
+ end
161
+
162
+ it 'should exclude the fields indicated' do
163
+ expect(
164
+ client.user(
165
+ test_user['user_id'],
166
+ fields: [:picture, :email, :user_id].join(','),
167
+ include_fields: false
168
+ )
169
+ ).not_to include('picture', 'email', 'user_id')
170
+ end
171
+
172
+ it 'should exclude fields not indicated' do
173
+ expect(
174
+ client.user(
175
+ test_user['user_id'],
176
+ fields: [:email].join(','))
177
+ ).to_not include('user_id', 'picture')
178
+ end
60
179
  end
61
- it do
62
- sleep 1
63
- expect(
64
- client.user(user['user_id'], fields: [:picture, :email, :user_id].join(','), include_fields: true)
65
- ).to(include('email', 'user_id', 'picture'))
180
+ end
181
+
182
+ describe '.patch_user', vcr: true do
183
+ let(:patch_user_body) do
184
+ {
185
+ 'email_verified' => true,
186
+ 'user_metadata' => {
187
+ 'addresses' => { 'home_address' => '742 Evergreen Terrace' }
188
+ }
189
+ }
66
190
  end
67
- it do
68
- sleep 1
191
+
192
+ it 'should patch the User successfully' do
69
193
  expect(
70
- client.user(user['user_id'], fields: [:picture, :email, :user_id].join(','), include_fields: false)
71
- ).not_to(include('email', 'user_id', 'picture'))
194
+ client.patch_user(test_user['user_id'], patch_user_body)
195
+ ).to include(patch_user_body)
72
196
  end
197
+ end
73
198
 
74
- context '#filters' do
75
- it do
76
- sleep 1
77
- expect(client.user(user['user_id'], fields: [:picture, :email, :user_id].join(','))).to(
78
- include('email', 'user_id', 'picture')
79
- )
80
- end
81
- it do
82
- sleep 1
83
- expect(client.user(user['user_id'], fields: [:email].join(','))).to_not include('user_id', 'picture')
84
- end
199
+ describe '.delete_user_provider', vcr: true do
200
+ it 'should attempt to delete the MFA provider for the User' do
201
+ expect { client.delete_user_provider test_user['user_id'], 'google-authenticator' }.to_not raise_error
85
202
  end
86
203
  end
87
204
 
88
- describe '.create_user' do
89
- let(:subject) { user }
205
+ describe '.link_user_account', vcr: true do
206
+ let(:secondary_account_body) do
207
+ {
208
+ provider: 'auth0',
209
+ user_id: test_user_secondary['user_id']
210
+ }
211
+ end
90
212
 
91
- it do
92
- sleep 1
93
- should include('user_id', 'identities')
213
+ it 'should link two Users successfully' do
214
+ expect { client.link_user_account test_user['user_id'], secondary_account_body }.to_not raise_error
94
215
  end
95
- it do
96
- sleep 1
97
- expect(client.patch_user(user['user_id'], 'email_verified' => true)).to include('email_verified' => true)
216
+ end
217
+
218
+ describe '.unlink_user_account', vcr: true do
219
+ it 'should unlink two Users successfully' do
220
+ expect do
221
+ client.unlink_user_account test_user['user_id'], 'auth0', test_user_secondary['user_id']
222
+ end.to_not raise_error
98
223
  end
99
224
  end
100
225
 
101
- describe '.delete_user' do
102
- it do
103
- sleep 1
104
- expect { client.delete_user user['user_id'] }.to_not raise_error
226
+ describe '.user_logs', vcr: true do
227
+ it 'should get Logs for a User successfully' do
228
+ expect { client.user_logs( test_user['user_id'], per_page: 2 ) }.to_not raise_error
105
229
  end
106
- it do
107
- sleep 1
108
- expect { client.delete_user '' }.to raise_error(Auth0::MissingUserId)
230
+ end
231
+
232
+ describe '.add_user_roles', vcr: true do
233
+ it 'should add a Role to a User successfully' do
234
+ expect { client.add_user_roles test_user['user_id'], [ test_role['id'] ] }.to_not raise_error
109
235
  end
110
236
  end
111
237
 
112
- describe '.patch_user' do
113
- it do
114
- sleep 1
115
- expect(client.patch_user(user['user_id'], 'email_verified' => true)).to(include('email_verified' => true))
238
+ describe '.get_user_roles', vcr: true do
239
+ it 'should get Roles for a User successfully' do
240
+ expect( client.get_user_roles(test_user['user_id']).first ).to include(
241
+ 'id' => test_role['id']
242
+ )
116
243
  end
117
- let(:body_path) do
118
- {
119
- 'user_metadata' => {
120
- 'addresses' => { 'home_address' => '742 Evergreen Terrace' }
121
- }
122
- }
244
+ end
245
+
246
+ describe '.remove_user_roles', vcr: true do
247
+ it 'should remove a Role from a User successfully' do
248
+ expect { client.remove_user_roles test_user['user_id'], [ test_role['id'] ] }.to_not raise_error
123
249
  end
124
- it do
125
- sleep 1
126
- expect(
127
- client.patch_user(user['user_id'], body_path)
128
- ).to(include('user_metadata' => { 'addresses' => { 'home_address' => '742 Evergreen Terrace' } }))
129
- end
130
- end
131
-
132
- describe '.link_user_account and .unlink_users_account' do
133
- let(:email_link) { "#{entity_suffix}#{Faker::Internet.safe_email(Faker::Internet.user_name)}" }
134
- let!(:link_user) do
135
- sleep 1
136
- client.create_user(username, 'email' => email_link,
137
- 'password' => Faker::Internet.password,
138
- 'email_verified' => false,
139
- 'connection' => Auth0::Api::AuthenticationEndpoints::UP_AUTH,
140
- 'app_metadata' => {})
141
- end
142
- let(:email_primary) { "#{entity_suffix}#{Faker::Internet.safe_email(Faker::Internet.user_name)}" }
143
- let!(:primary_user) do
144
- sleep 1
145
- client.create_user(username, 'email' => email_primary,
146
- 'password' => Faker::Internet.password,
147
- 'email_verified' => false,
148
- 'connection' => Auth0::Api::AuthenticationEndpoints::UP_AUTH,
149
- 'app_metadata' => {})
150
- end
151
-
152
- let(:body_link) { { 'provider' => 'auth0', 'user_id' => link_user['user_id'] } }
153
- skip 'Link user account examples are skipped to avoid errors on users deletion' do
154
- it do
155
- expect(
156
- client.link_user_account(primary_user['user_id'], body_link).first
157
- ).to include('provider' => 'auth0', 'user_id' => primary_user['identities'].first['user_id'])
158
- end
250
+ end
159
251
 
160
- it do
161
- expect(
162
- client.unlink_users_account(primary_user['user_id'], 'auth0', link_user['user_id']).first
163
- ).to include('provider' => 'auth0', 'user_id' => primary_user['identities'].first['user_id'])
164
- end
252
+ describe '.get_enrollments', vcr: true do
253
+ it 'should get Enrollments for a User successfully' do
254
+ expect { client.get_enrollments test_user['user_id'] }.to_not raise_error
255
+ end
256
+ end
257
+
258
+ describe '.add_user_permissions', vcr: true do
259
+ it 'should add a Permissions for a User successfully' do
260
+ expect { client.add_user_permissions test_user['user_id'], [ test_permission ] }.to_not raise_error
261
+ end
262
+ end
263
+
264
+ describe '.get_user_permissions', vcr: true do
265
+ let(:test_get_user_permissions) do
266
+ client.get_user_permissions test_user['user_id']
267
+ end
268
+
269
+ it 'should get exactly 1 Permission for a User successfully' do
270
+ expect( test_get_user_permissions.count ).to eq 1
271
+ end
272
+
273
+ it 'should get the correct Permission for a User successfully' do
274
+ expect( test_get_user_permissions.first['permission_name'] ).to eq test_permission_name
275
+ expect( test_get_user_permissions.first['resource_server_name'] ).to eq test_api_name
276
+ end
277
+ end
278
+
279
+ describe '.remove_user_permissions', vcr: true do
280
+ it 'should remove a Permission from a User successfully' do
281
+ expect { client.remove_user_permissions test_user['user_id'], [ test_permission ] }.to_not raise_error
282
+ end
283
+ end
284
+
285
+ describe '.invalidate_browsers', vcr: true do
286
+ it 'should invalidate MFA browsers for the User successfully' do
287
+ expect { client.invalidate_browsers test_user['user_id'] }.to_not raise_error
165
288
  end
166
289
  end
167
290
 
291
+ describe '.delete_user', vcr: true do
292
+ it 'should delete the User successfully' do
293
+ expect { client.delete_user test_user['user_id'] }.to_not raise_error
294
+ end
295
+
296
+ it 'should delete the secondary User successfully' do
297
+ expect { client.delete_user test_user_secondary['user_id'] }.to_not raise_error
298
+ end
299
+ end
168
300
  end
@@ -10,59 +10,61 @@ describe Auth0::Client do
10
10
  end
11
11
  end
12
12
 
13
- it_should_behave_like 'invalid credentials', { namespace: 'samples.auth0.com' }, Auth0::InvalidCredentials
13
+ it_should_behave_like 'invalid credentials', {
14
+ namespace: 'samples.auth0.com'
15
+ }, Auth0::InvalidCredentials
16
+
14
17
  it_should_behave_like 'invalid credentials', {
15
18
  namespace: 'samples.auth0.com', client_id: 'client_id'
16
19
  }, Auth0::InvalidCredentials
20
+
17
21
  it_should_behave_like 'invalid credentials', {
18
22
  namespace: 'samples.auth0.com', client_secret: 'secret'
19
23
  }, Auth0::InvalidCredentials
24
+
20
25
  it_should_behave_like 'invalid credentials', {
21
26
  namespace: 'samples.auth0.com', api_version: 2
22
27
  }, Auth0::InvalidCredentials
23
- it_should_behave_like 'invalid credentials', {}
24
- it_should_behave_like 'invalid credentials', api_version: 2
25
- it_should_behave_like 'invalid credentials', api_version: 1
28
+
29
+ it_should_behave_like 'invalid credentials', {}, Auth0::InvalidApiNamespace
30
+
31
+ it_should_behave_like 'invalid credentials', {
32
+ api_version: 2
33
+ }, Auth0::InvalidApiNamespace
34
+
35
+ it_should_behave_like 'invalid credentials', {
36
+ api_version: 1
37
+ }, Auth0::InvalidApiNamespace
38
+
26
39
  it_should_behave_like 'invalid credentials', {
27
40
  client_id: 'client_id', client_secret: 'secret'
28
41
  }, Auth0::InvalidApiNamespace
42
+
29
43
  it_should_behave_like 'invalid credentials', {
30
44
  api_version: 2, token: 'token'
31
45
  }, Auth0::InvalidApiNamespace
32
46
 
33
- let(:valid_v1_credentials) do
34
- { client_id: ENV['CLIENT_ID'],
35
- client_secret: ENV['CLIENT_SECRET'],
36
- domain: ENV['DOMAIN'],
37
- api_version: 1 }
38
- end
39
- let(:token) { ENV['MASTER_JWT'] }
40
- let(:v2_credentials) { { domain: ENV['DOMAIN'] } }
47
+ let(:v2_credentials) { { domain: 'test.auth0.com' } }
41
48
 
42
49
  shared_examples 'valid credentials' do
43
50
  it { expect { Auth0Client.new(credentials) }.to_not raise_error }
44
51
  end
45
52
 
46
- it_should_behave_like 'invalid credentials' do
47
- let(:credentials) { valid_v1_credentials }
48
- end
49
53
  it_should_behave_like 'valid credentials' do
50
- let(:credentials) { v2_credentials.merge(token: token) }
54
+ let(:credentials) { v2_credentials.merge(token: 'TEST_API_TOKEN') }
51
55
  end
56
+
52
57
  it_should_behave_like 'valid credentials' do
53
- let(:credentials) { v2_credentials.merge(access_token: ENV['MASTER_JWT']) }
58
+ let(:credentials) { v2_credentials.merge(access_token: 'TEST_API_TOKEN') }
54
59
  end
55
60
 
56
61
  context 'client headers' do
57
62
  let(:client) { Auth0::Client.new(v2_credentials.merge(access_token: 'abc123', domain: 'myhost.auth0.com')) }
58
63
  let(:headers) { client.headers }
59
-
60
- let(:base64_token) do
61
- Base64.urlsafe_encode64('{"name":"ruby-auth0","version":"' + Auth0::VERSION + '"}')
62
- end
64
+ let(:telemetry) { JSON.parse(Base64::urlsafe_decode64(headers['Auth0-Client'])) }
63
65
 
64
66
  it 'has the correct headers present' do
65
- expect(headers.keys.sort).to eql(['Auth0-Client', 'Authorization', 'Content-Type', 'User-Agent'])
67
+ expect(headers.keys.sort).to eql(['Auth0-Client', 'Authorization', 'Content-Type'])
66
68
  end
67
69
 
68
70
  it 'uses the correct access token' do
@@ -73,12 +75,16 @@ describe Auth0::Client do
73
75
  expect(headers['Content-Type']).to eql 'application/json'
74
76
  end
75
77
 
76
- it 'sets the ruby version' do
77
- expect(headers['User-Agent']).to eql "Ruby/#{RUBY_VERSION}"
78
+ it 'should include the correct name in telemetry data' do
79
+ expect(telemetry['name']).to eq('ruby-auth0')
80
+ end
81
+
82
+ it 'should include the correct version in telemetry data' do
83
+ expect(telemetry['version']).to eq(Auth0::VERSION)
78
84
  end
79
85
 
80
- it 'sets the client version' do
81
- expect(headers['Auth0-Client']).to eql base64_token
86
+ it 'should include the correct env in telemetry data' do
87
+ expect(telemetry['env']['ruby']).to eq(RUBY_VERSION)
82
88
  end
83
89
  end
84
90
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ describe Auth0::Api::V2::Anomaly do
3
+ before :all do
4
+ dummy_instance = DummyClass.new
5
+ dummy_instance.extend(Auth0::Api::V2::Anomaly)
6
+ @instance = dummy_instance
7
+ end
8
+
9
+ context '.check_if_ip_is_blocked' do
10
+ it { expect(@instance).to respond_to(:check_if_ip_is_blocked) }
11
+ it 'expect client to send get to /api/v2/anomaly/blocks/ips/192.0.2.0' do
12
+ expect(@instance).to receive(:get).with('/api/v2/anomaly/blocks/ips/192.0.2.0')
13
+ expect { @instance.check_if_ip_is_blocked('192.0.2.0') }.not_to raise_error
14
+ end
15
+ it { expect { @instance.check_if_ip_is_blocked('') }.to raise_error('Must specify an IP') }
16
+ end
17
+
18
+ context '.remove_ip_block' do
19
+ it { expect(@instance).to respond_to(:remove_ip_block) }
20
+ it 'expect client to send delete to /api/v2/anomaly/blocks/ips/192.0.2.0' do
21
+ expect(@instance).to receive(:delete).with('/api/v2/anomaly/blocks/ips/192.0.2.0')
22
+ expect { @instance.remove_ip_block('192.0.2.0') }.not_to raise_error
23
+ end
24
+ it { expect { @instance.remove_ip_block('') }.to raise_error('Must specify an IP') }
25
+ end
26
+ end