actionhero
Version:
actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks
47 lines (46 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseHeadersForClientAddress = void 0;
const parseIPv6URI_1 = require("./parseIPv6URI");
/**
* Return ip and port information if defined in the header
*/
function parseHeadersForClientAddress(headers) {
let ip = null;
let port = null;
if (headers["x-forwarded-for"]) {
let parts;
let forwardedIp = headers["x-forwarded-for"].split(",")[0];
if (forwardedIp.indexOf(".") >= 0 ||
(forwardedIp.indexOf(".") < 0 && forwardedIp.indexOf(":") < 0)) {
// IPv4
forwardedIp = forwardedIp.replace("::ffff:", ""); // remove any IPv6 information, ie: '::ffff:127.0.0.1'
parts = forwardedIp.split(":");
if (parts[0]) {
ip = parts[0];
}
if (parts[1]) {
port = parts[1];
}
}
else {
// IPv6
parts = parseIPv6URI_1.parseIPv6URI(forwardedIp);
if (parts.host) {
ip = parts.host;
}
if (parts.port) {
port = parts.port;
}
}
}
if (headers["x-forwarded-port"]) {
port = headers["x-forwarded-port"];
}
if (headers["x-real-ip"]) {
// https://distinctplace.com/2014/04/23/story-behind-x-forwarded-for-and-x-real-ip-headers/
ip = headers["x-real-ip"];
}
return { ip, port };
}
exports.parseHeadersForClientAddress = parseHeadersForClientAddress;