shack/src/web/ip.js

19 lines
506 B
JavaScript

const IPCIDR = require('ip-cidr');
function setIp(req, res, next) {
const ip = req.headers['x-forwarded-for']
? req.headers['x-forwarded-for'].split(',')[0]
: req.connection.remoteAddress;
// ensure IP is in expanded notation to simplify matching
const expandedIp = /:/.test(ip)
? new IPCIDR(`${ip}/128`) // IPv6
: new IPCIDR(`${ip}/32`); // IPv4
req.userIp = expandedIp.addressStart?.addressMinusSuffix || null; // eslint-disable-line no-param-reassign
next();
}
module.exports = setIp;