auth0 3.6.1 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +7 -0
- data/.travis.yml +12 -7
- data/CHANGELOG.md +10 -0
- data/Gemfile +4 -2
- data/Guardfile +13 -10
- data/LICENSE +2 -2
- data/README.md +9 -11
- data/Rakefile +33 -7
- data/auth0.gemspec +12 -12
- data/deploy_documentation.sh +29 -0
- data/doc_config/templates/default/fulldoc/html/css/full_list.css +79 -0
- data/doc_config/templates/default/fulldoc/html/css/style.css +546 -0
- data/doc_config/templates/default/layout/html/breadcrumb.erb +11 -0
- data/doc_config/templates/default/layout/html/footer.erb +115 -0
- data/doc_config/templates/default/layout/html/headers.erb +17 -0
- data/doc_config/templates/default/layout/html/layout.erb +27 -0
- data/lib/auth0.rb +5 -5
- data/lib/auth0/api/authentication_endpoints.rb +264 -46
- data/lib/auth0/api/v1.rb +5 -5
- data/lib/auth0/api/v1/clients.rb +7 -7
- data/lib/auth0/api/v1/connections.rb +9 -10
- data/lib/auth0/api/v1/logs.rb +9 -16
- data/lib/auth0/api/v1/rules.rb +5 -5
- data/lib/auth0/api/v1/users.rb +28 -27
- data/lib/auth0/api/v2.rb +17 -9
- data/lib/auth0/api/v2/blacklists.rb +30 -9
- data/lib/auth0/api/v2/clients.rb +60 -19
- data/lib/auth0/api/v2/connections.rb +63 -10
- data/lib/auth0/api/v2/emails.rb +58 -0
- data/lib/auth0/api/v2/jobs.rb +44 -7
- data/lib/auth0/api/v2/rules.rb +104 -0
- data/lib/auth0/api/v2/stats.rb +22 -5
- data/lib/auth0/api/v2/tenants.rb +39 -0
- data/lib/auth0/api/v2/tickets.rb +58 -0
- data/lib/auth0/api/v2/users.rb +128 -39
- data/lib/auth0/client.rb +8 -6
- data/lib/auth0/exception.rb +29 -23
- data/lib/auth0/mixins.rb +12 -10
- data/lib/auth0/mixins/httparty_proxy.rb +13 -10
- data/lib/auth0/mixins/initializer.rb +25 -27
- data/lib/auth0/version.rb +2 -2
- data/spec/integration/lib/auth0/api/v1/api_clients_spec.rb +2 -4
- data/spec/integration/lib/auth0/api/v1/api_users_spec.rb +25 -32
- data/spec/integration/lib/auth0/api/v2/api_blacklist_spec.rb +14 -0
- data/spec/integration/lib/auth0/api/v2/api_clients_spec.rb +61 -6
- data/spec/integration/lib/auth0/api/v2/api_connections_spec.rb +68 -42
- data/spec/integration/lib/auth0/api/v2/api_email_spec.rb +71 -0
- data/spec/integration/lib/auth0/api/v2/api_jobs_spec.rb +69 -0
- data/spec/integration/lib/auth0/api/v2/api_rules_spec.rb +83 -0
- data/spec/integration/lib/auth0/api/v2/api_stats_spec.rb +16 -0
- data/spec/integration/lib/auth0/api/v2/api_tenants_spec.rb +37 -0
- data/spec/integration/lib/auth0/api/v2/api_tickets_spec.rb +33 -0
- data/spec/integration/lib/auth0/api/v2/api_users_spec.rb +88 -36
- data/spec/integration/lib/auth0/auth0_client_spec.rb +43 -35
- data/spec/lib/auth0/api/authentication_endpoints_spec.rb +253 -47
- data/spec/lib/auth0/api/v1/clients_spec.rb +37 -38
- data/spec/lib/auth0/api/v1/connections_spec.rb +44 -38
- data/spec/lib/auth0/api/v1/logs_spec.rb +24 -24
- data/spec/lib/auth0/api/v1/rules_spec.rb +23 -22
- data/spec/lib/auth0/api/v1/users_spec.rb +153 -130
- data/spec/lib/auth0/api/v2/blacklists_spec.rb +12 -11
- data/spec/lib/auth0/api/v2/clients_spec.rb +38 -33
- data/spec/lib/auth0/api/v2/connections_spec.rb +59 -34
- data/spec/lib/auth0/api/v2/emails_spec.rb +47 -0
- data/spec/lib/auth0/api/v2/jobs_spec.rb +24 -10
- data/spec/lib/auth0/api/v2/rules_spec.rb +69 -0
- data/spec/lib/auth0/api/v2/stats_spec.rb +11 -11
- data/spec/lib/auth0/api/v2/tenants_spec.rb +25 -0
- data/spec/lib/auth0/api/v2/tickets_spec.rb +31 -0
- data/spec/lib/auth0/api/v2/users_spec.rb +101 -39
- data/spec/lib/auth0/client_spec.rb +46 -58
- data/spec/lib/auth0/mixins/httparty_proxy_spec.rb +98 -69
- data/spec/lib/auth0/mixins/initializer_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/spec_helper_full.rb +16 -15
- data/spec/spec_helper_unit.rb +5 -5
- data/spec/support/credentials.rb +9 -3
- data/spec/support/dummy_class.rb +7 -1
- data/spec/support/dummy_class_for_proxy.rb +2 -2
- data/spec/support/import_users.json +13 -0
- data/spec/support/stub_response.rb +1 -2
- metadata +78 -41
data/lib/auth0/api/v2/users.rb
CHANGED
@@ -1,71 +1,160 @@
|
|
1
1
|
module Auth0
|
2
2
|
module Api
|
3
3
|
module V2
|
4
|
-
#
|
4
|
+
# Methods to use the users endpoints
|
5
5
|
module Users
|
6
|
-
|
7
|
-
|
6
|
+
attr_reader :users_path
|
7
|
+
|
8
|
+
# Retrieves a list of existing users.
|
9
|
+
# @see https://auth0.com/docs/api/v2#!/Users/get_users
|
10
|
+
# @param per_page [integer] The amount of entries per page. Default: 50. Max value: 100
|
11
|
+
# @param page [integer] The page number. Zero based
|
12
|
+
# @param include_totals [boolean] true if a query summary must be included in the result
|
13
|
+
# @param sort [string] The field to use for sorting. 1 == ascending and -1 == descending
|
14
|
+
# @param connection [string] Connection filter
|
15
|
+
# @param fields [string] A comma separated list of fields to include or exclude from the result.
|
16
|
+
# @param include_fields [boolean] if the fields specified are to be included in the result, false otherwise.
|
17
|
+
# @param q [string] Query in Lucene query string syntax. Only fields in app_metadata, user_metadata or the
|
18
|
+
# normalized user profile are searchable.
|
19
|
+
#
|
20
|
+
# @return [json] The list of existing users.
|
21
|
+
def users(options = {})
|
8
22
|
request_params = {
|
9
|
-
per_page: per_page,
|
10
|
-
page: page,
|
11
|
-
include_totals: include_totals,
|
12
|
-
sort: sort,
|
13
|
-
connection: connection,
|
14
|
-
fields: fields,
|
15
|
-
|
23
|
+
per_page: options.fetch(:per_page, nil),
|
24
|
+
page: options.fetch(:page, nil),
|
25
|
+
include_totals: options.fetch(:include_totals, nil),
|
26
|
+
sort: options.fetch(:sort, nil),
|
27
|
+
connection: options.fetch(:connection, nil),
|
28
|
+
fields: options.fetch(:fields, nil),
|
29
|
+
include_fields: options.fetch(:include_fields, nil),
|
30
|
+
q: options.fetch(:q, nil)
|
16
31
|
}
|
17
|
-
|
18
|
-
|
19
|
-
request_params[:search_engine] = :v2
|
20
|
-
end
|
21
|
-
|
22
|
-
path = "/api/v2/users"
|
23
|
-
get(path, request_params)
|
32
|
+
request_params[:search_engine] = :v2 if request_params[:q]
|
33
|
+
get(users_path, request_params)
|
24
34
|
end
|
25
|
-
|
35
|
+
alias_method :get_users, :users
|
26
36
|
|
27
|
-
#
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
# Creates a new user according to optional parameters received.
|
38
|
+
# The attribute connection is always mandatory but depending on the type of connection you are using there
|
39
|
+
# could be others too. For instance, Auth0 DB Connections require email and password.
|
40
|
+
# @see https://auth0.com/docs/api/v2#!/Users/post_users
|
41
|
+
# @param name [string] the user name
|
42
|
+
# @param connection [string] The connection the user belongs to
|
43
|
+
#
|
44
|
+
# @return [json]
|
45
|
+
def create_user(name, options = {})
|
46
|
+
request_params = Hash[options.map { |(k, v)| [k.to_sym, v] }]
|
31
47
|
request_params[:name] = name
|
32
|
-
post(
|
48
|
+
post(users_path, request_params)
|
33
49
|
end
|
34
50
|
|
35
|
-
#
|
51
|
+
# Delete all users - USE WITH CAUTION
|
52
|
+
# @see https://auth0.com/docs/api/v2#!/Users/delete_users
|
36
53
|
def delete_users
|
37
|
-
|
38
|
-
delete(path)
|
54
|
+
delete(users_path)
|
39
55
|
end
|
40
56
|
|
41
|
-
#
|
42
|
-
|
43
|
-
|
57
|
+
# Retrieves a user given a user_id
|
58
|
+
# @see https://auth0.com/docs/api/v2#!/Users/get_users_by_id
|
59
|
+
# @param user_id [string] The user_id of the user to retrieve
|
60
|
+
# @param fields [string] A comma separated list of fields to include or exclude from the result.
|
61
|
+
# @param include_fields [boolean] if the fields specified are to be included in the result, false otherwise.
|
62
|
+
#
|
63
|
+
# @return [json] the user with the given user_id if exists
|
64
|
+
def user(user_id, fields: nil, include_fields: true)
|
65
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
66
|
+
path = "#{users_path}/#{user_id}"
|
44
67
|
request_params = {
|
45
68
|
fields: fields,
|
69
|
+
include_fields: include_fields
|
46
70
|
}
|
47
71
|
get(path, request_params)
|
48
72
|
end
|
49
73
|
|
50
|
-
#
|
74
|
+
# Deletes a single user given its id
|
75
|
+
# @see https://auth0.com/docs/api/v2#!/Users/delete_users_by_id
|
76
|
+
# @param user_id [string] The user_id of the user to delete
|
51
77
|
def delete_user(user_id)
|
52
|
-
|
53
|
-
path = "
|
78
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
79
|
+
path = "#{users_path}/#{user_id}"
|
54
80
|
delete(path)
|
55
81
|
end
|
56
82
|
|
57
|
-
|
58
|
-
#
|
59
|
-
|
60
|
-
|
61
|
-
|
83
|
+
# Updates a user with the object's properties received in the optional parameters.
|
84
|
+
# These are the attributes that can be updated at the root level:
|
85
|
+
# blocked, email_verified, email, verify_email, password, phone_number, phone_verified,
|
86
|
+
# verify_password, user_metadata, app_metadata, username
|
87
|
+
# Some considerations:
|
88
|
+
# The properties of the new object will replace the old ones.
|
89
|
+
# The metadata fields are an exception to this rule (user_metadata and app_metadata). These properties are
|
90
|
+
# merged instead of being replaced but be careful, the merge only occurs on the first level.
|
91
|
+
# If you are updating email_verified, phone_verified, username or password you need to specify the connection
|
92
|
+
# property too.
|
93
|
+
# If your are updating email or phone_number you need to specify the connection and the client_id properties.
|
94
|
+
# @see https://auth0.com/docs/api/v2#!/Users/patch_users_by_id
|
95
|
+
# @param user_id [string] The user_id of the user to update.
|
96
|
+
# @param body [hash] The optional parametes to update
|
97
|
+
#
|
98
|
+
# @return [json] the updated user
|
99
|
+
def patch_user(user_id, body)
|
100
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
101
|
+
fail Auth0::InvalidParameter, 'Must supply a valid body' if body.to_s.empty?
|
102
|
+
path = "#{users_path}/#{user_id}"
|
103
|
+
patch(path, body)
|
62
104
|
end
|
63
105
|
|
64
|
-
#
|
106
|
+
# Delete a user's multifactor provider
|
107
|
+
# @see https://auth0.com/docs/api/v2#!/Users/delete_multifactor_by_provider
|
108
|
+
# @param user_id [string] The user_id of the user to delete
|
109
|
+
# @param provider_name [string] The multifactor provider. Supported values 'duo' or 'google-authenticator'
|
65
110
|
def delete_user_provider(user_id, provider_name)
|
66
|
-
|
111
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
112
|
+
fail Auth0::InvalidParameter, 'Must supply a valid provider name' if provider_name.to_s.empty?
|
113
|
+
path = "#{users_path}/#{user_id}/multifactor/#{provider_name}"
|
67
114
|
delete(path)
|
68
115
|
end
|
116
|
+
|
117
|
+
# Links the account specified in the body (secondary account) to the account specified by the id param
|
118
|
+
# of the URL (primary account).
|
119
|
+
# 1. With the authenticated primary account's JWT in the Authorization header, which has the
|
120
|
+
# update:current_user_identities scope. In this case only the link_with param is required in the body,
|
121
|
+
# containing the JWT obtained upon the secondary account's authentication.
|
122
|
+
# 2. With an API V2 generated token with update:users scope. In this case you need to send provider and user_id
|
123
|
+
# in the body. Optionally you can also send the connection_id param which is suitable for identifying a
|
124
|
+
# particular database connection for the 'auth0' provider.
|
125
|
+
# @see https://auth0.com/docs/api/v2#!/Users/post_identities
|
126
|
+
# @param user_id [string] The user_id of the primary identity where you are linking the secondary account to.
|
127
|
+
# @param body [string] the options to link the account to.
|
128
|
+
#
|
129
|
+
# @return [json] the new array of the primary account identities.
|
130
|
+
def link_user_account(user_id, body)
|
131
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
132
|
+
fail Auth0::InvalidParameter, 'Must supply a valid body' if body.to_s.empty?
|
133
|
+
path = "#{users_path}/#{user_id}/identities"
|
134
|
+
post(path, body)
|
135
|
+
end
|
136
|
+
|
137
|
+
# Unlink a user account
|
138
|
+
# @see https://auth0.com/docs/api/v2#!/Users/delete_provider_by_user_id
|
139
|
+
# @param user_id [string] The user_id of the user identity.
|
140
|
+
# @param provider [string] The type of identity provider.
|
141
|
+
# @param secondary_user_id [string] The unique identifier for the user for the identity.
|
142
|
+
#
|
143
|
+
# @return [json] the array of the unlinked account identities.
|
144
|
+
def unlink_users_account(user_id, provider, secondary_user_id)
|
145
|
+
fail Auth0::MissingUserId, 'Must supply a valid user_id' if user_id.to_s.empty?
|
146
|
+
fail Auth0::MissingUserId, 'Must supply a valid secondary user_id' if secondary_user_id.to_s.empty?
|
147
|
+
fail Auth0::InvalidParameter, 'Must supply a valid provider' if provider.to_s.empty?
|
148
|
+
path = "#{users_path}/#{user_id}/identities/#{provider}/#{secondary_user_id}"
|
149
|
+
delete(path)
|
150
|
+
end
|
151
|
+
|
152
|
+
private
|
153
|
+
|
154
|
+
# Users API path
|
155
|
+
def users_path
|
156
|
+
@users_path ||= '/api/v2/users'
|
157
|
+
end
|
69
158
|
end
|
70
159
|
end
|
71
160
|
end
|
data/lib/auth0/client.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Auth0
|
2
|
+
# Main class
|
3
|
+
# All Api calls are suposed to return hashes, but delete actions return strings.
|
4
|
+
class Client
|
5
|
+
include Auth0::Mixins
|
6
|
+
include HTTMultiParty
|
7
|
+
base_uri 'http://auth0.com'
|
8
|
+
end
|
7
9
|
end
|
data/lib/auth0/exception.rb
CHANGED
@@ -2,27 +2,33 @@ module Auth0
|
|
2
2
|
# Default exception in namespace of Auth0
|
3
3
|
# if you want to catch all exceptions, then you should use this one.
|
4
4
|
# Network exceptions are not included
|
5
|
-
class Exception
|
5
|
+
class Exception < StandardError; end
|
6
|
+
# exception for unauthorized requests, if you see it,
|
7
|
+
# probably Bearer Token is not set correctly
|
8
|
+
class Unauthorized < Auth0::Exception; end
|
9
|
+
# exception for not found resource, you query for an
|
10
|
+
# unexistent resource, or wrong path
|
11
|
+
class NotFound < Auth0::Exception; end
|
12
|
+
# exception for unknown error
|
13
|
+
class Unsupported < Auth0::Exception; end
|
14
|
+
# exception for server error
|
15
|
+
class ServerError < Auth0::Exception; end
|
16
|
+
# exception for incorrect request, you've sent wrong params
|
17
|
+
class BadRequest < Auth0::Exception; end
|
18
|
+
# exception for unset user_id, this might cause removal of
|
19
|
+
# all users, or other unexpected behaviour
|
20
|
+
class MissingUserId < Auth0::Exception; end
|
21
|
+
# exception for unset client_id
|
22
|
+
class MissingClientId < Auth0::Exception; end
|
23
|
+
# exception for an unset parameter
|
24
|
+
class MissingParameter < Auth0::Exception; end
|
25
|
+
# Api v2 access denied
|
26
|
+
class AccessDenied < Auth0::Exception; end
|
27
|
+
# Invalid parameter passed, e.g. empty where ID is required
|
28
|
+
class InvalidParameter < Auth0::Exception; end
|
29
|
+
# Invalid Auth0 credentials either client_id/secret for API v1
|
30
|
+
# or JWT for API v2/
|
31
|
+
class InvalidCredentials < Auth0::Exception; end
|
32
|
+
# Invalid Auth0 API namespace
|
33
|
+
class InvalidApiNamespace < Auth0::Exception; end
|
6
34
|
end
|
7
|
-
# exception for unauthorized requests, if you see it, probably Bearer Token is not set correctly
|
8
|
-
class Auth0::Unauthorized < Auth0::Exception; end
|
9
|
-
# exception for not found resource, you query for an unexistent resource, or wrong path
|
10
|
-
class Auth0::NotFound < Auth0::Exception; end
|
11
|
-
# exception for unknown error
|
12
|
-
class Auth0::Unsupported < Auth0::Exception; end
|
13
|
-
# exception for server error
|
14
|
-
class Auth0::ServerError < Auth0::Exception; end
|
15
|
-
# exception for incorrect request, you've sent wrong params
|
16
|
-
class Auth0::BadRequest < Auth0::Exception; end
|
17
|
-
# exception for unset user_id, this might cause removal of all users, or other unexpected bahaviour
|
18
|
-
class Auth0::MissingUserId < Auth0::Exception; end
|
19
|
-
# exception for an unset connection_id
|
20
|
-
class Auth0::MissingConnectionId < Auth0::Exception; end
|
21
|
-
# Api v2 access denied
|
22
|
-
class Auth0::AccessDenied < Auth0::Exception; end
|
23
|
-
# Invalid parameter passed, e.g. empty where ID is required
|
24
|
-
class Auth0::InvalidParameter < Auth0::Exception; end
|
25
|
-
# Invalid Auth0 credentials either client_id/secret for API v1 or JWT for API v2/
|
26
|
-
class Auth0::InvalidCredentials < Auth0::Exception; end
|
27
|
-
# Invalid Auth0 API namespace
|
28
|
-
class Auth0::InvalidApiNamespace < Auth0::Exception; end
|
data/lib/auth0/mixins.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
require '
|
1
|
+
require 'httmultiparty'
|
2
2
|
require 'uri'
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
require 'auth0/mixins/httparty_proxy'
|
4
|
+
require 'auth0/mixins/initializer'
|
5
|
+
require 'auth0/api/authentication_endpoints'
|
6
|
+
require 'auth0/api/v1'
|
7
|
+
require 'auth0/api/v2'
|
8
|
+
module Auth0
|
9
|
+
# Collecting dependencies here
|
10
|
+
module Mixins
|
11
|
+
include Auth0::Mixins::HTTPartyProxy
|
12
|
+
include Auth0::Mixins::Initializer
|
13
|
+
end
|
12
14
|
end
|
@@ -1,14 +1,17 @@
|
|
1
1
|
module Auth0
|
2
2
|
module Mixins
|
3
|
-
# here's the proxy for HTTParty, we're building all request on that gem
|
3
|
+
# here's the proxy for HTTParty, we're building all request on that gem
|
4
|
+
# for now, if you want to feel free to use your own http client
|
4
5
|
module HTTPartyProxy
|
5
6
|
# proxying requests from instance methods to HTTParty class methods
|
6
|
-
%i(get post put patch delete).each do |method|
|
7
|
-
define_method(method) do |path, body={}|
|
7
|
+
%i(get post post_file put patch delete).each do |method|
|
8
|
+
define_method(method) do |path, body = {}|
|
8
9
|
safe_path = URI.escape(path)
|
9
|
-
body = body.delete_if {|
|
10
|
+
body = body.delete_if { |_, v| v.nil? }
|
10
11
|
if method == :get
|
11
12
|
result = self.class.send(method, safe_path, query: body)
|
13
|
+
elsif method == :post_file
|
14
|
+
result = self.class.send(:post, safe_path, body: body, detect_mime_type: true)
|
12
15
|
else
|
13
16
|
result = self.class.send(method, safe_path, body: body.to_json)
|
14
17
|
end
|
@@ -20,13 +23,13 @@ module Auth0
|
|
20
23
|
end
|
21
24
|
case result.code
|
22
25
|
when 200...226 then response_body
|
23
|
-
when 400 then
|
24
|
-
when 401 then
|
25
|
-
when 403 then
|
26
|
-
when 404 then
|
27
|
-
when 500 then
|
26
|
+
when 400 then fail Auth0::BadRequest, response_body
|
27
|
+
when 401 then fail Auth0::Unauthorized, response_body
|
28
|
+
when 403 then fail Auth0::AccessDenied, response_body
|
29
|
+
when 404 then fail Auth0::NotFound, response_body
|
30
|
+
when 500 then fail Auth0::ServerError, response_body
|
28
31
|
else
|
29
|
-
|
32
|
+
fail Auth0::Unsupported, response_body
|
30
33
|
end
|
31
34
|
end
|
32
35
|
end
|
@@ -6,19 +6,14 @@ module Auth0
|
|
6
6
|
# accepts hash as parameter
|
7
7
|
# you can get all required fields from here: https://auth0.com/docs/auth-api
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# By Default API v2
|
10
10
|
def initialize(config)
|
11
|
-
options = Hash[config.map{|(k,v)| [k.to_sym,v]}]
|
12
|
-
|
13
|
-
raise InvalidApiNamespace, "Api namespace must supply an API domain" if domain.nil?
|
14
|
-
self.class.base_uri "https://#{domain}"
|
11
|
+
options = Hash[config.map { |(k, v)| [k.to_sym, v] }]
|
12
|
+
self.class.base_uri base_url(options)
|
15
13
|
self.class.headers client_headers(config)
|
16
|
-
|
17
|
-
@client_id
|
18
|
-
|
19
|
-
initialize_v1(options) if api_v1?(options)
|
20
|
-
raise InvalidCredentials, "Must supply a valid API token" if @token.nil?
|
21
|
-
self.class.headers "Authorization" => "Bearer #{@token}"
|
14
|
+
extend Auth0::Api::AuthenticationEndpoints
|
15
|
+
@client_id = options[:client_id]
|
16
|
+
initialize_api(options)
|
22
17
|
end
|
23
18
|
|
24
19
|
# including initializer in top of klass
|
@@ -28,14 +23,26 @@ module Auth0
|
|
28
23
|
|
29
24
|
private
|
30
25
|
|
26
|
+
def initialize_api(options)
|
27
|
+
api_v1?(options) ? initialize_v1(options) : initialize_v2(options)
|
28
|
+
fail InvalidCredentials, 'Must supply a valid API token' if @token.nil?
|
29
|
+
self.class.headers 'Authorization' => "Bearer #{@token}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def base_url(options)
|
33
|
+
@domain = options[:domain] || options[:namespace]
|
34
|
+
fail InvalidApiNamespace, 'Api namespace must supply an API domain' if @domain.to_s.empty?
|
35
|
+
"https://#{@domain}"
|
36
|
+
end
|
37
|
+
|
31
38
|
def client_headers(config)
|
32
|
-
client_info = JSON.dump(
|
39
|
+
client_info = JSON.dump(name: 'ruby-auth0', version: Auth0::VERSION)
|
33
40
|
|
34
41
|
headers = {
|
35
42
|
'Content-Type' => 'application/json'
|
36
43
|
}
|
37
44
|
|
38
|
-
|
45
|
+
unless config[:opt_out_sdk_info]
|
39
46
|
headers['User-Agent'] = "Ruby/#{RUBY_VERSION}"
|
40
47
|
headers['Auth0-Client'] = Base64.urlsafe_encode64(client_info)
|
41
48
|
end
|
@@ -43,32 +50,23 @@ module Auth0
|
|
43
50
|
headers
|
44
51
|
end
|
45
52
|
|
46
|
-
def api_domain(options)
|
47
|
-
options[:domain] || options[:namespace]
|
48
|
-
end
|
49
|
-
|
50
53
|
def initialize_v2(options)
|
51
|
-
|
54
|
+
extend Auth0::Api::V2
|
52
55
|
@token = options[:access_token] || options[:token]
|
53
56
|
end
|
54
57
|
|
55
58
|
def initialize_v1(options)
|
56
|
-
|
57
|
-
@client_secret
|
58
|
-
|
59
|
+
extend Auth0::Api::V1
|
60
|
+
@client_secret = options[:client_secret]
|
61
|
+
fail InvalidCredentials, 'Invalid API v1 client_id and client_secret' if @client_id.nil? || @client_secret.nil?
|
59
62
|
@token = obtain_access_token
|
60
63
|
end
|
61
64
|
|
62
|
-
def api_v2?(options)
|
63
|
-
options[:protocols].to_s.include?("v2") or options[:api_version] === 2
|
64
|
-
end
|
65
|
-
|
66
65
|
def api_v1?(options)
|
67
66
|
version = options[:api_version] || 1
|
68
67
|
protocol = options[:protocols].to_s
|
69
|
-
|
68
|
+
!protocol.include?('v2') && (protocol.include?('v1') || version == 1)
|
70
69
|
end
|
71
|
-
|
72
70
|
end
|
73
71
|
end
|
74
72
|
end
|
data/lib/auth0/version.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
describe Auth0::Api::V1::Clients do
|
3
|
-
|
4
3
|
let(:client) { Auth0Client.new(v1_creds) }
|
5
4
|
let(:global_client) { Auth0Client.new(v1_global_creds) }
|
6
5
|
let(:client_name) { "client#{entity_suffix}" }
|
7
6
|
|
8
7
|
it { expect(client.clients).to_not be_empty }
|
9
8
|
|
10
|
-
it { expect {client.create_client(client_name)}.to raise_error(Auth0::Unauthorized) }
|
9
|
+
it { expect { client.create_client(client_name) }.to raise_error(Auth0::Unauthorized) }
|
11
10
|
|
12
11
|
it { expect(global_client.create_client(client_name)).to_not be_nil }
|
13
|
-
|
14
12
|
end
|