Perform reverse dns lookup on x-forwarded-for domain.

This commit is contained in:
Andrew Pietila 2025-01-20 00:16:04 -06:00
parent a2740f6359
commit 3c83bfaffb

View file

@ -17,6 +17,8 @@ import bodyParser from "body-parser";
import MimeMessage from "./lib/MimeMessage.js";
import MimeHeader from "./lib/MimeHeader.js";
import dns from 'node:dns';
app.use(cors());
app.use(cookieParser());
@ -42,18 +44,24 @@ app.post('/sendgrid/ingress', (req, res) => {
var envelope = JSON.parse(fields.envelope?.[0]??"{}");
messageObj.prependHeader(new MimeHeader(`Received: from ${req.headers["x-forwarded-for"]} by andrewpietila.com with HTTPS-API id ${state} for ${envelope.to??"unknown"}; ${new Date().toISOString()}`));
messageObj.prependHeader(new MimeHeader(`X-Auth-Check: SPF ${fields.SPF?.[0]??"missing"}`));
messageObj.prependHeader(new MimeHeader(`X-Auth-Check: DKIM ${fields.dkim?.[0]??"missing"}`));
messageObj.prependHeader(new MimeHeader(`Return-Path: <${envelope.from??"unknown"}>`));
dns.reverse(typeof req.headers["x-forwarded-for"] === "string" ? req.headers["x-forwarded-for"] : "192.0.2.0", (err, dnsRes) => {
if (err)
messageObj.prependHeader(new MimeHeader(`Received: from ${req.headers["x-forwarded-for"]} by andrewpietila.com with HTTPS-API id ${state} for ${envelope.to ?? "unknown"}; ${new Date().toISOString()}`));
else
messageObj.prependHeader(new MimeHeader(`Received: from ${dnsRes[0]} (${dnsRes[0]} [${req.headers["x-forwarded-for"]}] by andrewpietila.com with HTTPS-API id ${state} for ${envelope.to ?? "unknown"}; ${new Date().toISOString()}`));
messageObj.prependHeader(new MimeHeader(`X-Auth-Check: SPF ${fields.SPF?.[0] ?? "missing"}`));
messageObj.prependHeader(new MimeHeader(`X-Auth-Check: DKIM ${fields.dkim?.[0] ?? "missing"}`));
messageObj.prependHeader(new MimeHeader(`Return-Path: <${envelope.from ?? "unknown"}>`));
fs.writeFileSync(`messages/${new Date().toISOString()}.eml`, messageObj.toString());
fs.writeFileSync(`messages/${new Date().toISOString()}-headers.json`, JSON.stringify(req.headers, null, 4));
fs.writeFileSync(`messages/${new Date().toISOString()}.json`, JSON.stringify(fields, null, 4));
res.status(204);
res.end();
state++;
fs.writeFileSync("state.integer", state.toString(), { encoding: "utf-8" });
})
fs.writeFileSync(`messages/${new Date().toISOString()}.eml`, messageObj.toString());
fs.writeFileSync(`messages/${new Date().toISOString()}-headers.json`, JSON.stringify(req.headers, null, 4));
fs.writeFileSync(`messages/${new Date().toISOString()}.json`, JSON.stringify(fields, null, 4));
res.status(204);
res.end();
state++;
fs.writeFileSync("state.integer", state.toString(), {encoding: "utf-8"});
})
});