remove dependency on ip-range-check and ip, use lower level ipaddr.js instead

re: #5893
v1.18.x
Julian Lam 8 years ago
parent 8346130cdc
commit 5d2b3d3c39

@ -40,8 +40,7 @@
"express-session": "^1.8.2", "express-session": "^1.8.2",
"express-useragent": "1.0.7", "express-useragent": "1.0.7",
"html-to-text": "3.3.0", "html-to-text": "3.3.0",
"ip": "1.1.5", "ipaddr.js": "^1.5.0",
"ip-range-check": "^0.0.2",
"jimp": "0.2.28", "jimp": "0.2.28",
"jquery": "^3.1.0", "jquery": "^3.1.0",
"json-2-csv": "^2.0.22", "json-2-csv": "^2.0.22",

@ -1,7 +1,6 @@
'use strict'; 'use strict';
var ip = require('ip'); var ipaddr = require('ipaddr.js');
var ipRangeCheck = require('ip-range-check');
var winston = require('winston'); var winston = require('winston');
var async = require('async'); var async = require('async');
@ -55,13 +54,18 @@ Blacklist.get = function (callback) {
}; };
Blacklist.test = function (clientIp, callback) { Blacklist.test = function (clientIp, callback) {
// Some handy test addresses
// clientIp = '2001:db8:85a3:0:0:8a2e:370:7334'; // IPv6
// clientIp = '127.0.15.1'; // IPv4
var addr = ipaddr.parse(clientIp);
if ( if (
Blacklist._rules.ipv4.indexOf(clientIp) === -1 && // not explicitly specified in ipv4 list Blacklist._rules.ipv4.indexOf(clientIp) === -1 && // not explicitly specified in ipv4 list
Blacklist._rules.ipv6.indexOf(clientIp) === -1 && // not explicitly specified in ipv6 list Blacklist._rules.ipv6.indexOf(clientIp) === -1 && // not explicitly specified in ipv6 list
!Blacklist._rules.cidr.some(function (subnet) { !Blacklist._rules.cidr.some(function (subnet) {
return ip.cidrSubnet(subnet).contains(clientIp); return addr.match(ipaddr.parseCIDR(subnet));
}) && // not in a blacklisted IPv4 cidr range // return ip.cidrSubnet(subnet).contains(clientIp);
!ipRangeCheck(clientIp, Blacklist._rules.cidr6) // not in a blacklisted IPv6 cidr range }) // not in a blacklisted IPv4 or IPv6 cidr range
) { ) {
plugins.fireHook('filter:blacklist.test', { plugins.fireHook('filter:blacklist.test', {
ip: clientIp, ip: clientIp,
@ -90,7 +94,6 @@ Blacklist.validate = function (rules, callback) {
var ipv4 = []; var ipv4 = [];
var ipv6 = []; var ipv6 = [];
var cidr = []; var cidr = [];
var cidr6 = [];
var invalid = []; var invalid = [];
var isIPv4CidrSubnet = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/; var isIPv4CidrSubnet = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/;
@ -107,30 +110,40 @@ Blacklist.validate = function (rules, callback) {
// Filter out invalid rules // Filter out invalid rules
rules = rules.filter(function (rule) { rules = rules.filter(function (rule) {
if (whitelist.indexOf(rule) !== -1) { var addr;
invalid.push(rule); var isRange = false;
return false; try {
addr = ipaddr.parse(rule);
} catch (e) {
// Do nothing
} }
if (ip.isV4Format(rule)) { try {
ipv4.push(rule); addr = ipaddr.parseCIDR(rule);
return true; isRange = true;
} catch (e) {
// Do nothing
} }
if (ip.isV6Format(rule)) { console.log('what is addr anyway', addr);
ipv6.push(rule);
return true; if (!addr || whitelist.indexOf(rule) !== -1) {
invalid.push(rule);
return false;
} }
if (isIPv4CidrSubnet.test(rule)) {
if (!isRange) {
if (addr.kind() === 'ipv4' && ipaddr.IPv4.isValid(rule)) {
ipv4.push(rule);
return true;
}
if (addr.kind() === 'ipv6' && ipaddr.IPv6.isValid(rule)) {
ipv6.push(rule);
return true;
}
} else {
cidr.push(rule); cidr.push(rule);
return true; return true;
} }
if (isIPv6CidrSubnet.test(rule)) {
cidr6.push(rule);
return true;
}
invalid.push(rule);
return false;
}); });
callback(null, { callback(null, {
@ -138,7 +151,6 @@ Blacklist.validate = function (rules, callback) {
ipv4: ipv4, ipv4: ipv4,
ipv6: ipv6, ipv6: ipv6,
cidr: cidr, cidr: cidr,
cidr6: cidr6,
valid: rules, valid: rules,
invalid: invalid, invalid: invalid,
}); });

Loading…
Cancel
Save