@libj/ip-filter
Version:
Ip filter utils (function, middleware)
69 lines • 2.51 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeIpFilterMiddleware = void 0;
var isIpInRange_1 = require("./isIpInRange");
var src_1 = require("@libj/http-meta");
var constants_1 = require("./constants");
var makeIpFilterMiddleware = function (config) { return function (req, res, next) {
var response = validateConfig(config).response, ip = defineIp(req, config);
if (ip) {
var isAllowed = isIpAllowed(ip, config);
if (isAllowed) {
return next();
}
}
var statusCode = (response === null || response === void 0 ? void 0 : response.statusCode) || src_1.HttpStatus.FORBIDDEN, body = response === null || response === void 0 ? void 0 : response.body;
logError(ip, config);
res.status(statusCode);
if (body) {
res.send(body);
}
else {
res.send();
}
}; };
exports.makeIpFilterMiddleware = makeIpFilterMiddleware;
/*** Lib ***/
function defineIp(req, config) {
var ipGetter = config.ipGetter;
if (ipGetter) {
return ipGetter(req);
}
return req.headers['x-forwarded-for'] || req.socket.remoteAddress || null;
}
function isIpAllowed(ip, config) {
var whitelist = config.whitelist, blacklist = config.blacklist;
if (whitelist) {
return whitelist.indexOf(constants_1.WILDCARD_IP) > -1 ? true : (0, isIpInRange_1.isIpInRange)(ip, whitelist);
}
return !(0, isIpInRange_1.isIpInRange)(ip, blacklist);
}
function validateConfig(config) {
if (!config.whitelist && !config.blacklist) {
throw new Error('Missing whitelist or blacklist');
}
else if (config.whitelist && config.blacklist) {
throw new Error('One of whitelist OR blacklist is supported in config');
}
return config;
}
function logError(ip, config) {
var whitelist = config.whitelist, blacklist = config.blacklist, logger = config.logger;
if (logger) {
var errorArgs = void 0;
if (ip) {
var _a = whitelist ? ['whitelist', whitelist] : ['blacklist', blacklist], listLabel = _a[0], listValue = _a[1];
errorArgs = [
"Access denied to IP address '%s' according to ".concat(listLabel, " '%j'"),
ip,
listValue,
];
}
else {
errorArgs = ['Access denied due to IP could not be defined'];
}
// @ts-ignore
logger.error.apply(logger, errorArgs);
}
}
//# sourceMappingURL=makeIpFilterMiddleware.js.map
;