difuse-playwright/utils/utils.js

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;
}
}