auth0 3.6.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +7 -0
  4. data/.rubocop_todo.yml +7 -0
  5. data/.travis.yml +12 -7
  6. data/CHANGELOG.md +10 -0
  7. data/Gemfile +4 -2
  8. data/Guardfile +13 -10
  9. data/LICENSE +2 -2
  10. data/README.md +9 -11
  11. data/Rakefile +33 -7
  12. data/auth0.gemspec +12 -12
  13. data/deploy_documentation.sh +29 -0
  14. data/doc_config/templates/default/fulldoc/html/css/full_list.css +79 -0
  15. data/doc_config/templates/default/fulldoc/html/css/style.css +546 -0
  16. data/doc_config/templates/default/layout/html/breadcrumb.erb +11 -0
  17. data/doc_config/templates/default/layout/html/footer.erb +115 -0
  18. data/doc_config/templates/default/layout/html/headers.erb +17 -0
  19. data/doc_config/templates/default/layout/html/layout.erb +27 -0
  20. data/lib/auth0.rb +5 -5
  21. data/lib/auth0/api/authentication_endpoints.rb +264 -46
  22. data/lib/auth0/api/v1.rb +5 -5
  23. data/lib/auth0/api/v1/clients.rb +7 -7
  24. data/lib/auth0/api/v1/connections.rb +9 -10
  25. data/lib/auth0/api/v1/logs.rb +9 -16
  26. data/lib/auth0/api/v1/rules.rb +5 -5
  27. data/lib/auth0/api/v1/users.rb +28 -27
  28. data/lib/auth0/api/v2.rb +17 -9
  29. data/lib/auth0/api/v2/blacklists.rb +30 -9
  30. data/lib/auth0/api/v2/clients.rb +60 -19
  31. data/lib/auth0/api/v2/connections.rb +63 -10
  32. data/lib/auth0/api/v2/emails.rb +58 -0
  33. data/lib/auth0/api/v2/jobs.rb +44 -7
  34. data/lib/auth0/api/v2/rules.rb +104 -0
  35. data/lib/auth0/api/v2/stats.rb +22 -5
  36. data/lib/auth0/api/v2/tenants.rb +39 -0
  37. data/lib/auth0/api/v2/tickets.rb +58 -0
  38. data/lib/auth0/api/v2/users.rb +128 -39
  39. data/lib/auth0/client.rb +8 -6
  40. data/lib/auth0/exception.rb +29 -23
  41. data/lib/auth0/mixins.rb +12 -10
  42. data/lib/auth0/mixins/httparty_proxy.rb +13 -10
  43. data/lib/auth0/mixins/initializer.rb +25 -27
  44. data/lib/auth0/version.rb +2 -2
  45. data/spec/integration/lib/auth0/api/v1/api_clients_spec.rb +2 -4
  46. data/spec/integration/lib/auth0/api/v1/api_users_spec.rb +25 -32
  47. data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +14 -0
  48. data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +61 -6
  49. data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +68 -42
  50. data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +71 -0
  51. data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +69 -0
  52. data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +83 -0
  53. data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +16 -0
  54. data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +37 -0
  55. data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +33 -0
  56. data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +88 -36
  57. data/spec/integration/lib/auth0/auth0_client_spec.rb +43 -35
  58. data/spec/lib/auth0/api/authentication_endpoints_spec.rb +253 -47
  59. data/spec/lib/auth0/api/v1/clients_spec.rb +37 -38
  60. data/spec/lib/auth0/api/v1/connections_spec.rb +44 -38
  61. data/spec/lib/auth0/api/v1/logs_spec.rb +24 -24
  62. data/spec/lib/auth0/api/v1/rules_spec.rb +23 -22
  63. data/spec/lib/auth0/api/v1/users_spec.rb +153 -130
  64. data/spec/lib/auth0/api/v2/blacklists_spec.rb +12 -11
  65. data/spec/lib/auth0/api/v2/clients_spec.rb +38 -33
  66. data/spec/lib/auth0/api/v2/connections_spec.rb +59 -34
  67. data/spec/lib/auth0/api/v2/emails_spec.rb +47 -0
  68. data/spec/lib/auth0/api/v2/jobs_spec.rb +24 -10
  69. data/spec/lib/auth0/api/v2/rules_spec.rb +69 -0
  70. data/spec/lib/auth0/api/v2/stats_spec.rb +11 -11
  71. data/spec/lib/auth0/api/v2/tenants_spec.rb +25 -0
  72. data/spec/lib/auth0/api/v2/tickets_spec.rb +31 -0
  73. data/spec/lib/auth0/api/v2/users_spec.rb +101 -39
  74. data/spec/lib/auth0/client_spec.rb +46 -58
  75. data/spec/lib/auth0/mixins/httparty_proxy_spec.rb +98 -69
  76. data/spec/lib/auth0/mixins/initializer_spec.rb +2 -2
  77. data/spec/spec_helper.rb +2 -2
  78. data/spec/spec_helper_full.rb +16 -15
  79. data/spec/spec_helper_unit.rb +5 -5
  80. data/spec/support/credentials.rb +9 -3
  81. data/spec/support/dummy_class.rb +7 -1
  82. data/spec/support/dummy_class_for_proxy.rb +2 -2
  83. data/spec/support/import_users.json +13 -0
  84. data/spec/support/stub_response.rb +1 -2
  85. metadata +78 -41
