This commit is contained in:
Jonasz Bigda
2023-03-25 21:51:42 +01:00
parent 0db1d5117e
commit b332e9ceb0
1044 changed files with 37502 additions and 63938 deletions

View File

@@ -1,15 +1,3 @@
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import assertString from './util/assertString';
import merge from './util/merge';
import isByteLength from './isByteLength';
@@ -19,13 +7,17 @@ var default_email_options = {
allow_display_name: false,
require_display_name: false,
allow_utf8_local_part: true,
require_tld: true
require_tld: true,
blacklisted_chars: '',
ignore_max_length: false,
host_blacklist: [],
host_whitelist: []
};
/* eslint-disable max-len */
/* eslint-disable no-control-regex */
var splitNameAddress = /^([^\x00-\x1F\x7F-\x9F\cX]+)<(.+)>$/i;
var splitNameAddress = /^([^\x00-\x1F\x7F-\x9F\cX]+)</i;
var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i;
var gmailUserPart = /^[a-z\d]+$/;
var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
@@ -42,8 +34,7 @@ var defaultMaxEmailLength = 254;
*/
function validateDisplayName(display_name) {
var trim_quotes = display_name.match(/^"(.+)"$/i);
var display_name_without_quotes = trim_quotes ? trim_quotes[1] : display_name; // display name with only spaces is not valid
var display_name_without_quotes = display_name.replace(/^"(.+)"$/, '$1'); // display name with only spaces is not valid
if (!display_name_without_quotes.trim()) {
return false;
@@ -55,7 +46,7 @@ function validateDisplayName(display_name) {
if (contains_illegal) {
// if contains illegal characters,
// must to be enclosed in double-quotes, otherwise it's not a valid display name
if (!trim_quotes) {
if (display_name_without_quotes === display_name) {
return false;
} // the quotes in display name must start with character symbol \
@@ -78,19 +69,16 @@ export default function isEmail(str, options) {
var display_email = str.match(splitNameAddress);
if (display_email) {
var display_name;
var display_name = display_email[1]; // Remove display name and angle brackets to get email address
// Can be done in the regex but will introduce a ReDOS (See #1597 for more info)
var _display_email = _slicedToArray(display_email, 3);
display_name = _display_email[1];
str = _display_email[2];
// sometimes need to trim the last space to get the display name
str = str.replace(display_name, '').replace(/(^<|>$)/g, ''); // sometimes need to trim the last space to get the display name
// because there may be a space between display name and email address
// eg. myname <address@gmail.com>
// the display name is `myname` instead of `myname `, so need to trim the last space
if (display_name.endsWith(' ')) {
display_name = display_name.substr(0, display_name.length - 1);
display_name = display_name.slice(0, -1);
}
if (!validateDisplayName(display_name)) {
@@ -107,9 +95,18 @@ export default function isEmail(str, options) {
var parts = str.split('@');
var domain = parts.pop();
var user = parts.join('@');
var lower_domain = domain.toLowerCase();
if (options.host_blacklist.includes(lower_domain)) {
return false;
}
if (options.host_whitelist.length > 0 && !options.host_whitelist.includes(lower_domain)) {
return false;
}
var user = parts.join('@');
if (options.domain_specific_validation && (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com')) {
/*
Previously we removed dots for gmail addresses before validating.
@@ -122,7 +119,7 @@ export default function isEmail(str, options) {
var username = user.split('+')[0]; // Dots are not included in gmail length restriction
if (!isByteLength(username.replace('.', ''), {
if (!isByteLength(username.replace(/\./g, ''), {
min: 6,
max: 30
})) {
@@ -138,16 +135,17 @@ export default function isEmail(str, options) {
}
}
if (!isByteLength(user, {
if (options.ignore_max_length === false && (!isByteLength(user, {
max: 64
}) || !isByteLength(domain, {
max: 254
})) {
}))) {
return false;
}
if (!isFQDN(domain, {
require_tld: options.require_tld
require_tld: options.require_tld,
ignore_max_length: options.ignore_max_length
})) {
if (!options.allow_ip_domain) {
return false;
@@ -158,7 +156,7 @@ export default function isEmail(str, options) {
return false;
}
var noBracketdomain = domain.substr(1, domain.length - 2);
var noBracketdomain = domain.slice(1, -1);
if (noBracketdomain.length === 0 || !isIP(noBracketdomain)) {
return false;
@@ -174,11 +172,15 @@ export default function isEmail(str, options) {
var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;
var user_parts = user.split('.');
for (var _i2 = 0; _i2 < user_parts.length; _i2++) {
if (!pattern.test(user_parts[_i2])) {
for (var _i = 0; _i < user_parts.length; _i++) {
if (!pattern.test(user_parts[_i])) {
return false;
}
}
if (options.blacklisted_chars) {
if (user.search(new RegExp("[".concat(options.blacklisted_chars, "]+"), 'g')) !== -1) return false;
}
return true;
}