UNPKG

@libj/ip-filter

Version:
69 lines 2.51 kB
"use strict"; 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