This repository has been archived on 2024-04-14. You can view files and clone it, but cannot push or open issues or pull requests.
icydns/src/ip/from-request.ts

52 lines
972 B
TypeScript

import { Request } from "express";
import { validv4, validv6 } from "./validators";
export function fromRequest(req: Request): { v4: string | null, v6: string | null } {
let v4 = null;
const qv4 = req.query.ipv4 || req.body.ipv4;
let v6 = null;
const qv6 = req.query.ipv6 || req.body.ipv6;
// Lets begin our trials
// Determine Address from request headers
if (req.header('x-forwarded-for')) {
v4 = req.header('x-forwarded-for');
} else {
v4 = req.socket.remoteAddress;
}
if (v4 && !validv4(v4)) {
v6 = v4
v4 = null
}
// IPv4
if (qv4 && validv4(qv4)) {
v4 = qv4
}
if (qv4 === 'ignore') {
v4 = null
}
// IPv6
if (qv6 && validv6(qv6)) {
v6 = qv6
}
if (qv6 === 'ignore') {
v6 = null
}
if (v4 === null && v6 === null) {
return { v4, v6 };
}
// Remove subnet mask and prefix
if (v6) v6 = v6.replace(/\/(\d+)$/, '')
if (v4) v4 = v4.replace(/\/(\d+)$/, '')
return { v4, v6 };
}