138 lines
3.1 KiB
JavaScript
138 lines
3.1 KiB
JavaScript
import IPCIDR from "ip-cidr";
|
|
import IPAddress from "ip-address";
|
|
|
|
export function isValidMacAddress(mac) {
|
|
try {
|
|
const regex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/;
|
|
return regex.test(mac);
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function isValidCidr(cidr, type = 0) {
|
|
let [isV4, isV6] = [false, false];
|
|
let tempCidr = null;
|
|
|
|
try {
|
|
if (type === 4) {
|
|
tempCidr = new IPCIDR(cidr);
|
|
if (tempCidr.address.v4) {
|
|
isV4 = true;
|
|
}
|
|
}
|
|
|
|
if (type === 6) {
|
|
tempCidr = new IPAddress.Address6(cidr);
|
|
if (!tempCidr.address.v4) {
|
|
isV6 = true;
|
|
}
|
|
}
|
|
|
|
if (type === 0) {
|
|
tempCidr = new IPCIDR(cidr);
|
|
if (tempCidr.address.v4) {
|
|
isV4 = true;
|
|
} else {
|
|
isV6 = true;
|
|
}
|
|
}
|
|
|
|
return isV4 || isV6;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function clickSelect2Dropdown(page, selectSelector) {
|
|
const select2ContainerSelector = `${selectSelector} + .select2-container`;
|
|
const select2ContainerExists =
|
|
(await page.$(select2ContainerSelector)) !== null;
|
|
|
|
if (!select2ContainerExists) {
|
|
throw new Error("Select2 container not found");
|
|
}
|
|
|
|
const select2Selection = `${select2ContainerSelector} .select2-selection`;
|
|
await page.click(select2Selection);
|
|
await page.waitForSelector(".select2-dropdown .select2-results__option");
|
|
}
|
|
|
|
export async function hasToastText(page, text) {
|
|
try {
|
|
return (
|
|
await (
|
|
await page.waitForSelector(".swal2-popup", { state: "visible" })
|
|
).textContent()
|
|
).includes(text);
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function sleep(ms) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
|
|
export function isValidDate(date) {
|
|
try {
|
|
const dateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
|
|
return dateRegex.test(date);
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function isValidPrivateIPV4(ip) {
|
|
try {
|
|
const privateRanges = [
|
|
["10.0.0.0", "10.255.255.255"],
|
|
["172.16.0.0", "172.31.255.255"],
|
|
["192.168.0.0", "192.168.255.255"],
|
|
];
|
|
|
|
const ipNumber = ip
|
|
.split(".")
|
|
.reduce(
|
|
(acc, octet, index) => acc + (parseInt(octet) << ((3 - index) * 8)),
|
|
0
|
|
);
|
|
|
|
for (const [start, end] of privateRanges) {
|
|
const startNumber = start
|
|
.split(".")
|
|
.reduce(
|
|
(acc, octet, index) => acc + (parseInt(octet) << ((3 - index) * 8)),
|
|
0
|
|
);
|
|
const endNumber = end
|
|
.split(".")
|
|
.reduce(
|
|
(acc, octet, index) => acc + (parseInt(octet) << ((3 - index) * 8)),
|
|
0
|
|
);
|
|
|
|
if (ipNumber >= startNumber && ipNumber <= endNumber) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function getDefaultNetmask(ip) {
|
|
const firstOctet = parseInt(ip.split(".")[0], 10);
|
|
|
|
if (firstOctet >= 1 && firstOctet <= 126) {
|
|
return "255.0.0.0";
|
|
} else if (firstOctet >= 128 && firstOctet <= 191) {
|
|
return "255.255.0.0";
|
|
} else if (firstOctet >= 192 && firstOctet <= 223) {
|
|
return "255.255.255.0";
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|