51 lines
896 B
TypeScript
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 };
|
|
}
|