mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-29 15:39:33 +00:00
179 lines
6.5 KiB
JavaScript
179 lines
6.5 KiB
JavaScript
/*
|
|
* (C) 2013-23 - ntop.org
|
|
*/
|
|
|
|
/* ****************************************************** */
|
|
|
|
const regexes = {
|
|
ipv4: String.raw`^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$`,
|
|
ipv6: String.raw`^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$`,
|
|
mac_address: String.raw`^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$`,
|
|
comma_separted_port_regex: String.raw`^(\d{1,5})(,\s*\d{1,5})*$`,
|
|
port_range_regex: String.raw`^(\d{1,5})-(\d{1,5})$`,
|
|
host_name: String.raw`^(?!\s*$)[a-zA-Z0-9._: \-\/]{1,250}|^[a-zA-Z0-9._: \-\/]{1,250}@[0-9]{0,5}`,
|
|
singleword: String.raw`^(?=[a-zA-Z0-9._:\-]{3,253}$)(?!.*[_.:\-]{2})[^_.:\-].*[^_.:\-]$`,
|
|
url: String.raw`^(https?\:\/\/[^\/\s]+(\/.*)?)$`,
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateIP = (ip) => {
|
|
return (validateIPv4(ip) || validateIPv6(ip));
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
function validateUInt32(number) {
|
|
const val = Number(number);
|
|
return Number.isInteger(val) && val >= 0 && val <= 0xFFFFFFFF;
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateNumber = (number) => {
|
|
return (!isNaN(parseFloat(number)) && isFinite(number));
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateCIDR = (network) => {
|
|
const network_split = network.split('/');
|
|
if (network_split.length == 2) {
|
|
const subnet = network_split[1];
|
|
const ip = network_split[0];
|
|
const num = Number(subnet);
|
|
if (validateIPv4(ip) || validateIPv6(ip)) {
|
|
return (!isNaN(num) && num >= 1 && num <= 128 && Number.isInteger(num));
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateNetwork = (ip) => {
|
|
const ipv4 = new RegExp(regexes.ipv4);
|
|
|
|
return ipv4.test(ip);
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateIPv4 = (ip) => {
|
|
const ipv4 = new RegExp(regexes.ipv4);
|
|
|
|
return ipv4.test(ip);
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateIPv6 = (ip) => {
|
|
const ipv6 = new RegExp(regexes.ipv6);
|
|
|
|
return ipv6.test(ip);
|
|
}
|
|
|
|
const validateHostName = (host_name) => {
|
|
const host_name_regexp = new RegExp(regexes.host_name);
|
|
|
|
return host_name_regexp.test(host_name);
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validateCommaSeparatedPortList = (ports) => {
|
|
const port_list = new RegExp(regexes.comma_separted_port_regex);
|
|
|
|
return port_list.test(ports);
|
|
}
|
|
|
|
const validateSingleWord = (word) => {
|
|
const singelWordRegex = new RegExp(regexes.singleword)
|
|
|
|
return singelWordRegex.test(word);
|
|
}
|
|
|
|
const validateURL = (url) => {
|
|
const urlRegex = new RegExp(regexes.url)
|
|
|
|
return urlRegex.test(url);
|
|
}
|
|
|
|
const validateMAC = (mac_address) => {
|
|
const macRegex = new RegExp(regexes.mac_address)
|
|
|
|
return macRegex.test(mac_address);
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
const validatePortRange = (ports) => {
|
|
const port_array = ports.split("-", 2);
|
|
const low = Number(port_array[0]);
|
|
const high = Number(port_array[1]);
|
|
|
|
if ((isNaN(low)) || (isNaN(high)))
|
|
return false;
|
|
|
|
if ((low > 0) && (low < high) && (high < 65536))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
/* ****************************************************** */
|
|
|
|
import NtopUtils from "./ntop-utils.js";
|
|
|
|
const Utils = NtopUtils;
|
|
function get_data_pattern(type) {
|
|
if (type == "text") {
|
|
return `.*`;
|
|
} else if (type == "vlan") {
|
|
let vlan = String.raw`@(([1-9])|([1-9][0-9]{1,2})|([1-3][0-9]{3})|(40[0-8][0-9])|(409[0-5]))`;
|
|
return vlan;
|
|
} else if (type == "ip" || type == "cidr") {
|
|
let vlan = get_data_pattern("vlan");
|
|
let r_ipv4 = Utils.REGEXES.ipv4;
|
|
let r_ipv4_vlan = r_ipv4.replaceAll("$", `${vlan}$`);
|
|
let r_ipv6 = Utils.REGEXES.ipv6;
|
|
let r_ipv6_vlan = r_ipv6.replaceAll("$", `${vlan}$`);
|
|
if (type == "cidr") {
|
|
let network_ipv4 = String.raw`(\/(([1-9])|([1-2][0-9])|(3[0-2])))`;
|
|
let ipv4_cidr = r_ipv4.replaceAll("$", `${network_ipv4}$`);
|
|
let ipv4_cidr_vlan = r_ipv4.replaceAll("$", `${network_ipv4}${vlan}$`);
|
|
let network_ipv6 = String.raw`(\/(([1-9])|([1-9][0-9])|(1[0-1][0-9])|(12[0-8])))`;
|
|
let ipv6_cidr = r_ipv6.replaceAll("$", `${network_ipv6}$`);
|
|
let ipv6_cidr_vlan = r_ipv6.replaceAll("$", `${network_ipv6}${vlan}$`);
|
|
return `(${ipv4_cidr}|${ipv4_cidr_vlan}|${ipv6_cidr}|${ipv6_cidr_vlan})`;
|
|
}
|
|
return `(${r_ipv4})|(${r_ipv4_vlan})|(${r_ipv6})|(${r_ipv6_vlan})`;
|
|
} else if (type == "mac") {
|
|
return Utils.REGEXES["macAddress"];
|
|
} else if (type == "ip,cidr") {
|
|
let ip = get_data_pattern("ip");
|
|
let cidr = get_data_pattern("cidr");
|
|
return `(${ip})|(${cidr})`;
|
|
}
|
|
return Utils.REGEXES[type];
|
|
}
|
|
|
|
const regexValidation = function () {
|
|
return {
|
|
get_data_pattern,
|
|
validateIP,
|
|
validateIPv4,
|
|
validateIPv6,
|
|
validateHostName,
|
|
validateCommaSeparatedPortList,
|
|
validatePortRange,
|
|
validateSingleWord,
|
|
validateURL,
|
|
validateCIDR,
|
|
validateMAC,
|
|
validateNumber,
|
|
validateUInt32,
|
|
};
|
|
}();
|
|
|
|
export default regexValidation;
|