@@ -0,0 +1,11 @@
1
+ <div id="menu">
2
+ <% if @contents || @file %>
3
+ <% if object != '_index.html' %><a href="<%= url_for_index.gsub! '_index.html', 'index.html' %>">Index</a> &raquo; <% end %>
4
+ <span class="title"><%= @breadcrumb_title %></span>
5
+ <% elsif object.is_a?(CodeObjects::Base) %>
6
+ <a href="<%= url_for_index.gsub! '_index.html', 'index.html' %>"><% if object.root? || object.type == :method %>Index<% else %>Index (<%= object.name.to_s[0,1] %>)<% end %></a> &raquo;
7
+ <%= @breadcrumb.map {|obj| "<span class='title'>" + linkify(obj, obj.name) + "</span>" }.join(" &raquo; ") %>
8
+ <%= @breadcrumb.size > 0 ? " &raquo; " : "" %>
9
+ <span class="title"><%= object.root? ? "Top Level Namespace" : object.name(true) %></span>
10
+ <% end %>
11
+ </div>
@@ -0,0 +1,115 @@
1
+ <footer class="site-footer">
2
+ <div class="container">
3
+ <div class="logo">
4
+ <img src="https://cdn.auth0.com/styleguide/1.0.0/img/badge.png" width="30">
5
+ </div>
6
+ <div class="footer-grid">
7
+ <div class="column">
8
+ <div class="item">
9
+ <h6>Product</h6>
10
+ </div>
11
+ <div class="item">
12
+ <a href="https://auth0.com/pricing">Pricing</a>
13
+ </div>
14
+ <div class="item">
15
+ <a href="https://auth0.com/why-auth0">Why Auth0</a>
16
+ </div>
17
+ <div class="item">
18
+ <a href="https://auth0.com/how-it-works">How It Works</a>
19
+ </div>
20
+ </div>
21
+ <div class="column">
22
+ <div class="item">
23
+ <h6>Company</h6>
24
+ </div>
25
+ <div class="item">
26
+ <a href="https://auth0.com/about">About Us</a>
27
+ </div>
28
+ <div class="item">
29
+ <a href="https://auth0.com/blog">Blog</a>
30
+ </div>
31
+ <div class="item">
32
+ <a href="https://auth0.com/jobs">Jobs</a>
33
+ </div>
34
+ </div>
35
+ <div class="column">
36
+ <div class="item"><h6>Security</h6></div>
37
+ <div class="item">
38
+ <a href="https://auth0.com/availability-trust">Availability &amp; Trust</a>
39
+ </div>
40
+ <div class="item">
41
+ <a href="https://auth0.com/security">Security</a>
42
+ </div>
43
+ <div class="item">
44
+ <a href="https://auth0.com/whitehat">White Hat</a>
45
+ </div>
46
+ </div>
47
+ <div class="column">
48
+ <div class="item">
49
+ <h6>Learn</h6>
50
+ </div>
51
+ <div class="item">
52
+ <a href="https://auth0.com/support">Help &amp; Support</a>
53
+ </div>
54
+ <div class="item">
55
+ <a href="https://auth0.com/docs">Documentation</a>
56
+ </div>
57
+ <div class="item">
58
+ <a href="https://auth0.com/opensource">Open Source</a>
59
+ </div>
60
+ </div>
61
+ <div class="column">
62
+ <div class="item">
63
+ <h6>Extend</h6>
64
+ </div>
65
+ <div class="item">
66
+ <a href="https://auth0.com/lock">Lock</a>
67
+ </div>
68
+ <div class="item">
69
+ <a href="https://auth0.com/wordpress">WordPress</a>
70
+ </div>
71
+ <div class="item">
72
+ <a href="https://auth0.com/docs/apiv2">API Explorer</a>
73
+ </div>
74
+ </div>
75
+ <div class="contact">
76
+ <div class="column">
77
+ <div class="item">
78
+ <h6>Contact</h6>
79
+ </div>
80
+ <div class="item">
81
+ <a href="mailto:support@auth0.com">Email Us</a>
82
+ </div>
83
+ <div class="item item-text">10777 Main Street<br>Suite 204<br>Bellevue, WA 98004</div>
84
+ </div>
85
+ <div class="column no-heading">
86
+ <div class="item item-phone-label">Sales</div>
87
+ <div class="item"><a href="tel:+18882352699">+1 (888) 235-2699</a>
88
+ <a href="tel:+14253126521">+1 (425) 312-6521</a>
89
+ </div>
90
+ <div class="item item-phone-label">Support</div>
91
+ <div class="item"><a href="tel:+14255599554">+1 (425) 559-9554</a></div>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ <div class="colophon">
96
+ <div class="column">
97
+ <div class="social">
98
+ <div class="twitter">
99
+ <iframe allowtransparency="true" frameborder="0" scrolling="no" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=auth0" class="twitter"></iframe>
100
+ </div>
101
+ <div class="facebook">
102
+ <iframe src="http://www.facebook.com/plugins/like.php?href=https%3A%2F%2Ffacebook.com%2Fgetauth0&width&layout=button_count&action=like&show_faces=false&show_count=false&share=false&height=21&appId=507756515938786" scrolling="no" frameborder="0" allowtransparency="true" class="facebook"></iframe>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ <div class="column">
107
+ <ul class="list-inline text-right">
108
+ <li><a href="https://auth0.com/privacy">Privacy Policy</a></li>
109
+ <li><a href="https://auth0.com/terms">Terms of Service</a></li>
110
+ <li><span>© 2013-2016 Auth0 Inc. All Rights Reserved.</span></li>
111
+ </ul>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </footer>
@@ -0,0 +1,17 @@
1
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= charset %>" />
2
+ <title>
3
+ <%= h @page_title %>
4
+ <% if options.title && @page_title != options.title %>
5
+ &mdash; <%= h options.title %>
6
+ <% end %>
7
+ </title>
8
+ <link href="https://cdn.auth0.com/styleguide/latest/index.css" rel="stylesheet" />
9
+ <link href="https://cdn.auth0.com/web-header/latest/standalone.css" rel="stylesheet"/>
10
+ <script type="text/javascript" src="https://cdn.auth0.com/web-header/latest/standalone.min.js"></script>
11
+ <% stylesheets.each do |stylesheet| %>
12
+ <link rel="stylesheet" href="<%= url_for(stylesheet) %>" type="text/css" charset="utf-8" />
13
+ <% end %>
14
+ <%= erb :script_setup %>
15
+ <% javascripts.each do |javascript| %>
16
+ <script type="text/javascript" charset="utf-8" src="<%= url_for(javascript) %>"></script>
17
+ <% end %>
@@ -0,0 +1,27 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <%= erb(:headers) %>
6
+ </head>
7
+ <body>
8
+ <header class="site-header clearfix"></header>
9
+ <script type="text/javascript">(function() {
10
+ var header = new WebHeader({ base_url: 'https://auth0.com' });
11
+ header.render('header.site-header');
12
+ })();
13
+ </script>
14
+
15
+ <div id="header">
16
+ <%= erb(:breadcrumb) %>
17
+ <%= erb(:search) %>
18
+ <div class="clear"></div>
19
+ </div>
20
+
21
+ <iframe id="search_frame"></iframe>
22
+
23
+ <div id="content"><%= yieldall %></div>
24
+
25
+ <%= erb(:footer) %>
26
+ </body>
27
+ </html>
@@ -1,8 +1,8 @@
1
- require "auth0/version"
2
- require "auth0/mixins"
3
- require "auth0/exception"
4
- require "auth0/client"
5
- require "auth0_client"
1
+ require 'auth0/version'
2
+ require 'auth0/mixins'
3
+ require 'auth0/exception'
4
+ require 'auth0/client'
5
+ require 'auth0_client'
6
6
  # Namespace for ruby-auth0 logic
