The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/server/configuration/accounts_meld.js

52 lines
1.5 KiB

import _ from 'underscore';
import { Accounts } from 'meteor/accounts-base';
import { Users } from 'meteor/rocketchat:models';
const orig_updateOrCreateUserFromExternalService = Accounts.updateOrCreateUserFromExternalService;
Accounts.updateOrCreateUserFromExternalService = function(serviceName, serviceData = {}, ...args /* , options*/) {
const services = [
'facebook',
'github',
'gitlab',
'google',
'meteor-developer',
'linkedin',
'twitter',
'sandstorm',
];
if (services.includes(serviceName) === false && serviceData._OAuthCustom !== true) {
return;
}
if (serviceName === 'meteor-developer') {
if (Array.isArray(serviceData.emails)) {
const primaryEmail = serviceData.emails.sort((a) => a.primary !== true).filter((item) => item.verified === true)[0];
serviceData.email = primaryEmail && primaryEmail.address;
}
}
if (serviceName === 'linkedin') {
serviceData.email = serviceData.emailAddress;
}
if (serviceData.email) {
const user = Users.findOneByEmailAddress(serviceData.email);
if (user != null) {
const findQuery = {
address: serviceData.email,
verified: true,
};
if (!_.findWhere(user.emails, findQuery)) {
Users.resetPasswordAndSetRequirePasswordChange(user._id, true, 'This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password');
}
Users.setServiceId(user._id, serviceName, serviceData.id);
Users.setEmailVerified(user._id, serviceData.email);
}
}
return orig_updateOrCreateUserFromExternalService.apply(this, [serviceName, serviceData, ...args]);
};