const dns = Npm.require('dns'); var emailDomainBlackList = []; var emailDomainWhiteList = []; var useDefaultBlackList = false; var useDNSDomainCheck = false; RocketChat.settings.get('Accounts_BlockedDomainsList', function(key, value) { emailDomainBlackList = _.map(value.split(','), (domain) => domain.trim()); }); RocketChat.settings.get('Accounts_AllowedDomainsList', function(key, value) { emailDomainWhiteList = _.map(value.split(','), (domain) => domain.trim()); }); RocketChat.settings.get('Accounts_UseDefaultBlockedDomainsList', function(key, value) { useDefaultBlackList = value; }); RocketChat.settings.get('Accounts_UseDNSDomainCheck', function(key, value) { useDNSDomainCheck = value; }); RocketChat.validateEmailDomain = function(email) { const emailValidation = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; if (!emailValidation.test(email)) { throw new Meteor.Error('error-invalid-email', 'Invalid email ' + email, { function: 'RocketChat.validateEmailDomain', email: email }); } const emailDomain = email.substr(email.lastIndexOf('@') + 1); // if not in whitelist if (emailDomainWhiteList.indexOf(emailDomain) === -1) { if (emailDomainBlackList.indexOf(emailDomain) !== -1 || (useDefaultBlackList && RocketChat.emailDomainDefaultBlackList.indexOf(emailDomain) !== -1)) { throw new Meteor.Error('error-email-domain-blacklisted', 'The email domain is blacklisted', { function: 'RocketChat.validateEmailDomain' }); } } if (useDNSDomainCheck) { try { Meteor.wrapAsync(dns.resolveMx)(emailDomain); } catch (e) { throw new Meteor.Error('error-invalid-domain', 'Invalid domain', { function: 'RocketChat.validateEmailDomain' }); } } };