7
7
  module Auth0
8
8
  end
@@ -1,88 +1,306 @@
1
+ # rubocop:disable Metrics/ModuleLength
1
2
  module Auth0
2
3
  module Api
3
4
  # {https://auth0.com/docs/auth-api}
4
- # Describing functionality of auth0 authentication endpoints
5
+ # Methods to use the authentication endpoints
5
6
  module AuthenticationEndpoints
6
- # {https://auth0.com/docs/auth-api#!#post--oauth-access_token}
7
- def obtain_access_token
7
+ UP_AUTH = 'Username-Password-Authentication'
8
+ JWT_BEARER = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
9
+
10
+ # Retrives an access token
11
+ # @see https://auth0.com/docs/auth-api#!#post--oauth-access_token
12
+ # @param access_token [string] Social provider's access_token
13
+ # @param connection [string] Currently, this endpoint only works for Facebook, Google, Twitter and Weibo
14
+ # @return [json] Returns the access token
15
+ def obtain_access_token(access_token = nil, connection = 'facebook', scope = 'openid')
16
+ if access_token
17
+ request_params = { client_id: @client_id, access_token: access_token, connection: connection, scope: scope }
18
+ post('/oauth/access_token', request_params)['access_token']
19
+ else
20
+ request_params = { client_id: @client_id, client_secret: @client_secret, grant_type: 'client_credentials' }
21
+ post('/oauth/token', request_params)['access_token']
22
+ end
23
+ end
24
+
25
+ # Logins using username/password
26
+ # @see https://auth0.com/docs/auth-api#!#post--oauth-ro
27
+ # @param username [string] Username
28
+ # @param password [string] User's password
29
+ # @param scope [string] Defaults to openid. Can be 'openid name email', 'openid offline_access'
30
+ # @param id_token [string] Token's id
31
+ # @param connection_name [string] Connection name. Works for database connections, passwordless connections,
32
+ # Active Directory/LDAP, Windows Azure AD and ADF
33
+ # @return [json] Returns the access token and id token
34
+ def login(username, password, id_token = nil, connection_name = UP_AUTH, options = {})
35
+ fail Auth0::InvalidParameter, 'Must supply a valid username' if username.to_s.empty?
36
+ fail Auth0::InvalidParameter, 'Must supply a valid password' if password.to_s.empty?
8
37
  request_params = {
9
- client_id: @client_id,
10
- client_secret: @client_secret,
11
- grant_type: 'client_credentials'
38
+ client_id: @client_id,
39
+ username: username,
40
+ password: password,
41
+ scope: options.fetch(:scope, 'openid'),
42
+ connection: connection_name,
43
+ grant_type: options.fetch(:grant_type, password),
44
+ id_token: id_token,
45
+ device: options.fetch(:device, nil)
46
+ }
47
+ post('/oauth/ro', request_params)
48
+ end
49
+
50
+ # Signup using username/password
51
+ # @see https://auth0.com/docs/auth-api#!#post--dbconnections-signup
52
+ # @param email [string] User email
53
+ # @param password [string] User's password
54
+ # @param connection_name [string] Connection name. Works for database connections.
55
+ # @return [json] Returns the created user
56
+ def signup(email, password, connection_name = UP_AUTH)
57
+ fail Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
58
+ fail Auth0::InvalidParameter, 'Must supply a valid password' if password.to_s.empty?
59
+ request_params = {
60
+ client_id: @client_id,
61
+ email: email,
62
+ connection: connection_name,
63
+ password: password
12
64
  }
