50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const _ = require('./translate')._;
|
|
const util = require('util');
|
|
const isemail = require('isemail');
|
|
|
|
const bluebird = require('bluebird');
|
|
const mergeTemplateIntoLayout = bluebird.promisify(require('./tools').mergeTemplateIntoLayout);
|
|
|
|
module.exports = {
|
|
validateEmail,
|
|
validateEmailGetMessage,
|
|
mergeTemplateIntoLayout
|
|
};
|
|
|
|
async function validateEmail(address, checkBlocked) {
|
|
let user = (address || '').toString().split('@').shift().toLowerCase().replace(/[^a-z0-9]/g, '');
|
|
|
|
if (checkBlocked && blockedUsers.indexOf(user) >= 0) {
|
|
throw new new Error(util.format(_('Blocked email address "%s"'), address));
|
|
}
|
|
|
|
const result = await new Promise(resolve => {
|
|
const result = isemail.validate(address, {
|
|
checkDNS: true,
|
|
errorLevel: 1
|
|
}, resolve);
|
|
});
|
|
|
|
return result;
|
|
}
|
|
|
|
function validateEmailGetMessage(result, address) {
|
|
if (result !== 0) {
|
|
let message = util.format(_('Invalid email address "%s".'), address);
|
|
switch (result) {
|
|
case 5:
|
|
message += ' ' + _('MX record not found for domain');
|
|
break;
|
|
case 6:
|
|
message += ' ' + _('Address domain not found');
|
|
break;
|
|
case 12:
|
|
message += ' ' + _('Address domain name is required');
|
|
break;
|
|
}
|
|
return message;
|
|
}
|
|
}
|
|
|