forest-express
Version:
Official package for all Forest Express Lianas
20 lines (19 loc) • 858 B
JavaScript
;
var ipAddr = require('ipaddr.js');
var ipRegex = require('ip-regex');
function getIpFromRequest(request) {
/** @type {string} */
var forwardedAddresses = request.headers['x-forwarded-for'];
var parsedIps = forwardedAddresses === null || forwardedAddresses === void 0 ? void 0 : forwardedAddresses.match(ipRegex());
if (parsedIps !== null && parsedIps !== void 0 && parsedIps.length) {
// If the ip chain contains multiple IPs, the last public IP from the chain is the only
// one we can trust and it corresponds to real IP that contacted our own reverse proxy
return parsedIps.reverse().map(function (address) {
return address.trim();
}).find(function (address) {
return ipAddr.parse(address).range() !== 'private';
});
}
return request.connection.remoteAddress;
}
module.exports = getIpFromRequest;