You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.default = isIPRange; |
|
|
|
var _assertString = _interopRequireDefault(require("./util/assertString")); |
|
|
|
var _isIP = _interopRequireDefault(require("./isIP")); |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
var subnetMaybe = /^\d{1,3}$/; |
|
var v4Subnet = 32; |
|
var v6Subnet = 128; |
|
|
|
function isIPRange(str) { |
|
var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; |
|
(0, _assertString.default)(str); |
|
var parts = str.split('/'); // parts[0] -> ip, parts[1] -> subnet |
|
|
|
if (parts.length !== 2) { |
|
return false; |
|
} |
|
|
|
if (!subnetMaybe.test(parts[1])) { |
|
return false; |
|
} // Disallow preceding 0 i.e. 01, 02, ... |
|
|
|
|
|
if (parts[1].length > 1 && parts[1].startsWith('0')) { |
|
return false; |
|
} |
|
|
|
var isValidIP = (0, _isIP.default)(parts[0], version); |
|
|
|
if (!isValidIP) { |
|
return false; |
|
} // Define valid subnet according to IP's version |
|
|
|
|
|
var expectedSubnet = null; |
|
|
|
switch (String(version)) { |
|
case '4': |
|
expectedSubnet = v4Subnet; |
|
break; |
|
|
|
case '6': |
|
expectedSubnet = v6Subnet; |
|
break; |
|
|
|
default: |
|
expectedSubnet = (0, _isIP.default)(parts[0], '6') ? v6Subnet : v4Subnet; |
|
} |
|
|
|
return parts[1] <= expectedSubnet && parts[1] >= 0; |
|
} |
|
|
|
module.exports = exports.default; |
|
module.exports.default = exports.default; |