Also drops checkRateLimit/rateLimitMap -- confirmed dead code, never called by the request handler. Verified via smoke-test harness (28/28 match).
22 lines
764 B
JavaScript
22 lines
764 B
JavaScript
const fs = require("fs");
|
|
const crypto = require("crypto");
|
|
|
|
const VISITORS_FILE = "/opt/peercortex-app/visitors.json";
|
|
|
|
function loadVisitors() {
|
|
try { return JSON.parse(fs.readFileSync(VISITORS_FILE, "utf8")); } catch (_) { return { hashes: [] }; }
|
|
}
|
|
|
|
function trackVisitor(req) {
|
|
const ip = (req.headers["x-forwarded-for"] || "").split(",")[0].trim() || (req.socket && req.socket.remoteAddress) || "";
|
|
const hash = crypto.createHash("sha256").update(ip + "peercortex-salt-2026").digest("hex");
|
|
const data = loadVisitors();
|
|
if (!data.hashes.includes(hash)) {
|
|
data.hashes.push(hash);
|
|
try { fs.writeFileSync(VISITORS_FILE, JSON.stringify(data)); } catch (_) {}
|
|
}
|
|
return data.hashes.length;
|
|
}
|
|
|
|
module.exports = { loadVisitors, trackVisitor };
|