13
- post("/oauth/token", request_params)["access_token"]
65
+ post('/dbconnections/signup', request_params)
14
66
  end
15
67
 
16
- # {https://auth0.com/docs/auth-api#!#post--delegation}
17
- def delegation(id_token, target, scope = "openid", api_type = "app", extra_parameters = {})
68
+ # Asks to change a password for a given user.
69
+ # Send an email to the user.
70
+ # @see https://auth0.com/docs/auth-api#!#post--dbconnections-change_password
71
+ # @param email [string] User email
72
+ # @param password [string] User's new password
73
+ # @param connection_name [string] Connection name. Works for database connections.
74
+ def change_password(email, password, connection_name = UP_AUTH)
75
+ fail Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
18
76
  request_params = {
19
77
  client_id: @client_id,
20
- grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
78
+ email: email,
79
+ connection: connection_name,
80
+ password: password
81
+ }
82
+ post('/dbconnections/change_password', request_params)
83
+ end
84
+
85
+ # Start passwordless workflow sending an email
86
+ # @see https://auth0.com/docs/auth-api#!#post--with_email
87
+ # @param email [string] User email
88
+ # @param send [string] Defaults to 'link'. Can be 'code'. You can then authenticate with this user opening the link
89
+ # @param auth_params [hash] Append/override parameters to the link (like scope, redirect_uri, protocol, etc.)
90
+ def start_passwordless_email_flow(email, send = 'link', auth_params = {})
91
+ fail Auth0::InvalidParameter, 'Must supply a valid email' if email.to_s.empty?
92
+ request_params = {
93
+ client_id: @client_id,
94
+ email: email,
95
+ send: send,
96
+ auth_params: auth_params
97
+ }
98
+ post('/passwordless/start', request_params)
99
+ end
100
+
101
+ # Start passwordless workflow sending a SMS message
102
+ # @see https://auth0.com/docs/auth-api#!#post--with_sms
103
+ # @param phone_number [string] User's phone number.
104
+ def start_passwordless_sms_flow(phone_number)
105
+ fail Auth0::InvalidParameter, 'Must supply a valid phone number' if phone_number.to_s.empty?
106
+ request_params = {
107
+ client_id: @client_id,
108
+ connection: 'sms',
109
+ phone_number: phone_number
110
+ }
111
+ post('/passwordless/start', request_params)
112
+ end
113
+
114
+ # Logins using phone number/verification code.
115
+ # @see https://auth0.com/docs/auth-api#!#post--ro_with_sms
116
+ # @param phone_number [string] User's phone number.
117
+ # @param code [string] Verification code.
118
+ # @return [json] Returns the access token and id token
119
+ def phone_login(phone_number, code, scope = 'openid')
120
+ fail Auth0::InvalidParameter, 'Must supply a valid phone number' if phone_number.to_s.empty?
121
+ fail Auth0::InvalidParameter, 'Must supply a valid code' if code.to_s.empty?
122
+ request_params = {
123
+ client_id: @client_id,
124
+ username: phone_number,
125
+ password: code,
126
+ scope: scope,
127
+ connection: 'sms',
128
+ grant_type: 'password'
129
+ }
130
+ post('/oauth/ro', request_params)
131
+ end
132
+
133
+ # Retrives the SAML 2.0 metadata
134
+ # @see https://auth0.com/docs/auth-api#!#get--samlp--client_id-
135
+ # @param client_id [string] Client id
136
+ # @return [xml] SAML 2.0 metadata
137
+ def saml_metadata(client_id)
138
+ fail Auth0::InvalidParameter, 'Must supply a valid client_id' if client_id.to_s.empty?
139
+ get("/samlp/metadata/#{client_id}")
140
+ end
141
+
142
+ # Retrives the WS-Federation metadata
143
+ # @see https://auth0.com/docs/auth-api#!#get--wsfed--client_id-
144
+ # @return [xml] Federation Metadata
145
+ def wsfed_metadata
146
+ get('/wsfed/FederationMetadata/2007-06/FederationMetadata.xml')
147
+ end
148
+
149
+ # Validates a JSON Web Token (signature and expiration)
150
+ # @see https://auth0.com/docs/auth-api#!#post--tokeninfo
151
+ # @param id_token [string] Token's id.
152
+ # @return User information associated with the user id (sub property) of the token.
153
+ def token_info(id_token)
154
+ fail Auth0::InvalidParameter, 'Must supply a valid id_token' if id_token.to_s.empty?
155
+ request_params = { id_token: id_token }
156
+ post('/tokeninfo', request_params)
157
+ end
158
+
159
+ # Refreshes a delegation token
160
+ # @see https://auth0.com/docs/auth-api#!#post--delegation
161
+ # @param refresh_token [string] Token to refresh
162
+ # @param target [string] Target to sign the new token.
163
+ # @param scope [string] Defaults to openid. Can be 'openid name email'.
164
+ # @param api_type [string] Defaults to app. Can be aws, azure_sb, azure_blob, firebase, layer, salesforce_api,
165
+ # salesforce_sandbox_api, sap_api or wams
166
+ # @param extra_parameters [hash] Extra parameters.
167
+ # @return [json] Returns the refreshed delegation token
168
+ def refresh_delegation(refresh_token, target, scope = 'openid', api_type = 'app', extra_parameters = {})
169
+ fail Auth0::InvalidParameter, 'Must supply a valid token to refresh' if refresh_token.to_s.empty?
170
+ request_params = {
171
+ client_id: @client_id,
172
+ grant_type: JWT_BEARER,
173
+ refresh_token: refresh_token,
174
+ target: target,
175
+ api_type: api_type,
176
+ scope: scope
177
+ }.merge(extra_parameters)
178
+ post('/delegation', request_params)
179
+ end
180
+
181
+ # Retrives a delegation token
182
+ # @see https://auth0.com/docs/auth-api#!#post--delegation
183
+ # @param id_token [string] Token's id.
184
+ # @param target [string] Target to sign the new token.
185
+ # @param scope [string] Defaults to openid. Can be 'openid name email'.
186
+ # @param api_type [string] Defaults to app. Can be aws, azure_sb, azure_blob, firebase, layer, salesforce_api,
187
+ # salesforce_sandbox_api, sap_api or wams
188
+ # @param extra_parameters [hash] Extra parameters.
189
+ # @return [json] Returns the refreshed delegation token
190
+ def delegation(id_token, target, scope = 'openid', api_type = 'app', extra_parameters = {})
191
+ fail Auth0::InvalidParameter, 'Must supply a valid id_token' if id_token.to_s.empty?
192
+ request_params = {
193
+ client_id: @client_id,
194
+ grant_type: JWT_BEARER,
21
195
  id_token: id_token,
22
196
  target: target,
23
197
  api_type: api_type,
24
198
  scope: scope
25
199
  }.merge(extra_parameters)
