#!/usr/bin/env node /* ===================================================================== workspace-code.js — Zugangscodes für den Creator Workspace verwalten. Läuft NUR auf der Kommandozeile des Servers. Der Code wird dabei einmal angezeigt und danach nirgends mehr gespeichert -- in der Datenbank liegt ausschließlich sein scrypt-Hash. Geht ein Code verloren, wird ein neuer erzeugt; wiederherstellen lässt er sich nicht. Das ist Absicht. Aufrufe: node server/workspace-code.js liste node server/workspace-code.js anlegen "Dogfather" admin node server/workspace-code.js neu 3 node server/workspace-code.js sperren 3 node server/workspace-code.js entsperren 3 node server/workspace-code.js protokoll [anzahl] ===================================================================== */ import { personAnlegen, personenListe, personSperren, codeNeu, protokollLesen, } from "./workspace.js"; const [, , befehl, ...rest] = process.argv; function zeigeCode(p) { const linie = "─".repeat(52); console.log(`\n${linie}`); console.log(` ${p.name} · Rolle: ${p.rolle} · Nummer: ${p.id}`); console.log(` Zugangscode: ${p.code}`); console.log(`${linie}`); console.log(" Dieser Code wird NUR JETZT angezeigt. Sicher weitergeben"); console.log(" (z. B. über Bitwarden) und hier nicht notieren.\n"); } try { switch (befehl) { case "anlegen": { const [name, rolle] = rest; if (!name || !rolle) throw new Error('Aufruf: anlegen "Name" '); zeigeCode(personAnlegen(name, rolle)); break; } case "neu": { const id = Number(rest[0]); if (!id) throw new Error("Aufruf: neu "); zeigeCode(codeNeu(id)); console.log(" Alle offenen Sitzungen dieser Person wurden beendet.\n"); break; } case "sperren": case "entsperren": { const id = Number(rest[0]); if (!id) throw new Error(`Aufruf: ${befehl} `); personSperren(id, befehl === "entsperren"); console.log(`Person ${id} ist jetzt ${befehl === "entsperren" ? "aktiv" : "gesperrt"}.`); break; } case "liste": { const alle = personenListe(); if (!alle.length) { console.log("Noch keine Personen angelegt."); break; } console.log("\n Nr Rolle Name Status Sitzungen Letzte Anmeldung"); console.log(" ".padEnd(78, "─")); for (const p of alle) { console.log( ` ${String(p.id).padStart(2)} ${p.rolle.padEnd(8)} ${p.name.slice(0, 20).padEnd(20)} ` + `${(p.aktiv ? "aktiv" : "gesperrt").padEnd(9)} ${String(p.sitzungen).padStart(6)} ` + `${p.letzter_login ? p.letzter_login.slice(0, 16).replace("T", " ") : "—"}`); } console.log(""); break; } case "protokoll": { const eintraege = protokollLesen(Number(rest[0]) || 20); if (!eintraege.length) { console.log("Protokoll ist leer."); break; } console.log(""); for (const e of eintraege) { console.log(` ${e.zeitpunkt.slice(0, 19).replace("T", " ")} ${(e.aktion || "").padEnd(26)}` + `${(e.rolle || "—").padEnd(8)} ${(e.detail || "").padEnd(18)} ${e.ip || ""}`); } console.log(""); break; } default: console.log(` Zugangscodes für den Creator Workspace liste alle Personen anzeigen anlegen "Name" Person anlegen, Code wird einmal angezeigt neu neuen Code erzeugen (beendet alte Sitzungen) sperren / entsperren Zugang sperren oder wieder freigeben protokoll [Anzahl] letzte Einträge des Audit-Logs Rollen: admin, creator, scout `); } } catch (fehler) { console.error(`\nFehler: ${fehler.message}\n`); process.exit(1); }