52 lines
972 B
TypeScript
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 };
|
|
}
|