icydns/src/utility/ip/from-request.ts

51 lines
896 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 | string = null;
const qv4 = req.query.ipv4 || req.body.ipv4;
let v6: null | string = null;
const qv6 = req.query.ipv6 || req.body.ipv6;
// Lets begin our trials
// Determine Address from request IP
v4 = req.ip;
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 };
}