Initial STUN NAT mapping console
This commit is contained in:
15
scripts/notify.js
Executable file
15
scripts/notify.js
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env node
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
const [publicAddress, publicPort, ip4p, privatePort, protocol, privateAddress] = process.argv.slice(2);
|
||||
const id = process.env.STUNMAP_RULE_ID;
|
||||
const directory = process.env.STUNMAP_STATE_DIR;
|
||||
if (!id || !directory || !publicAddress || !publicPort || !privatePort) process.exit(2);
|
||||
const target = path.join(directory, `${id}.json`);
|
||||
let previous = {};
|
||||
try { previous = JSON.parse(fs.readFileSync(target, 'utf8')); } catch {}
|
||||
const now = new Date().toISOString(); const changed = previous.publicAddress !== publicAddress || previous.publicPort !== Number(publicPort) || previous.privatePort !== Number(privatePort);
|
||||
const state = { updatedAt: now, lastVerifiedAt: now, mappingChangedAt: changed ? now : previous.mappingChangedAt, publicAddress, publicPort: Number(publicPort), ip4p, privatePort: Number(privatePort), protocol, privateAddress };
|
||||
const temp = `${target}.${process.pid}.tmp`;
|
||||
fs.writeFileSync(temp, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 }); fs.renameSync(temp, target);
|
||||
Reference in New Issue
Block a user