26
- post("/delegation", request_params)
200
+ post('/delegation', request_params)
27
201
  end
28
202
 
29
- # {https://auth0.com/docs/auth-api#!#post--users--user_id--impersonate}
203
+ # Retrives an impersonation URL to login as another user
204
+ # @see https://auth0.com/docs/auth-api#!#post--users--user_id--impersonate
205
+ # @param user_id [string] Impersonate user id
206
+ # @param app_client_id [string] Application client id
207
+ # @param impersonator_id [string] Impersonator user id id.
208
+ # @param options [string] Additional Parameters
209
+ # @return [string] Impersonation URL
30
210
  def impersonate(user_id, app_client_id, impersonator_id, options)
211
+ fail Auth0::InvalidParameter, 'Must supply a valid user_id' if user_id.to_s.empty?
31
212
  request_params = {
32
- protocol: options.fetch(:protocol, "oauth2"),
213
+ protocol: options.fetch(:protocol, 'oauth2'),
33
214
  impersonator_id: impersonator_id,
34
215
  client_id: app_client_id,
35
- ttl: options.fetch(:ttl, 120),
36
216
  additionalParameters: {
37
- response_type: options.fetch(:response_type, "code"),
38
- state: options.fetch(:state, ""),
39
- scope: options.fetch(:scope, "openid"),
40
- callback_url: options.fetch(:callback_url, ""),
217
+ response_type: options.fetch(:response_type, 'code'),
218
+ state: options.fetch(:state, ''),
219
+ scope: options.fetch(:scope, 'openid'),
220
+ callback_url: options.fetch(:callback_url, '')
41
221
  }
42
222
  }
