From 3a0935e12f0c1cd9c4e8bbdefd2852b631b1d2d6 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 31 Jul 2026 00:37:51 +0200 Subject: [PATCH] =?UTF-8?q?README=20f=C3=BCr=20internen=20Bereich=20komple?= =?UTF-8?q?tt=20=C3=BCberarbeitet=20(D1-Architektur,=20Deploy-Anleitung,?= =?UTF-8?q?=20Sicherheitsmodell)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloudflare-worker/README.md | 151 ++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 60 deletions(-) diff --git a/cloudflare-worker/README.md b/cloudflare-worker/README.md index a5410d3..3c63883 100644 --- a/cloudflare-worker/README.md +++ b/cloudflare-worker/README.md @@ -1,95 +1,126 @@ -# DOGFATHER UNIVERSE — Bewerbungs-Postfach (Cloudflare Worker) +# DOGFATHER UNIVERSE — Interner Bereich (Cloudflare Worker + D1) -Dieser Worker nimmt Bewerbungen von `bewerben.html` entgegen und speichert sie in Cloudflare KV. -Nur wer den richtigen Code kennt, kann sie über `postfach.html` einsehen — der Code wird -**serverseitig** geprüft (nicht im Browser-Code sichtbar), das ist der eigentliche Schutz. +Setzt das Anforderungsdokument **„Geschützter Zugang, Rollen und Benutzerverwaltung"** +(`Geschuetzter_Zugang_Rollen_Benutzerverwaltung.pdf`) vollständig um: Session-basierte Anmeldung, +verschlüsselte (aber für Dogi jederzeit einsehbare) Zugangscodes, frei konfigurierbare Rollen mit +granularen Rechten, individuelle Ausnahmen pro Person, Aktivitätsprotokoll, Login-Lockout. -Kosten: läuft im kostenlosen Cloudflare-Tier (Workers Free + KV Free reichen für dieses Volumen locker). +Kosten: läuft im kostenlosen Cloudflare-Tier (Workers Free, D1 Free, KV Free reichen locker). ## ✅ Bereits deployed -Läuft schon unter: https://dogfather-universe-postfach.dogfather1608.workers.dev -(Health-Check: `/health`). Die Website (`assets/js/forms.js`, `index.html`, `postfach.html`) zeigt -bereits auf diese URL — die Schritte unten sind nur nötig, falls der Worker mal neu aufgesetzt -werden muss (z.B. anderer Account, Code vergessen und Secret-Reset gewünscht). +- **Interner Worker:** https://dogfather-universe-postfach.dogfather1608.workers.dev (Health-Check: `/health`) +- **D1-Datenbank:** `dogfather-universe-db` +- Website (`postfach.html`, `zugaenge.html`, `assets/js/*.js`) zeigt bereits auf diese URL. + +Die Schritte unten sind nur nötig, falls der Worker mal neu aufgesetzt werden muss. + +## Architektur + +``` +src/worker.js Router — verteilt Requests an die Handler unten +src/lib/crypto.js SHA-256-Hashing, AES-256-GCM-Verschlüsselung, ID/Token-Erzeugung +src/lib/auth.js Login-Prüfung, Sessions, Rate-Limiting/Lockout +src/lib/permissions.js Vollständiger Permission-Katalog aus dem Anforderungsdokument +src/lib/audit.js Aktivitätsprotokoll schreiben (nie mit Codes!) +src/lib/http.js CORS/JSON-Helfer +src/routes/auth.js Login/Logout +src/routes/users.js Zugänge und Teammitglieder (inkl. Code-Funktionen, NUR Owner) +src/routes/roles.js Rollen erstellen/umbenennen/löschen +src/routes/applications.js Bewerbungen: Status, Zuweisung, Notizen, Antwortentwürfe +src/routes/audit.js Aktivitätsprotokoll auslesen +migrations/0001_init.sql D1-Schema (users, roles, sessions, audit_log, applications, ...) +``` + +## Das Kernprinzip (aus dem Anforderungsdokument) + +> Nur der Hauptadministrator sieht jederzeit alle vollständigen Zugangscodes und nur der +> Hauptadministrator darf sie erstellen, ändern, kopieren, zurücksetzen oder sperren. + +Technisch umgesetzt: + +- **Owner-Code** = das `POSTFACH_CODE`-Secret. Kein Datenbankeintrag, kann nicht gelöscht/verändert + werden außer von Dogi selbst per `wrangler secret put`. +- **Team-Codes** werden **zweifach** gespeichert: + - `code_hash` (SHA-256, nicht umkehrbar) — für den schnellen Login-Vergleich. + - `code_enc` (AES-256-GCM, umkehrbar) — nur damit kann der Owner sich den Klartext-Code später + wieder anzeigen lassen. Der Schlüssel dafür liegt ausschließlich im `ENCRYPTION_KEY`-Secret. +- **Code anzeigen** verlangt zusätzlich eine Re-Authentifizierung (Owner-Code erneut eingeben), + bevor der Klartext entschlüsselt und zurückgegeben wird. +- Folgende Aktionen sind **fest an `isOwner === true` gebunden** und erscheinen nirgends als + wählbare Berechtigung: Code anzeigen/kopieren/erstellen/ändern/zurücksetzen, den eigenen + Owner-Zugang bearbeiten, die Owner-Rolle löschen/einschränken, jemanden zum Owner machen. ## Voraussetzungen - Ein (kostenloser) Cloudflare-Account - Node.js installiert (für `npx wrangler`) -## Deploy in 5 Schritten +## Deploy von Grund auf (falls je nötig) Alles im Ordner `cloudflare-worker/` ausführen: ```bash cd cloudflare-worker -# 1. Bei Cloudflare einloggen (öffnet Browser zur Anmeldung) +# 1. Bei Cloudflare einloggen npx wrangler login -# 2. KV-Namespace anlegen (Speicher für die Bewerbungen) +# 2. D1-Datenbank anlegen +npx wrangler d1 create dogfather-universe-db +# -> "database_id" aus der Ausgabe in wrangler.toml eintragen + +# 3. Schema anlegen +npx wrangler d1 execute dogfather-universe-db --remote --file=migrations/0001_init.sql + +# 4. KV-Namespace anlegen (nur noch für den Live-Status-Schalter genutzt) npx wrangler kv namespace create BEWERBUNGEN -``` +# -> "id" aus der Ausgabe in wrangler.toml eintragen -Die Ausgabe von Schritt 2 enthält eine `id = "..."`. Diese `id` in `wrangler.toml` bei -`REPLACE_ME` eintragen. - -```bash -# 3. Geheimen Zugangscode für das Postfach festlegen -# (wird abgefragt, nirgends im Code sichtbar — frei wählbar, z.B. ein langes Passwort) +# 5. Owner-Code festlegen (dein persönlicher Hauptadministrator-Zugang) npx wrangler secret put POSTFACH_CODE -# 4. Worker deployen +# 6. Verschlüsselungs-Schlüssel für Team-Codes festlegen (32 zufällige Bytes, base64) +# z.B. erzeugen mit: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" +npx wrangler secret put ENCRYPTION_KEY + +# 7. Deployen npx wrangler deploy ``` -Schritt 4 gibt eine URL aus, z.B. `https://dogfather-universe-postfach..workers.dev`. +## Wer den Owner-Code kennen darf -```bash -# 5. Kurz testen -curl https://dogfather-universe-postfach..workers.dev/health -# sollte {"ok":true,"service":"dogfather-universe-postfach"} zurückgeben -``` +Nur du. Er ist dein Hauptadministrator-Zugang — sieht ausnahmslos alles, kann Zugänge/Rollen/Codes +verwalten. Ändern: `wrangler secret put POSTFACH_CODE` erneut ausführen. -## Website mit dem Worker verbinden +## Zugänge und Teammitglieder verwalten -Nach dem Deploy die Worker-URL an zwei Stellen eintragen: +Auf `zugaenge.html` (verlinkt von `postfach.html`, wenn du als Owner eingeloggt bist): -1. `assets/js/forms.js` → Konstante `API_BASE_URL` ganz oben auf die Worker-URL setzen - (ohne abschließenden Slash). -2. `postfach.html` → Konstante `API_BASE_URL` im `