@ivandt/json-rules
Version:
Rule parsing engine for JSON rules
61 lines (60 loc) • 2.41 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateEmail = validateEmail;
const isEmail_1 = __importDefault(require("validator/lib/isEmail"));
/**
* Validates email addresses with configurable options
*/
function validateEmail(value, config = null) {
// Must be a string
if (typeof value !== "string") {
return false;
}
// Use default config if none provided
const validationConfig = config || {};
// Convert our config to validator.js options
const options = {
allow_display_name: validationConfig.allowDisplayName || false,
require_display_name: validationConfig.requireDisplayName || false,
allow_utf8_local_part: validationConfig.allowUtf8LocalPart || true,
require_tld: validationConfig.requireTld !== false, // Default true
allow_ip_domain: validationConfig.allowIpDomain || false,
allow_underscores: validationConfig.allowUnderscores || false,
domain_specific_validation: validationConfig.domainSpecificValidation || false,
};
// Add blacklisted characters if specified
if (validationConfig.blacklistedChars) {
options.blacklisted_chars = validationConfig.blacklistedChars;
}
// Validate email format first
const isValidFormat = (0, isEmail_1.default)(value, options);
if (!isValidFormat) {
return false;
}
// Extract domain for whitelist/blacklist checking
const emailParts = value.split("@");
if (emailParts.length !== 2) {
return false;
}
const domain = emailParts[1].toLowerCase();
// Check domain blacklist
if (validationConfig.hostBlacklist &&
validationConfig.hostBlacklist.length > 0) {
const blacklist = validationConfig.hostBlacklist.map((host) => host.toLowerCase());
if (blacklist.includes(domain)) {
return false;
}
}
// Check domain whitelist (if provided, only allow whitelisted domains)
if (validationConfig.hostWhitelist &&
validationConfig.hostWhitelist.length > 0) {
const whitelist = validationConfig.hostWhitelist.map((host) => host.toLowerCase());
if (!whitelist.includes(domain)) {
return false;
}
}
return true;
}