shack/src/web/ip.js

17 lines
491 B
JavaScript

import IPCIDR from 'ip-cidr';
export default 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();
}