Skip to content

Instantly share code, notes, and snippets.

@saltukalakus
Last active January 16, 2017 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saltukalakus/c426d4bc65a3b43e3ad4ef51063dd67a to your computer and use it in GitHub Desktop.
Save saltukalakus/c426d4bc65a3b43e3ad4ef51063dd67a to your computer and use it in GitHub Desktop.
function (user, context, callback) {
var userApiUrl = auth0.baseUrl + '/users';
function isSocial() {
return user.identities[0].isSocial;
}
function deleteSocialUser(user) {
if (isSocial()){
request({
url: userApiUrl + '/' + user.user_id,
method: 'DELETE',
headers: {
Authorization: 'Bearer ' + configuration.AUTH0_API_TOKEN
}
}, function (err, response, body){
if (err) {
return callback(new UnauthorizedError('Account does not exist.'));
}
return callback(null, user, context);
});
} else {
callback(null, user, context);
}
}
var request = require('request@2.56.0');
// Check if email is verified, we shouldn't automatically
// merge accounts if this is not the case.
if (!user.email_verified) {
return callback(null, user, context);
}
var newUserAryTmp = user.user_id.split('|');
var newUserProvider = newUserAryTmp[0];
var newUserUserId = newUserAryTmp[1];
request({
url: userApiUrl,
headers: {
Authorization: 'Bearer ' + auth0.accessToken
},
qs: {
search_engine: 'v2',
q: 'email:"' + user.email + '" -user_id:"' + user.user_id + '"',
}
},
function(err, response, body) {
if (err) return callback(err);
if (response.statusCode !== 200) return callback(new Error(body));
var foundAuth0User = false;
var data = JSON.parse(body);
if (data.length > 0) {
async.each(data, function(targetUser, cb) {
if (targetUser.email_verified) {
var aryTmp = targetUser.user_id.split('|');
var provider = aryTmp[0];
if (provider === "auth0") {
foundAuth0User = true;
request.post({
url: userApiUrl + '/' + targetUser.user_id + '/identities',
headers: {
Authorization: 'Bearer ' + auth0.accessToken
},
json: { provider: newUserProvider, user_id: newUserUserId }
}, function(err, response, body) {
if (response.statusCode >= 400) {
return cb(new Error('Error linking account: ' + response.statusMessage));
}
cb(err);
});
}
} else {
cb();
}
}, function(err) {
if(!foundAuth0User){
deleteSocialUser(user);
} else {
callback(null, user, context);
}
});
} else {
if(!foundAuth0User){
deleteSocialUser(user);
} else {
callback(null, user, context);
}
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment