sync_attr_with_auth0 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/sync_attr_with_auth0/auth0.rb +33 -0
- data/lib/sync_attr_with_auth0/model.rb +80 -56
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ea59d4081c3dac909f2961737233d4449dac051
|
4
|
+
data.tar.gz: 363875b8740c8d51ce939b39946e3b4f43b10698
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3f49ff99dac084c3d28d28ef4f0ca66055f60850d4d0c385985e1d7150b13e0f1c68a10b6d347634ed2314ec724f2350645508982c1ccd44c8f7b2674a5804f
|
7
|
+
data.tar.gz: b224370cc13a3992ec689979bbee330ca7578a44e2b14795487c75323f2fedb5fa08299c1dd7efd2d65c9481c40f99ef60d99f97a885d1a8d3fdabf284c22a46
|
@@ -1,6 +1,39 @@
|
|
1
1
|
module SyncAttrWithAuth0
|
2
2
|
module Auth0
|
3
|
+
require "auth0"
|
4
|
+
require "uuidtools"
|
3
5
|
|
6
|
+
def self.create_auth0_jwt
|
7
|
+
payload = {
|
8
|
+
'aud' => ENV['AUTH0_CLIENT_ID'],
|
9
|
+
'scopes' => {
|
10
|
+
'users' => {
|
11
|
+
'actions' => ['create', 'update', 'read']
|
12
|
+
}
|
13
|
+
},
|
14
|
+
'iat' => Time.now.to_i,
|
15
|
+
'jti' => UUIDTools::UUID.timestamp_create.to_s
|
16
|
+
}
|
17
|
+
|
18
|
+
jwt = JWT.encode(payload, ENV['AUTH0_CLIENT_SECRET'])
|
19
|
+
|
20
|
+
return jwt
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create_auth0_client
|
24
|
+
# v1
|
25
|
+
# auth0 = Auth0Client.new(client_id: ENV['AUTH0_CLIENT_ID'], client_secret: ENV['AUTH0_CLIENT_SECRET'], namespace: ENV['AUTH0_DOMAIN'])
|
26
|
+
|
27
|
+
# v2
|
28
|
+
auth0 = Auth0Client.new(api_version: 2, token: SyncAttrWithAuth0::Auth0.create_auth0_jwt, namespace: ENV['AUTH0_DOMAIN'])
|
29
|
+
|
30
|
+
return auth0
|
31
|
+
end
|
32
|
+
|
33
|
+
###
|
34
|
+
# This stuff is legacy now. It's probably best to remove this stuff once the
|
35
|
+
# auth0 API stuff is working.
|
36
|
+
###
|
4
37
|
def self.get_access_token
|
5
38
|
payload = {
|
6
39
|
"client_id" => ENV['AUTH0_CLIENT_ID'],
|
@@ -8,6 +8,7 @@ module SyncAttrWithAuth0
|
|
8
8
|
|
9
9
|
def sync_attr_with_auth0(options = {})
|
10
10
|
class_attribute :auth0_uid_att
|
11
|
+
class_attribute :auth0_name_att
|
11
12
|
class_attribute :auth0_email_att
|
12
13
|
class_attribute :auth0_password_att
|
13
14
|
class_attribute :auth0_email_verified_att
|
@@ -17,6 +18,7 @@ module SyncAttrWithAuth0
|
|
17
18
|
_options = merge_default_options(options)
|
18
19
|
|
19
20
|
self.auth0_uid_att = _options[:auth0_uid_att]
|
21
|
+
self.auth0_name_att = _options[:auth0_name_att]
|
20
22
|
self.auth0_email_att = _options[:auth0_email_att]
|
21
23
|
self.auth0_password_att = _options[:auth0_password_att]
|
22
24
|
self.auth0_email_verified_att = _options[:auth0_email_verified_att]
|
@@ -33,6 +35,7 @@ module SyncAttrWithAuth0
|
|
33
35
|
def merge_default_options(options)
|
34
36
|
_options = {
|
35
37
|
auth0_uid_att: :uid,
|
38
|
+
auth0_name_att: :name,
|
36
39
|
auth0_email_att: :email,
|
37
40
|
auth0_password_att: :password,
|
38
41
|
auth0_email_verified_att: :email_verified,
|
@@ -54,13 +57,26 @@ module SyncAttrWithAuth0
|
|
54
57
|
ok_to_validate = (self.respond_to?(:validate_with_auth0) and !self.validate_with_auth0.nil? ? self.validate_with_auth0 : true)
|
55
58
|
|
56
59
|
if ok_to_validate and self.email_changed?
|
57
|
-
# Get an access token
|
58
|
-
access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
59
|
-
|
60
|
-
response = SyncAttrWithAuth0::Auth0.make_request(
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
# # Get an access token
|
61
|
+
# access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
62
|
+
#
|
63
|
+
# response = SyncAttrWithAuth0::Auth0.make_request(
|
64
|
+
# access_token,
|
65
|
+
# 'get',
|
66
|
+
# "/api/users?search=email:#{self.send(auth0_email_att)}")
|
67
|
+
|
68
|
+
auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client
|
69
|
+
|
70
|
+
response = auth0.users(
|
71
|
+
1,
|
72
|
+
0,
|
73
|
+
nil,
|
74
|
+
nil,
|
75
|
+
auth0_connection_name,
|
76
|
+
nil,
|
77
|
+
nil,
|
78
|
+
"email:#{self.send(auth0_email_att)}"
|
79
|
+
)
|
64
80
|
|
65
81
|
return JSON.parse(response).empty?
|
66
82
|
end
|
@@ -81,8 +97,8 @@ module SyncAttrWithAuth0
|
|
81
97
|
end
|
82
98
|
|
83
99
|
if ok_to_sync
|
84
|
-
# Get an access token
|
85
|
-
access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
100
|
+
# # Get an access token
|
101
|
+
# access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
86
102
|
|
87
103
|
# Look for matches between what's changing
|
88
104
|
# and what needs to be transmitted to Auth0
|
@@ -113,11 +129,15 @@ module SyncAttrWithAuth0
|
|
113
129
|
'email_verified' => email_verified
|
114
130
|
}.merge(changes)
|
115
131
|
|
116
|
-
response = SyncAttrWithAuth0::Auth0.make_request(
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
132
|
+
# response = SyncAttrWithAuth0::Auth0.make_request(
|
133
|
+
# access_token,
|
134
|
+
# 'post',
|
135
|
+
# "/api/users",
|
136
|
+
# args)
|
137
|
+
|
138
|
+
auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client
|
139
|
+
|
140
|
+
response = auth0.create_user(self.send(auth0_name_att), args)
|
121
141
|
|
122
142
|
response = JSON.parse(response)
|
123
143
|
|
@@ -140,8 +160,8 @@ module SyncAttrWithAuth0
|
|
140
160
|
# If we find matches
|
141
161
|
unless matches.empty?
|
142
162
|
|
143
|
-
# Get an access token
|
144
|
-
access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
163
|
+
# # Get an access token
|
164
|
+
# access_token = SyncAttrWithAuth0::Auth0.get_access_token
|
145
165
|
|
146
166
|
# Figure out what needs to be sent to Auth0
|
147
167
|
changes = {}
|
@@ -156,46 +176,50 @@ module SyncAttrWithAuth0
|
|
156
176
|
|
157
177
|
# Don't try to update auth0 if the user doesn't have a uid
|
158
178
|
unless uid.nil?
|
159
|
-
# Determine if the email was changed
|
160
|
-
unless changes['email'].nil?
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
# Determine if the password was changed
|
180
|
-
unless changes['password'].nil?
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
end
|
192
|
-
|
193
|
-
# Patch the changes
|
194
|
-
response = SyncAttrWithAuth0::Auth0.make_request(
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
179
|
+
# # Determine if the email was changed
|
180
|
+
# unless changes['email'].nil?
|
181
|
+
# email = changes.delete('email')
|
182
|
+
#
|
183
|
+
# response = SyncAttrWithAuth0::Auth0.make_request(
|
184
|
+
# access_token,
|
185
|
+
# 'put',
|
186
|
+
# "/api/users/#{::URI.escape(uid)}/email",
|
187
|
+
# {
|
188
|
+
# 'email' => email,
|
189
|
+
# 'verify' => false # If the user were to fail to verify it would create a discrepency between auth0 and the local database
|
190
|
+
# })
|
191
|
+
#
|
192
|
+
# response = JSON.parse(response)
|
193
|
+
#
|
194
|
+
# # Update the record with the uid
|
195
|
+
# self.send("#{auth0_uid_att}=", response['user_id'])
|
196
|
+
# self.save
|
197
|
+
# end
|
198
|
+
#
|
199
|
+
# # Determine if the password was changed
|
200
|
+
# unless changes['password'].nil?
|
201
|
+
# password = changes.delete('password')
|
202
|
+
#
|
203
|
+
# response = SyncAttrWithAuth0::Auth0.make_request(
|
204
|
+
# access_token,
|
205
|
+
# 'put',
|
206
|
+
# "/api/users/#{::URI.escape(uid)}/password",
|
207
|
+
# {
|
208
|
+
# 'password' => password,
|
209
|
+
# 'verify' => true
|
210
|
+
# })
|
211
|
+
# end
|
212
|
+
#
|
213
|
+
# # Patch the changes
|
214
|
+
# response = SyncAttrWithAuth0::Auth0.make_request(
|
215
|
+
# access_token,
|
216
|
+
# 'patch',
|
217
|
+
# "/api/users/#{::URI.escape(uid)}/metadata",
|
218
|
+
# changes)
|
219
|
+
|
220
|
+
auth0 = SyncAttrWithAuth0::Auth0.create_auth0_client
|
221
|
+
|
222
|
+
response = auth0.patch_user(uid, changes)
|
199
223
|
end
|
200
224
|
|
201
225
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sync_attr_with_auth0
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick McGraw
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 2.1.5
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: auth0
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: jwt
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.0.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.0
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rails
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|