Skip to content

Commit

Permalink
Merge pull request #127 from auth0/linking-rules-fix
Browse files Browse the repository at this point in the history
Linking rules fix
  • Loading branch information
nicosabena authored Oct 12, 2017
2 parents ea130ea + 909c15f commit c1b3bc4
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 13 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rules-templates",
"version": "0.4.3",
"version": "0.4.4",
"description": "Auth0 Rules Repository =====",
"main": "./rules",
"scripts": {
Expand Down
4 changes: 2 additions & 2 deletions rules.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
"access control"
],
"description": "<p>This rule will link any accounts that have the same email address while merging metadata.</p>\n",
"code": "function (user, context, callback) {\n var request = require('[email protected]');\n var async = require('[email protected]');\n\n // Check if email is verified, we shouldn't automatically\n // merge accounts if this is not the case.\n if (!user.email_verified) {\n return callback(null, user, context);\n }\n var userApiUrl = auth0.baseUrl + '/users';\n\n request({\n url: userApiUrl,\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n qs: {\n search_engine: 'v2',\n q: 'email.raw:\"' + user.email + '\" AND email_verified: \"true\" -user_id:\"' + user.user_id + '\"',\n }\n },\n function(err, response, body) {\n if (err) return callback(err);\n if (response.statusCode !== 200) return callback(new Error(body));\n\n var data = JSON.parse(body);\n if (data.length > 1) {\n return callback(new Error('[!] Rule: Multiple user profiles already exist - cannot select base profile to link with'));\n }\n if (data.length === 0) {\n console.log('[-] Skipping link rule');\n return callback(null, user, context);\n }\n\n var originalUser = data[0];\n var user_id = user.user_id;\n var pipePos = user_id.indexOf('|');\n var provider = user_id.slice(0, pipePos);\n var newUserId = user_id.slice(pipePos + 1);\n\n user.app_metadata = user.app_metadata || {};\n user.user_metadata = user.user_metadata || {};\n auth0.users.updateAppMetadata(originalUser.user_id, user.app_metadata)\n .then(auth0.users.updateUserMetadata(originalUser.user_id, user.user_metadata))\n .then(function(){\n request.post({\n url: userApiUrl + '/' + originalUser.user_id + '/identities',\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n json: { provider: provider, user_id: newUserId }\n }, function(err, response, body) {\n if (response && response.statusCode >= 400) {\n return cb(new Error('Error linking account: ' + response.statusMessage));\n }\n context.primaryUser = originalUser.user_id;\n callback(null, user, context);\n });\n })\n .catch(function(err){\n cb(err);\n });\n });\n}"
"code": "function (user, context, callback) {\n var request = require('[email protected]');\n var async = require('[email protected]');\n\n // Check if email is verified, we shouldn't automatically\n // merge accounts if this is not the case.\n if (!user.email_verified) {\n return callback(null, user, context);\n }\n var userApiUrl = auth0.baseUrl + '/users';\n\n request({\n url: userApiUrl,\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n qs: {\n search_engine: 'v2',\n q: 'email.raw:\"' + user.email + '\" AND email_verified: \"true\" -user_id:\"' + user.user_id + '\"',\n }\n },\n function(err, response, body) {\n if (err) return callback(err);\n if (response.statusCode !== 200) return callback(new Error(body));\n\n var data = JSON.parse(body);\n if (data.length > 1) {\n return callback(new Error('[!] Rule: Multiple user profiles already exist - cannot select base profile to link with'));\n }\n if (data.length === 0) {\n console.log('[-] Skipping link rule');\n return callback(null, user, context);\n }\n\n var originalUser = data[0];\n var provider = user.identities[0].provider;\n var providerUserId = user.identities[0].user_id;\n\n user.app_metadata = user.app_metadata || {};\n user.user_metadata = user.user_metadata || {};\n auth0.users.updateAppMetadata(originalUser.user_id, user.app_metadata)\n .then(auth0.users.updateUserMetadata(originalUser.user_id, user.user_metadata))\n .then(function(){\n request.post({\n url: userApiUrl + '/' + originalUser.user_id + '/identities',\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n json: { provider: provider, user_id: providerUserId }\n }, function(err, response, body) {\n if (response && response.statusCode >= 400) {\n return cb(new Error('Error linking account: ' + response.statusMessage));\n }\n context.primaryUser = originalUser.user_id;\n callback(null, user, context);\n });\n })\n .catch(function(err){\n cb(err);\n });\n });\n}"
},
{
"id": "link-users-by-email",
Expand All @@ -108,7 +108,7 @@
"access control"
],
"description": "<p>This rule will link any accounts that have the same email address.</p>\n<blockquote>\n<p>Note: When linking accounts, only the metadata of the target user is saved. If you want to merge the metadata of the two accounts you must do that manually. See the document on <a href=\"https://auth0.com/docs/link-accounts\">Linking Accounts</a> for more details.</p>\n</blockquote>\n",
"code": "function (user, context, callback) {\n var request = require('[email protected]');\n // Check if email is verified, we shouldn't automatically\n // merge accounts if this is not the case.\n if (!user.email_verified) {\n return callback(null, user, context);\n }\n var userApiUrl = auth0.baseUrl + '/users';\n\n request({\n url: userApiUrl,\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n qs: {\n search_engine: 'v2',\n q: 'email.raw:\"' + user.email + '\" AND email_verified: \"true\" -user_id:\"' + user.user_id + '\"',\n }\n },\n function(err, response, body) {\n if (err) return callback(err);\n if (response.statusCode !== 200) return callback(new Error(body));\n\n var data = JSON.parse(body);\n if (data.length > 1) {\n return callback(new Error('[!] Rule: Multiple user profiles already exist - cannot select base profile to link with'));\n }\n if (data.length === 0) {\n console.log('[-] Skipping link rule');\n return callback(null, user, context);\n }\n\n var originalUser = data[0];\n var user_id = user.user_id;\n var pipePos = user_id.indexOf('|');\n var provider = user_id.slice(0, pipePos);\n var newUserId = user_id.slice(pipePos + 1);\n\n request.post({\n url: userApiUrl + '/' + originalUser.user_id + '/identities',\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n json: {\n provider: provider,\n user_id: newUserId\n }\n }, function(err, response, body) {\n if (response.statusCode >= 400) {\n return callback(new Error('Error linking account: ' + response.statusMessage));\n }\n context.primaryUser = originalUser.user_id;\n callback(null, user, context);\n });\n });\n}"
"code": "function (user, context, callback) {\n var request = require('[email protected]');\n // Check if email is verified, we shouldn't automatically\n // merge accounts if this is not the case.\n if (!user.email_verified) {\n return callback(null, user, context);\n }\n var userApiUrl = auth0.baseUrl + '/users';\n\n request({\n url: userApiUrl,\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n qs: {\n search_engine: 'v2',\n q: 'email.raw:\"' + user.email + '\" AND email_verified: \"true\" -user_id:\"' + user.user_id + '\"',\n }\n },\n function(err, response, body) {\n if (err) return callback(err);\n if (response.statusCode !== 200) return callback(new Error(body));\n\n var data = JSON.parse(body);\n if (data.length > 1) {\n return callback(new Error('[!] Rule: Multiple user profiles already exist - cannot select base profile to link with'));\n }\n if (data.length === 0) {\n console.log('[-] Skipping link rule');\n return callback(null, user, context);\n }\n\n var originalUser = data[0];\n var provider = user.identities[0].provider;\n var providerUserId = user.identities[0].user_id;\n\n request.post({\n url: userApiUrl + '/' + originalUser.user_id + '/identities',\n headers: {\n Authorization: 'Bearer ' + auth0.accessToken\n },\n json: {\n provider: provider,\n user_id: providerUserId\n }\n }, function(err, response, body) {\n if (response.statusCode >= 400) {\n return callback(new Error('Error linking account: ' + response.statusMessage));\n }\n context.primaryUser = originalUser.user_id;\n callback(null, user, context);\n });\n });\n}"
},
{
"id": "roles-creation",
Expand Down
8 changes: 3 additions & 5 deletions rules/link-users-by-email-with-metadata.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,8 @@ function (user, context, callback) {
}

var originalUser = data[0];
var user_id = user.user_id;
var pipePos = user_id.indexOf('|');
var provider = user_id.slice(0, pipePos);
var newUserId = user_id.slice(pipePos + 1);
var provider = user.identities[0].provider;
var providerUserId = user.identities[0].user_id;

user.app_metadata = user.app_metadata || {};
user.user_metadata = user.user_metadata || {};
Expand All @@ -59,7 +57,7 @@ function (user, context, callback) {
headers: {
Authorization: 'Bearer ' + auth0.accessToken
},
json: { provider: provider, user_id: newUserId }
json: { provider: provider, user_id: providerUserId }
}, function(err, response, body) {
if (response && response.statusCode >= 400) {
return cb(new Error('Error linking account: ' + response.statusMessage));
Expand Down
8 changes: 3 additions & 5 deletions rules/link-users-by-email.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,8 @@ function (user, context, callback) {
}

var originalUser = data[0];
var user_id = user.user_id;
var pipePos = user_id.indexOf('|');
var provider = user_id.slice(0, pipePos);
var newUserId = user_id.slice(pipePos + 1);
var provider = user.identities[0].provider;
var providerUserId = user.identities[0].user_id;

request.post({
url: userApiUrl + '/' + originalUser.user_id + '/identities',
Expand All @@ -56,7 +54,7 @@ function (user, context, callback) {
},
json: {
provider: provider,
user_id: newUserId
user_id: providerUserId
}
}, function(err, response, body) {
if (response.statusCode >= 400) {
Expand Down

0 comments on commit c1b3bc4

Please sign in to comment.