@corvina/cidr
Version:
CIDR Operation helper
72 lines • 2.15 kB
JavaScript
import { cidr, ip } from './cidr';
export function validateIpAddressForEndpoint(value) {
if (!value) {
throw new Error('Invalid');
}
let [address, mask] = value.split('/');
if (!mask) {
const err = ip.validate(address);
if (err) {
throw new Error(err);
}
return value;
}
else {
if (mask.includes('.')) {
const err = ip.validate(mask);
if (err) {
throw new Error(err);
}
mask = convertNetmaskToBitmask(mask).toString();
value = `${address}/${mask}`;
}
value = `${cidr.min(value)}/${mask}`;
const err = cidr.validate(value);
if (err) {
throw new Error(err);
}
return value;
}
}
export function convertNetworkAddressWithBitmaskToNetmask(value) {
if (value.includes('/')) {
let [address, mask] = value.split('/');
if (!mask) {
return value;
}
if (!mask.includes('.')) {
mask = convertBitmaskToNetmask(parseInt(mask)).toString();
value = `${address}/${mask}`;
return value;
}
}
return value;
}
export function convertBitmaskToNetmask(bitCount) {
var mask = [], i, n;
for (i = 0; i < 4; i++) {
n = Math.min(bitCount, 8);
mask.push(256 - Math.pow(2, 8 - n));
bitCount -= n;
}
return mask.join('.');
}
export function convertNetmaskToBitmask(netmask) {
const netmaskOctets = netmask.split('.');
const netmaskBits = netmaskOctets.map((octet) => parseInt(octet, 10).toString(2));
const bitmask = netmaskBits
.join('')
.split('')
.filter((bit) => bit === '1').length;
return bitmask;
}
export function anonymizeIp(ipAddress, maskLength) {
const binaryAddress = ip.toBinary(ipAddress);
const anonymizedBinaryAddress = binaryAddress
.replace(/\./g, '')
.slice(0, maskLength)
.padEnd(32, '0')
.replace(/(.{8})(?=.)/g, '$1.');
return ip.binaryToIpString(anonymizedBinaryAddress);
}
//# sourceMappingURL=endpoint.js.map