diff --git a/server-internal/waechter.mjs b/server-internal/waechter.mjs index f8ad643e..7c8477d9 100644 --- a/server-internal/waechter.mjs +++ b/server-internal/waechter.mjs @@ -274,11 +274,20 @@ async function meldung(titel, text) { ABLAUF --------------------------------------------------------------------- */ +/* 700/600 statt der Vorgabe 755/644. Hier stehen keine + personenbezogenen Daten, aber eine vollstaendige Liste aller Dienste, + Adressen und ihres Zustands -- fuer jemanden, der einen Angriff + vorbereitet, eine bequeme Landkarte. Sie kostet nichts, also gibt es + auch keinen Grund, sie herzugeben. */ +function verzeichnisSichern(pfad) { + mkdirSync(dirname(pfad), { recursive: true, mode: 0o700 }); +} + function protokoll(text) { try { - mkdirSync(dirname(PROTOKOLL), { recursive: true }); + verzeichnisSichern(PROTOKOLL); writeFileSync(PROTOKOLL, - `${new Date().toISOString()} ${text}\n`, { flag: "a" }); + `${new Date().toISOString()} ${text}\n`, { flag: "a", mode: 0o600 }); } catch { /* Protokoll ist Beiwerk, nicht der Zweck */ } console.log(text); } @@ -292,8 +301,28 @@ function zustandLesen() { } function zustandSchreiben(z) { - mkdirSync(dirname(ZUSTAND_DATEI), { recursive: true }); - writeFileSync(ZUSTAND_DATEI, JSON.stringify(z, null, 1), "utf8"); + verzeichnisSichern(ZUSTAND_DATEI); + writeFileSync(ZUSTAND_DATEI, JSON.stringify(z, null, 1), { encoding: "utf8", mode: 0o600 }); +} + +/* --------------------------------------------------------------------- + PROBELAUF: node waechter.mjs --probe + + Verschickt eine Meldung, ohne dass etwas kaputt sein muss. + + Das ist nicht Spielerei, sondern die einzige Moeglichkeit, den + MELDEWEG zu pruefen, ohne auf eine echte Stoerung zu warten. Eine + Ueberwachung, deren Zustellung stillschweigend nicht funktioniert, + ist schlimmer als gar keine: Man haelt Stille faelschlich fuer + "alles in Ordnung" -- dabei ist sie nur Stille. + --------------------------------------------------------------------- */ +if (process.argv.includes("--probe")) { + const r = await meldung( + "Probe vom Waechter", + "Wenn du das liest, kommen Stoerungsmeldungen an." + ); + protokoll(`Probelauf: ${r.gesendet ? r.gesendet + " Geraet(e) erreicht" : "NICHT zugestellt (" + r.grund + ")"}`); + process.exit(r.gesendet ? 0 : 1); } const jetzt = {};