forked from svrjs/svrjs
82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
// Function to check if IPs are equal
|
|
function ipMatch(IP1, IP2) {
|
|
if (!IP1) return true;
|
|
if (!IP2) return false;
|
|
|
|
// Function to normalize IPv4 address (remove leading zeros)
|
|
function normalizeIPv4Address(address) {
|
|
return address.replace(/(^|\.)(?:0(?!\.|$))+/g, "$1");
|
|
}
|
|
|
|
// Function to expand IPv6 address to full format
|
|
function expandIPv6Address(address) {
|
|
let fullAddress = "";
|
|
let expandedAddress = "";
|
|
let validGroupCount = 8;
|
|
let validGroupSize = 4;
|
|
|
|
let ipv4 = "";
|
|
const extractIpv4 =
|
|
/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/;
|
|
const validateIpv4 =
|
|
/((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})/;
|
|
|
|
if (validateIpv4.test(address)) {
|
|
const oldGroups = address.match(extractIpv4);
|
|
for (let i = 1; i < oldGroups.length; i++) {
|
|
ipv4 +=
|
|
("00" + parseInt(oldGroups[i], 10).toString(16)).slice(-2) +
|
|
(i == 2 ? ":" : "");
|
|
}
|
|
address = address.replace(extractIpv4, ipv4);
|
|
}
|
|
|
|
if (address.indexOf("::") == -1) {
|
|
fullAddress = address;
|
|
} else {
|
|
const sides = address.split("::");
|
|
let groupsPresent = 0;
|
|
sides.forEach((side) => {
|
|
groupsPresent += side.split(":").length;
|
|
});
|
|
fullAddress += sides[0] + ":";
|
|
if (validGroupCount - groupsPresent > 1) {
|
|
fullAddress += "0000:".repeat(validGroupCount - groupsPresent);
|
|
}
|
|
fullAddress += sides[1];
|
|
}
|
|
let groups = fullAddress.split(":");
|
|
for (let i = 0; i < validGroupCount; i++) {
|
|
if (groups[i].length < validGroupSize) {
|
|
groups[i] = "0".repeat(validGroupSize - groups[i].length) + groups[i];
|
|
}
|
|
expandedAddress += i != validGroupCount - 1 ? groups[i] + ":" : groups[i];
|
|
}
|
|
return expandedAddress;
|
|
}
|
|
|
|
// Normalize or expand IP addresses
|
|
IP1 = IP1.toLowerCase();
|
|
if (IP1 == "localhost") IP1 = "::1";
|
|
if (IP1.indexOf("::ffff:") == 0) IP1 = IP1.substring(7);
|
|
if (IP1.indexOf(":") > -1) {
|
|
IP1 = expandIPv6Address(IP1);
|
|
} else {
|
|
IP1 = normalizeIPv4Address(IP1);
|
|
}
|
|
|
|
IP2 = IP2.toLowerCase();
|
|
if (IP2 == "localhost") IP2 = "::1";
|
|
if (IP2.indexOf("::ffff:") == 0) IP2 = IP2.substring(7);
|
|
if (IP2.indexOf(":") > -1) {
|
|
IP2 = expandIPv6Address(IP2);
|
|
} else {
|
|
IP2 = normalizeIPv4Address(IP2);
|
|
}
|
|
|
|
// Check if processed IPs are equal
|
|
if (IP1 == IP2) return true;
|
|
else return false;
|
|
}
|
|
|
|
module.exports = ipMatch;
|