43
223
  post("/users/#{user_id}/impersonate", request_params)
44
224
  end
45
225
 
46
- # {https://auth0.com/docs/auth-api#!#post--oauth-ro}
47
- def login(username, password, scope = "openid", id_token=nil, connection_name="Username-Password-Authentication")
226
+ # Unlinks a User
227
+ # @see https://auth0.com/docs/auth-api#!#post--unlink
228
+ # @param access_token [string] Logged-in user access token
229
+ # @param user_id [string] User Id
230
+ def unlink_user(access_token, user_id)
231
+ fail Auth0::InvalidParameter, 'Must supply a valid access_token' if access_token.to_s.empty?
232
+ fail Auth0::InvalidParameter, 'Must supply a valid user_id' if user_id.to_s.empty?
48
233
  request_params = {
49
- client_id: @client_id,
50
- username: username,
51
- password: password,
52
- scope: scope,
53
- connection: connection_name,
54
- grant_type: "password",
55
- id_token: id_token
234
+ access_token: access_token,
235
+ user_id: user_id
236
+ }
237
+ post('/unlink', request_params)
238
+ end
239
+
240
+ # Returns the user information based on the Auth0 access token.
241
+ # @see https://auth0.com/docs/auth-api#!#get--userinfo
242
+ # @return [json] User information based on the Auth0 access token
243
+ def user_info
244
+ get('/userinfo')
245
+ end
246
+
247
+ # Returns an authorization URL, triggers a redirect.
248
+ # @see https://auth0.com/docs/auth-api#!#get--authorize_social
249
+ # @param redirect_uri [string] Url to redirect after authorization
250
+ # @param options [hash] Can contain response_type, connection, state and additional_parameters.
251
+ # @return [url] Authorization URL.
252
+ def authorization_url(redirect_uri, options = {})
253
+ fail Auth0::InvalidParameter, 'Must supply a valid redirect_uri' if redirect_uri.to_s.empty?
254
+ request_params = {
255
+ client_id: @client_id,
256
+ response_type: options.fetch(:connection, 'code'),
257
+ connection: options.fetch(:connection, nil),
258
+ redirect_url: redirect_uri,
259
+ state: options.fetch(:state, nil)
260
+ }.merge(options.fetch(:additional_parameters, {}))
261
+
262
+ URI::HTTPS.build(host: @domain, path: '/authorize', query: to_query(request_params))
263
+ end
264
+
265
+ # Returns an logout URL, triggers the logout flow.
266
+ # @see https://auth0.com/docs/auth-api#!#get--logout
267
+ # @param return_to [string] Url to redirect after authorization
268
+ # @return [url] Logout URL.
269
+ def logout_url(return_to)
270
+ request_params = {
271
+ returnTo: return_to
56
272
  }
