"use strict";
/*
* Middleware for handling Forwarded and X-Forwarded-For
* headers, currently it sets the request.ip to be the value
* set by the above headers, Forwarded has priority if both exist
*
*/
var forwarded = function forwarded(request) {
var f = request.headers["forwarded"];
if (f) {
return f.split(";").reduce(function (o, kv) {
var t = kv.split("=");
Eif (!o[t[0]]) {
// if key doesn't already exist
o[t[0]] = t[1].split(",")[0];
}
return o;
}, {});
}
};
var x_forwarded = function x_forwarded(request) {
var f = request.headers["x-forwarded-for"];
if (f) {
var v = f.split(",");
var r = {
for: v[0]
//by: v[1],
//proto: "http"
};
//const proto = request.headers["x-forwarded-proto"]
//if (proto) r.proto = proto
return r;
}
};
module.exports = function (handler) {
return function (request) {
var v = forwarded(request);
if (v === undefined) {
v = x_forwarded(request);
}
if (v !== undefined) request.ip = v.for;
return handler(request);
};
}; |