@aikidosec/firewall
Version:
Zen by Aikido is an embedded Web Application Firewall that autonomously protects Node.js apps against common and critical attacks
47 lines (46 loc) • 1.51 kB
JavaScript
;
// Based on https://github.com/demskie/netparser
// MIT License - Copyright (c) 2019 alex
Object.defineProperty(exports, "__esModule", { value: true });
exports.nativeSort = nativeSort;
exports.binarySearchForInsertionIndex = binarySearchForInsertionIndex;
const BEFORE = -1;
const EQUALS = 0;
const AFTER = 1;
function nativeSort(networks) {
return networks.sort((a, b) => {
const aBytes = a.addr.bytes();
const bBytes = b.addr.bytes();
if (aBytes.length !== bBytes.length)
return aBytes.length - bBytes.length;
for (let i = 0; i < aBytes.length; i++) {
if (aBytes[i] !== bBytes[i])
return aBytes[i] - bBytes[i];
}
if (a.cidr() !== b.cidr())
return a.cidr() - b.cidr();
return 0;
});
}
function binarySearchForInsertionIndex(network, sortedNetworks) {
if (!sortedNetworks || sortedNetworks.length === 0)
return 0;
let left = 0;
let right = sortedNetworks.length - 1;
while (left < right) {
const middle = Math.floor(left + (right - left) / 2);
switch (sortedNetworks[middle].compare(network)) {
case EQUALS:
return middle + 1;
case BEFORE:
left = middle + 1;
break;
case AFTER:
right = middle - 1;
break;
}
}
if (sortedNetworks[left].compare(network) === BEFORE)
return left + 1;
return left;
}