57
- post("/oauth/ro", request_params)
273
+
274
+ URI::HTTPS.build(host: @domain, path: '/logout', query: to_query(request_params))
58
275
  end
59
276
 
60
- # {https://auth0.com/docs/auth-api#!#post--dbconnections-signup}
61
- def signup(email, password, connection_name= "Username-Password-Authentication")
277
+ # Returns a samlp URL. The SAML Request AssertionConsumerServiceURL will be used to POST back the assertion
278
+ # and it has to match with the application callback URL.
279
+ # @see https://auth0.com/docs/auth-api#get--samlp--client_id-
280
+ # @param connection [string] to login with a specific provider.
281
+ # @return [url] samlp URL.
282
+ def samlp_url(connection = UP_AUTH)
62
283
  request_params = {
63
- client_id: @client_id,
64
- email: email,
65
- connection: connection_name,
66
- password: password
284
+ connection: connection
67
285
  }
68
- post("/dbconnections/signup", request_params)
286
+ URI::HTTPS.build(host: @domain, path: "/samlp/#{@client_id}", query: to_query(request_params))
69
287
  end
70
288
 
71
- # {https://auth0.com/docs/auth-api#!#post--dbconnections-change_password}
72
- def change_password(email, password, connection_name = "Username-Password-Authentication")
289
+ # Returns a wsfed URL.
290
+ # @see https://auth0.com/docs/auth-api#get--wsfed--client_id-
291
+ # @param connection [string] to login with a specific provider.
292
+ # @return [url] wsfed URL.
293
+ def wsfed_url(connection = UP_AUTH)
73
294
  request_params = {
74
- client_id: @client_id,
75
- email: email,
76
- connection: connection_name,
77
- password: password
295
+ whr: connection
78
296
  }
79
- post("/dbconnections/change_password", request_params)
297
+ URI::HTTPS.build(host: @domain, path: "/wsfed/#{@client_id}", query: to_query(request_params))
80
298
  end
81
299
 
82
- # {https://auth0.com/docs/auth-api#!#post--tokeninfo}
83
- def token_info(id_token)
84
- request_params = { id_token: id_token}
85
- post("/tokeninfo", request_params)
300
+ private
301
+
302
+ def to_query(hash)
303
+ hash.map { |k, v| "#{k}=#{URI.escape(v)}" unless v.nil? }.reject(&:nil?).join('&')
86
304
  end
87
305
  end
88
306
  end