function toBoolean(value) {
if (typeof (value) === 'string') {
if (['yes', 'true'].indexOf(value.toLowerCase()) != -1) {
return true;
} else if (['no', 'false'].indexOf(value.toLowerCase()) != -1) {
return false;
}
throw 'Argument does not contain a valid boolean-like value';
}
return value ? true : false;
}
function escapeRegex(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function main() {
const emails = argToList(args.email);
const domains = argToList(args.domain).map(x => x.toLowerCase());
const includeSubdomains = toBoolean(args.include_subdomains);
let results = [];
for (let i = 0; i < emails.length; i++) {
const parts = emails[i].split('@', 2);
let networkType = 'Unknown';
let inDomain = 'no';
if (parts.length > 1) {
const domain = parts[1].toLowerCase();
if (domains.indexOf(domain) !== -1 || (includeSubdomains && new RegExp(`^(.*\\.)?(${domains.map(d => escapeRegex(d)).join('|')})`).test(domain))) {
inDomain = 'yes';
networkType = 'Internal';
} else {
networkType = 'External';
}
const emailDict = {
'Address': emails[i],
'Domain': domain,
'Username': parts[0],
'NetworkType': networkType
};
const emailObj = {
'Account.Email(val.Address && val.Address == obj.Address)': emailDict
};
results.push({
'Type': entryTypes['note'],
'ContentsFormat': formats['json'],
'Contents': inDomain,
'HumanReadable': inDomain,
'EntryContext': emailObj
});
} else {
results.push({
Type: entryTypes.error,
ContentsFormat: formats.text,
Contents: `Email address "${emails[i]}" is not valid`
});
}
}
return results;
}
try {
return main();
} catch (error) {
throw 'Error occurred while running the script:\n' + error;
}