From ffb063b17803b1cb00172a6b877c4cd46a1f8c44 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Fri, 25 Sep 2026 03:33:48 +0200 Subject: [PATCH] feat(auth): Anmeldung, Rollen und Benutzerverwaltung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anmeldung über einen generischen OIDC-Anbieter (Ziel authentik) mit Discovery, PKCE, state und nonce, dazu ein lokaler Login mit argon2 als Notfallzugang. Die Rechte stehen in einer Tabelle, die Prüfung liegt ausschließlich serverseitig, und Rolle wie Aktiv-Status werden bei jeder Anfrage aus der Datenbank gelesen — eine entzogene Rolle greift damit sofort, ein abgeschaltetes Konto kommt nicht mit gültigem Cookie noch zwölf Stunden weiter. Kein Auth.js: v5 steht dauerhaft auf Beta, das Projekt ist im Wartungsmodus und sein Prisma-Adapter deckt Prisma 7 nicht ab. Stattdessen openid-client und jose, wie in ProxLedger. Die API von openid-client 6 wurde vorher gegen die Typdefinitionen im Paket geprüft, nicht aus dem Gedächtnis geschrieben. Ein unabhängiger Review hat einen Blocker und acht weitere Befunde gefunden, alle behoben. Der wichtigste war eine offene Weiterleitung: die Prüfung des Rücksprungziels verglich Präfixe, und "//fremd.example" besteht alle drei Bedingungen. Browser entfernen Tabulator, Zeilenumbruch und Wagenrücklauf beim Verarbeiten einer URL, übrig bleibt "//fremd.example" und damit ein fremder Host — genau das Phishing, das die Prüfung abwehren sollte. Sie löst das Ziel jetzt gegen eine Wegwerf-Basis auf und vergleicht die Herkunft. Weitere Befunde: jede OIDC-Anmeldung hätte ohne konfigurierte Gruppen die Rolle still auf LESER gesetzt, bei einem einzigen Administrator ohne Rückweg; die Verknüpfung über die E-Mail-Adresse geschah ohne email_verified und wäre der Weg gewesen, den lokalen Notfall-Administrator zu übernehmen; der letzte aktive Administrator konnte sich selbst herabstufen. Drei Fehler waren meine eigenen. Der Platzhalter-Hash gegen den Zeitkanal war erfunden und hätte sofort geworfen statt Zeit zu kosten, die Zusage wäre also falsch gewesen. nextUrl.origin lieferte im Test localhost statt 127.0.0.1 und wäre hinter einem Reverse Proxy der interne Host; alle Umleitungen gehen jetzt über APP_URL. Und overflow-x: hidden auf body hat die eigene Mobil-Prüfung blind gemacht — auf der Benutzerseite war bei 390 px ein Knopf abgeschnitten, ohne dass scrollWidth es zeigen konnte. 274 Tests, darunter die vollständige Rechtematrix, die Angriffe auf das Rücksprungziel, die Trennung von Sitzungs- und Kurzzeit-Token und ein struktureller Nachweis, dass jede Server Action mit einer Rechteprüfung beginnt. Closes #7 Co-Authored-By: Claude Opus 5 (1M context) --- .env.example | 4 + CHANGELOG.md | 21 + CLAUDE.md | 16 +- docs/devlog.md | 62 ++- docs/issues/007-auth-rollen-benutzer.md | 74 ++- docs/issues/README.md | 4 +- .../screenshots/m2/admin-benutzer-desktop.png | Bin 0 -> 170312 bytes docs/screenshots/m2/admin-benutzer-handy.png | Bin 0 -> 120106 bytes docs/screenshots/m2/anmelden-desktop.png | Bin 0 -> 45705 bytes docs/screenshots/m2/anmelden-handy.png | Bin 0 -> 33144 bytes docs/screenshots/m2/uebersicht-desktop.png | Bin 0 -> 106666 bytes docs/screenshots/m2/uebersicht-handy.png | Bin 0 -> 85676 bytes scripts/screenshots.ts | 53 ++- src/app/(app)/admin/benutzer/page.tsx | 115 +++++ src/app/(app)/layout.tsx | 25 + src/app/{ => (app)}/page.tsx | 16 +- src/app/anmelden/page.tsx | 133 ++++++ src/app/api/auth/abmelden/route.ts | 14 + src/app/api/auth/oidc/rueckruf/route.ts | 44 ++ src/app/api/auth/oidc/start/route.ts | 38 ++ src/app/globals.css | 11 +- src/components/benutzer-anlegen.tsx | 83 ++++ src/components/huelle.tsx | 62 ++- src/lib/adressen.ts | 23 + src/lib/kurzzeit-token.ts | 91 ++++ src/lib/navigation.ts | 31 +- src/lib/rollen-text.ts | 27 ++ src/lib/sitzung.ts | 144 ++++++ src/proxy.ts | 46 +- src/server/actions/anmeldung.ts | 51 +++ src/server/actions/benutzer.ts | 89 ++++ src/server/auth/anmeldung.ts | 104 +++++ src/server/auth/benutzer.ts | 330 ++++++++++++++ src/server/auth/oidc.ts | 252 ++++++++++ src/server/auth/rollen.ts | 66 +++ src/server/auth/sitzungspflicht.ts | 114 +++++ src/server/queries/benutzer.ts | 45 ++ tests/anmeldung.test.ts | 222 +++++++++ tests/benutzer.test.ts | 429 ++++++++++++++++++ tests/navigation.test.ts | 46 +- tests/rollen.test.ts | 143 ++++++ tests/sitzung.test.ts | 281 ++++++++++++ tests/zugang.test.ts | 173 +++++++ 43 files changed, 3426 insertions(+), 56 deletions(-) create mode 100644 docs/screenshots/m2/admin-benutzer-desktop.png create mode 100644 docs/screenshots/m2/admin-benutzer-handy.png create mode 100644 docs/screenshots/m2/anmelden-desktop.png create mode 100644 docs/screenshots/m2/anmelden-handy.png create mode 100644 docs/screenshots/m2/uebersicht-desktop.png create mode 100644 docs/screenshots/m2/uebersicht-handy.png create mode 100644 src/app/(app)/admin/benutzer/page.tsx create mode 100644 src/app/(app)/layout.tsx rename src/app/{ => (app)}/page.tsx (64%) create mode 100644 src/app/anmelden/page.tsx create mode 100644 src/app/api/auth/abmelden/route.ts create mode 100644 src/app/api/auth/oidc/rueckruf/route.ts create mode 100644 src/app/api/auth/oidc/start/route.ts create mode 100644 src/components/benutzer-anlegen.tsx create mode 100644 src/lib/adressen.ts create mode 100644 src/lib/kurzzeit-token.ts create mode 100644 src/lib/rollen-text.ts create mode 100644 src/lib/sitzung.ts create mode 100644 src/server/actions/anmeldung.ts create mode 100644 src/server/actions/benutzer.ts create mode 100644 src/server/auth/anmeldung.ts create mode 100644 src/server/auth/benutzer.ts create mode 100644 src/server/auth/oidc.ts create mode 100644 src/server/auth/rollen.ts create mode 100644 src/server/auth/sitzungspflicht.ts create mode 100644 src/server/queries/benutzer.ts create mode 100644 tests/anmeldung.test.ts create mode 100644 tests/benutzer.test.ts create mode 100644 tests/rollen.test.ts create mode 100644 tests/sitzung.test.ts create mode 100644 tests/zugang.test.ts diff --git a/.env.example b/.env.example index 38df94b..6fb7932 100644 --- a/.env.example +++ b/.env.example @@ -29,6 +29,10 @@ OIDC_ISSUER= OIDC_CLIENT_ID= OIDC_CLIENT_SECRET= OIDC_NAME=authentik +# Angeforderte Bereiche. Der Standard reicht fuer authentik mit dem +# Gruppen-Mapping aus docs/betrieb/authentik.md. Nur aendern, wenn der Anbieter +# die Gruppen unter einem anderen Bereich liefert. +OIDC_SCOPE=openid profile email groups # Zuordnung der Rollen ueber den groups-Claim. Wird bei jedem Login neu ausgewertet. OIDC_GROUP_ADMIN=lz-admin diff --git a/CHANGELOG.md b/CHANGELOG.md index f413000..288c341 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,16 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). ein Code kommt auch nach dem Löschen eines Geräts nicht zurück (#006) - Verschlüsselung von Geheimnissen mit AES-256-GCM aus `APP_SECRET`, für das LDAP-Bind-Passwort und später die Zugangsdaten der Connectoren (#006) +- Anmeldung über einen generischen OIDC-Anbieter mit Discovery, PKCE, `state` und `nonce`; + unbekannte Benutzer entstehen beim ersten Login, die Rolle kommt bei jeder Anmeldung neu aus + den Gruppen (#007) +- Lokale Anmeldung mit E-Mail und Passwort als Notfallzugang, nur bei `AUTH_LOCAL_ENABLED=true` + (#007) +- Rechte in einer Tabelle mit vier Rollen; geprüft ausschließlich serverseitig, Rolle und + Aktiv-Status pro Anfrage aus der Datenbank (#007) +- Benutzerverwaltung für Administratoren: Rolle setzen, Konto abschalten, lokales Konto + anlegen (#007) +- Navigation zeigt nur, was die eigene Rolle darf (#007) ### Sicherheit @@ -41,3 +51,14 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/). Klartext geschriebenes fällt damit sofort auf (#006) - Ein Lauf nimmt seine Schrittergebnisse und Kommentare beim Löschen nicht mehr mit, und ein Protokolleintrag kann seinen Urheber nicht mehr verlieren (#006) +- Das Rücksprungziel nach der Anmeldung wird aufgelöst und gegen die eigene Herkunft geprüft, + statt nur Präfixe zu vergleichen — `//fremd.example` wäre sonst eine offene Weiterleitung + gewesen (#007) +- Alle Umleitungen gehen über `APP_URL` statt über die Herkunft der Anfrage; hinter einem Reverse + Proxy zeigten sie sonst auf den internen Host (#007) +- Eine Anmeldung über den Anbieter verknüpft nur mit einem bestehenden Konto, wenn die Adresse + bestätigt ist (#007) +- Ohne eingerichtete `OIDC_GROUP_*`-Zuordnung bleibt die Rolle unangetastet, statt jeden auf + `LESER` herabzustufen (#007) +- Der letzte aktive Administrator kann sich weder herabstufen noch abschalten (#007) +- Beim Abschalten eines Kontos werden laufende Sitzungen sofort ungültig (#007) diff --git a/CLAUDE.md b/CLAUDE.md index 0ad9e0d..a8e0f83 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -72,6 +72,15 @@ Dreizeiler: Recht prüfen, Zod-Schema anwenden, Service rufen. `INTERN` immer die eigene Organisation und **verwirft** eine mitgeschickte `kundeId`. - **Rechte:** nur serverseitig, aus der `RECHTE`-Tabelle über `darf()` / `rechtErforderlich()`. Rolle und Aktiv-Status werden pro Anfrage **aus der Datenbank** gelesen, nicht aus dem Token. + **Jede Seite prüft selbst** — die Hülle unter `src/app/(app)/layout.tsx` ist das zweite Netz, + nicht das erste: Next rendert Layouts bei Navigation innerhalb desselben Layouts nicht neu. + **Route Handler deckt die Hülle nicht ab**; alles unter `src/app/api/`, das mehr tut als Auth + und Healthcheck, ruft selbst `rechtErforderlich()`. Der Proxy prüft das Cookie absichtlich nur + auf Vorhandensein, nie inhaltlich. +- **Server-Module gehören nicht ins Browser-Bündel.** Eine Client-Komponente importiert nichts aus + `src/server/*`. Was beide Seiten brauchen (Beschriftungen, Formate), liegt in `src/lib` — + `ROLLEN_TEXT` etwa in `src/lib/rollen-text.ts`, während `RECHTE` und `darf()` serverseitig + bleiben. - **`tagCode`:** wird nie geändert und nie wiederverwendet, auch nicht nach Archivierung. - **Löschen:** Geräte, Abteilungen und Vorlagen werden archiviert. Mitarbeiter werden nur `aktiv = false`. Nichts wird gelöscht, woran ein Lauf hängt. @@ -115,7 +124,12 @@ Build-Skripte von Abhängigkeiten sind in `pnpm-workspace.yaml` unter `allowBuil ## Prisma 7 Generator `prisma-client` mit Pflicht-`output` nach `src/generated/prisma`, `datasource` ohne -`url`, Zugriff über `@prisma/adapter-pg`. Ein Adapter ist **Pflicht** — `new PrismaClient()` ohne +`url`, Zugriff über `@prisma/adapter-pg`. + +**Importpfade, einmal richtig:** Modelltypen kommen aus `@/generated/prisma/client` +(`import type { Benutzer } from "@/generated/prisma/client"`), Enum-**Werte** aus +`@/generated/prisma/enums`. `@/generated/prisma/models` exportiert nur die Hilfstypen der Abfragen, +nicht die Modelle selbst — ein `import` von dort schlägt fehl. Ein Adapter ist **Pflicht** — `new PrismaClient()` ohne `adapter` wirft. Seed steht in `prisma.config.ts` unter `migrations.seed`. Der Client wird über den Lazy-Proxy in `src/lib/db.ts` geholt, damit `next build` ohne `DATABASE_URL` läuft. diff --git a/docs/devlog.md b/docs/devlog.md index db1cd51..ba6267c 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -9,11 +9,12 @@ als Unterpunkte mit Aufgabe und Dauer. |---|---|---| | #005 | M0 – Gerüst, Prozess, Design-Token | 1 h 25 min | | #006 | M1 – Datenmodell | 1 h 10 min | -| | **Summe** | **2 h 35 min** | +| #007 | M2 – Auth, Rollen, Benutzer | 1 h 35 min | +| | **Summe** | **4 h 10 min** | | Meilenstein | Tatsächlich | Status | |---|---|---| -| v0.1.0 | 2 h 35 min | in Arbeit | +| v0.1.0 | 4 h 10 min | in Arbeit | --- @@ -165,3 +166,60 @@ als Unterpunkte mit Aufgabe und Dauer. - #007 Auth, Rollen, Benutzer: `openid-client` mit Discovery, `jose`-Sitzungscookie, lokaler Login mit argon2, `RECHTE`-Tabelle, Login-Seite mit Rücksprung auf die ursprüngliche URL. + +--- + +## 2026-09-25 · Sitzung 3 · 01:55–03:35 + +**Issue:** #007 (M2) +**Version:** 0.1.0 + +### Erledigt + +- OIDC mit `openid-client` 6.8.8: Discovery, PKCE, `state`, `nonce`; API vorher gegen die + Typdefinitionen im Paket geprüft statt aus dem Gedächtnis geschrieben +- `jose`-Sitzungscookie, lokaler Login mit argon2, Rechtetabelle, JIT-Provisionierung +- Anmeldeseite, geschützter Bereich, Benutzerverwaltung, rollenabhängige Navigation +- Sub-Agent hat `rollen.ts` und `sitzung.ts` samt 85 Tests parallel gebaut (rund 6 min) +- Unabhängiger Review-Agent: ein Blocker, acht weitere Befunde, alle abgearbeitet +- **274 Tests** grün (vorher 106) + +### Entscheidungen + +- **Rücksprungziel wird aufgelöst, nicht mit Präfixen verglichen.** Die Präfix-Prüfung war eine + offene Weiterleitung: `//fremd.example` besteht `startsWith("/")`, ist kein `//` und kein + `/\` — Browser entfernen den Tabulator aber beim Verarbeiten der URL, übrig bleibt + `//fremd.example`. Das Auflösen gegen eine Wegwerf-Basis macht genau das, was der Browser tut, + und der Vergleich der Herkunft erschlägt alle Formen auf einmal. +- **Alle Umleitungen über `APP_URL`.** `nextUrl.origin` lieferte im Test `localhost` statt + `127.0.0.1`; hinter einem Reverse Proxy wäre es der interne Host. Neues Modul + `src/lib/adressen.ts`, die Herkunft der Anfrage ist nur noch Notnagel. +- **Ohne `OIDC_GROUP_*` bleibt die Rolle, wie sie ist.** Sonst wäre jede OIDC-Anmeldung eine + stille Herabstufung auf `LESER` — bei einem einzigen Administrator ohne Rückweg. +- **Verknüpfung über die Adresse nur bei `email_verified`.** Sonst wäre ein Anbieter mit frei + wählbaren Adressen der Weg, den lokalen Notfall-Administrator zu übernehmen. +- **Der letzte aktive Administrator ist geschützt**, gegen Herabstufung wie gegen Abschalten. +- **Kein `overflow-x: hidden` auf `body`.** Es sieht aus wie eine Lösung, verdeckt aber nur: zu + breiter Inhalt wird abgeschnitten statt erreichbar, und die Prüfung im Screenshot-Skript kann + ihn nicht mehr finden. Layouts müssen bei 390 px von sich aus passen. +- **`ROLLEN_TEXT` liegt in `src/lib`,** nicht in der Server-Schicht: eine Client-Komponente hätte + sonst die komplette Rechtetabelle ins Browser-Bündel gezogen. + +### Probleme + +- **Der Platzhalter-Hash gegen den Zeitkanal war erfunden** und hätte sofort geworfen statt Zeit + zu kosten. Die Zusage wäre damit schlicht falsch gewesen. Jetzt ein echter, lazy erzeugter + argon2-Hash; nachgemessen rund 1 ms Unterschied über je 60 Anfragen. +- **Beim Verschieben der Übersicht nach `(app)/` blieb `` in der Seite stehen.** Die Hülle + wurde doppelt gerendert — zwei Kopfzeilen, das innere Menü ohne Benutzer. Es war im Screenshot + zu sehen und ist mir trotzdem entgangen; gefunden hat es der Review-Agent. Ein Bild anzusehen + ersetzt nicht, gezielt nach dem zu suchen, was sich gerade geändert hat. +- **Prisma-Modelltypen kommen aus `@/generated/prisma/client`,** nicht aus `.../models` — dort + liegen nur die Hilfstypen der Abfragen. Steht jetzt in `CLAUDE.md`. +- **`networkidle` als Wartebedingung in Playwright** läuft bei einer Anwendung mit offenen + Verbindungen in den Timeout. `load` plus geladene Schriften ist deterministisch. + +### Nächster Schritt + +- #008 Betriebsmodus und Kunden: `betriebsmodus()`, `kundeErmitteln()`, Moduswechsel in beiden + Richtungen, Kundenverwaltung, Admin-Einstellungen. diff --git a/docs/issues/007-auth-rollen-benutzer.md b/docs/issues/007-auth-rollen-benutzer.md index 77d4dbe..b7f151e 100644 --- a/docs/issues/007-auth-rollen-benutzer.md +++ b/docs/issues/007-auth-rollen-benutzer.md @@ -1,9 +1,9 @@ # #007 M2 – Auth, Rollen, Benutzer -**Status:** offen +**Status:** erledigt **Meilenstein:** v0.1.0 **Labels:** phase-1, backend, frontend, security -**Geschätzt:** 8 h **Tatsächlich:** – +**Geschätzt:** 8 h **Tatsächlich:** 1 h 35 min ## Ziel @@ -11,23 +11,59 @@ Anmeldung per generischem OIDC (Ziel authentik) und als Notfallzugang lokal per ## Aufgaben -- [ ] `src/server/auth/oidc.ts`: `openid-client` 6.x mit Discovery, Umgebungsvariablen `OIDC_ISSUER`, `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET`, `OIDC_NAME`; Rücksprung-URL aus `APP_URL` abgeleitet, damit es hinter dem Reverse Proxy stimmt -- [ ] `src/lib/sitzung.ts`: `jose`-signiertes Sitzungscookie (HS256, `APP_SECRET` mit mindestens 32 Zeichen erzwungen, Hinweis auf `openssl rand -base64 48`), Nutzlast `{benutzerId, email, name, herkunft}`, Laufzeit 12 h -- [ ] Lokaler Login mit `@node-rs/argon2`, nur aktiv bei `AUTH_LOCAL_ENABLED=true` -- [ ] Rolle bei jedem OIDC-Login aus dem `groups`-Claim über `OIDC_GROUP_ADMIN`, `OIDC_GROUP_EDITOR`, `OIDC_GROUP_TECHNICIAN`, `OIDC_GROUP_VIEWER` aktualisieren; JIT-Provisioning unbekannter Benutzer beim ersten Login -- [ ] `src/server/auth/rollen.ts`: `RECHTE` als eine Tabelle (`satisfies Record`) plus `darf()` und `ROLLEN_TEXT` -- [ ] `src/server/auth/sitzungspflicht.ts`: `angemeldet()` (React-`cache`, ohne Weiterleitung) und `rechtErforderlich(recht)`; Rolle und Aktiv-Status pro Request **aus der Datenbank**, nicht aus dem Token; `sitzungenUngueltigAb` für Widerruf; reine, testbare `sitzungBewerten()` -- [ ] `src/proxy.ts`: Allowlist öffentlicher Pfade, Weiterleitung auf `/anmelden?ziel=…` -- [ ] Login-Seite im Design, OIDC-Knopf und lokales Formular, Rücksprung auf die ursprünglich angeforderte URL (nötig für `/t/[tagCode]`) -- [ ] Admin → Benutzer: Liste mit Rolle und Aktiv-Status, lokale Benutzer anlegen wenn lokaler Login aktiv -- [ ] Screenshots Login und Benutzerliste in `docs/screenshots/m2/` +- [x] `src/server/auth/oidc.ts`: `openid-client` 6.x mit Discovery, Umgebungsvariablen `OIDC_ISSUER`, `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET`, `OIDC_NAME`; Rücksprung-URL aus `APP_URL` abgeleitet, damit es hinter dem Reverse Proxy stimmt +- [x] `src/lib/sitzung.ts`: `jose`-signiertes Sitzungscookie (HS256, `APP_SECRET` mit mindestens 32 Zeichen erzwungen, Hinweis auf `openssl rand -base64 48`), Nutzlast `{benutzerId, email, name, herkunft}`, Laufzeit 12 h +- [x] Lokaler Login mit `@node-rs/argon2`, nur aktiv bei `AUTH_LOCAL_ENABLED=true` +- [x] Rolle bei jedem OIDC-Login aus dem `groups`-Claim über `OIDC_GROUP_ADMIN`, `OIDC_GROUP_EDITOR`, `OIDC_GROUP_TECHNICIAN`, `OIDC_GROUP_VIEWER` aktualisieren; JIT-Provisioning unbekannter Benutzer beim ersten Login +- [x] `src/server/auth/rollen.ts`: `RECHTE` als eine Tabelle (`satisfies Record`) plus `darf()` und `ROLLEN_TEXT` +- [x] `src/server/auth/sitzungspflicht.ts`: `angemeldet()` (React-`cache`, ohne Weiterleitung) und `rechtErforderlich(recht)`; Rolle und Aktiv-Status pro Request **aus der Datenbank**, nicht aus dem Token; `sitzungenUngueltigAb` für Widerruf; reine, testbare `sitzungBewerten()` +- [x] `src/proxy.ts`: Allowlist öffentlicher Pfade, Weiterleitung auf `/anmelden?ziel=…` +- [x] Login-Seite im Design, OIDC-Knopf und lokales Formular, Rücksprung auf die ursprünglich angeforderte URL (nötig für `/t/[tagCode]`) +- [x] Admin → Benutzer: Liste mit Rolle und Aktiv-Status, lokale Benutzer anlegen wenn lokaler Login aktiv +- [x] Screenshots Login und Benutzerliste in `docs/screenshots/m2/` ## Akzeptanzkriterien -- [ ] Anmeldung mit dem Seed-Admin gelingt, Abmelden beendet die Sitzung -- [ ] Bei `AUTH_LOCAL_ENABLED=false` ist das lokale Formular nicht vorhanden und der Endpunkt lehnt ab -- [ ] Tests fahren jede Rolle gegen jedes Recht: `LESER` darf nichts schreiben, `TECHNIKER` darf keine Verwaltung, `REDAKTEUR` darf Vorlagen, `ADMIN` alles -- [ ] Eine Rollenänderung in der Datenbank greift ohne neue Anmeldung -- [ ] Ein deaktivierter Benutzer wird mit bestehendem Cookie abgewiesen -- [ ] Aufruf von `/t/LZ-7K3F9Q` ohne Anmeldung führt nach dem Login genau dorthin zurück -- [ ] Passwörter stehen nur als argon2-Hash in der Datenbank, nie im Klartext und nie in einer API-Antwort +- [x] Anmeldung mit dem Seed-Admin gelingt, Abmelden beendet die Sitzung +- [x] Bei `AUTH_LOCAL_ENABLED=false` ist das lokale Formular nicht vorhanden und der Endpunkt lehnt ab +- [x] Tests fahren jede Rolle gegen jedes Recht: `LESER` darf nichts schreiben, `TECHNIKER` darf keine Verwaltung, `REDAKTEUR` darf Vorlagen, `ADMIN` alles +- [x] Eine Rollenänderung in der Datenbank greift ohne neue Anmeldung +- [x] Ein deaktivierter Benutzer wird mit bestehendem Cookie abgewiesen +- [x] Aufruf von `/t/LZ-7K3F9Q` ohne Anmeldung führt nach dem Login genau dorthin zurück +- [x] Passwörter stehen nur als argon2-Hash in der Datenbank, nie im Klartext und nie in einer API-Antwort + +## Beim Bauen aufgefallen + +- **Offene Weiterleitung gefunden und geschlossen.** Die Prüfung des Rücksprungziels verglich + Präfixe (`/`, nicht `//`, nicht `/\`). `//fremd.example` besteht alle drei — Browser + entfernen Tabulator, Zeilenumbruch und Wagenrücklauf beim Verarbeiten einer URL, übrig bleibt + `//fremd.example` und damit ein fremder Host. Genau das Phishing, das die Prüfung abwehren + sollte. Sie löst das Ziel jetzt gegen eine Wegwerf-Basis auf und vergleicht die Herkunft; eine + zweite Runde fängt zusätzlich `/..//fremd.example` ab, das beim Auflösen zu `//fremd.example` + wird. Prozentkodierte Steuerzeichen (`/%09/…`) sind harmlos: sie werden nicht dekodiert und + bleiben ein Pfad auf der eigenen Herkunft. +- **`nextUrl.origin` taugt nicht für Umleitungen.** Die OIDC-Umleitung landete auf + `localhost:3100`, obwohl die Anfrage an `127.0.0.1:3100` ging. Hinter einem Reverse Proxy wäre + das der interne Host. Alle Umleitungen gehen jetzt über `src/lib/adressen.ts` und damit über + `APP_URL`. +- **Der Platzhalter-Hash war erfunden** und hätte beim Prüfen sofort geworfen statt Zeit zu + kosten — die Zusage, dass die Antwortzeit nichts über vorhandene Konten verrät, wäre falsch + gewesen. Jetzt ein echter argon2-Hash, einmal lazy erzeugt. Nachgemessen: rund 1 ms Unterschied + über je 60 Anfragen, über ein Netz nicht auswertbar. +- **`overflow-x: hidden` auf `body` hat meinen eigenen Mobil-Test blind gemacht.** Auf der + Benutzerseite war bei 390 px der Knopf „Setzen" abgeschnitten, die Prüfung + `scrollWidth > clientWidth` konnte das aber nicht sehen. Das `hidden` ist raus, die Liste sind + Karten statt einer Tabelle. +- **Jede OIDC-Anmeldung hätte die Rolle überschrieben**, auch ohne konfigurierte + `OIDC_GROUP_*`-Variablen — eine stille Herabstufung des Administrators auf `LESER`, aus der es + bei nur einem Administrator keinen Rückweg gegeben hätte. Ohne eingerichtete Zuordnung bleibt + die Rolle jetzt unangetastet. +- **Verknüpfung über die E-Mail-Adresse ohne `email_verified`** wäre der Weg gewesen, den lokalen + Notfall-Administrator zu übernehmen, wenn der Anbieter frei wählbare Adressen zulässt. +- **Der letzte aktive Administrator** konnte sich selbst zum Leser machen. Jetzt abgelehnt, mit + Zählabfrage vor der Änderung. +- **`MELDUNGEN[schluessel]`** griff auf die Prototypenkette zu: `?fehler=constructor` ergab eine + 500er-Seite — auf der einen Seite, die immer gehen muss. Jetzt eine `Map`. +- **Beim Verschieben der Übersicht nach `(app)/` blieb `` in der Seite stehen**, die Hülle + wurde also doppelt gerendert — zwei Kopfzeilen, das innere Menü ohne Benutzer. Im Screenshot + sichtbar gewesen und trotzdem übersehen; der unabhängige Review hat es gefunden. diff --git a/docs/issues/README.md b/docs/issues/README.md index 2d6b0df..f571702 100644 --- a/docs/issues/README.md +++ b/docs/issues/README.md @@ -11,7 +11,7 @@ Diese Dateien sind die Quelle; `pnpm issues:sync` spiegelt sie in den Gitea-Trac | #004 | [Phase 4: Aktionen, Connectors, REST-API](004-epic-phase-4.md) | offen | v0.4.0 | – | – | | #005 | [M0 – Gerüst, Prozess, Design-Token](005-geruest-prozess-design.md) | erledigt | v0.1.0 | 6 h | 1 h 25 min | | #006 | [M1 – Datenmodell](006-datenmodell.md) | erledigt | v0.1.0 | 5 h | 1 h 10 min | -| #007 | [M2 – Auth, Rollen, Benutzer](007-auth-rollen-benutzer.md) | offen | v0.1.0 | 8 h | – | +| #007 | [M2 – Auth, Rollen, Benutzer](007-auth-rollen-benutzer.md) | erledigt | v0.1.0 | 8 h | 1 h 35 min | | #008 | [M3 – Betriebsmodus und Kunden](008-betriebsmodus-kunden.md) | offen | v0.1.0 | 6 h | – | | #009 | [M4 – Vorlagen-Versionierung im Service](009-vorlagen-versionierung.md) | offen | v0.1.0 | 6 h | – | | #010 | [M5 – Vorlagen-Editor](010-vorlagen-editor.md) | offen | v0.1.0 | 10 h | – | @@ -24,4 +24,4 @@ Diese Dateien sind die Quelle; `pnpm issues:sync` spiegelt sie in den Gitea-Trac | #017 | [M12 – Seed der sieben Vorlagen](017-seed-sieben-vorlagen.md) | offen | v0.1.0 | 8 h | – | | #018 | [M13 – E2E-Tests, Anleitung, PDF](018-e2e-anleitung-pdf.md) | offen | v0.1.0 | 14 h | – | | #019 | [M14 – Betriebswege und Release v0.1.0](019-betrieb-release.md) | offen | v0.1.0 | 10 h | – | -| | **Summe** | | | **136 h** | **2 h 35 min** | +| | **Summe** | | | **136 h** | **4 h 10 min** | diff --git a/docs/screenshots/m2/admin-benutzer-desktop.png b/docs/screenshots/m2/admin-benutzer-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..eef77bef3a735c2250f9f9435f0fffe94b75a5e1 GIT binary patch literal 170312 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®=#`*ic2ZliYHefp7-L_fW=>HZQYk9q_ZTV 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/m2/admin-benutzer-handy.png b/docs/screenshots/m2/admin-benutzer-handy.png new file mode 100644 index 0000000000000000000000000000000000000000..0cc5e86608eb6a22bf0f3dc98c7b28c7a2533a13 GIT binary patch literal 120106 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 z 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⩔8_GK^H@h-xpyyFg`C4-Lt2*-7x{#n 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 HZJz!cgNxYy literal 0 HcmV?d00001 diff --git a/docs/screenshots/m2/anmelden-desktop.png b/docs/screenshots/m2/anmelden-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..9591952c71839c265dc34130f3e0901862d2120a GIT binary patch literal 45705 zcmeFZcT`i^`!5{F8JQVWETgEjQ3RB#fPl0(Hjp9;2uM{xP+BOV28a#KHUZD@J41 z8tZO*4!_b(8c#Sjds8<1$mpfF4{tvSsAv`1+){bomzVBdF@2tPUJP@zViVH8oql-NDRL7;k#$}t_?IYh7%jVXC zBEYXmPQ4Lv6nJ}j(!2i)gA3(^6n6nx_ z`SETsFVNtE{|^U&j|X9Fx{bvJUrM_D%Q?B%@z#O2&>^uk567FZ6n%WK-PF<#ewjoHwesnFWriT&`?UZA1nj}UHl;o6+F@u3oKnMAzqW+DNX zpf@JC`-Rbufe6h|3*X zk;_yG+RlFVMl?u*hqH*5T~T0U?{f#(GAPH3aKDKjIFK zpkV)}s4-`%Js0gcvtggQ^YNVuQ^9uCrrvwfZ%??WG0^1c$?2bufo*~3=>uqu|L3n0 zrk|$-<~Z$(r3ILjcyPQ9O**u@Qo|NW()GT&TL?UBk&YK;ujRFf_%Bp&yr7*bJUs!n z#@Hjc83jIyW9o=;IpuM)V1~D{J%6C>3h!>KNr>c$mx=9i-)gBjZ#J6!@vL!YQmOqz zkYg8|e^voLo=O?b)z)ND#d-vbDqEZ@$vpoBZ8q6B_5$N_{@DRjY(^M|IM8FM2tvIUZXG?BPHptQk zzJ@s*fcDw_##WVxHhQ&@XmDY2RUwEFNJB!ir~N}*%LtmB9}}pm_USnl&RC3wYh;4m zJLJ6}PTgNlvaz{COXF?FWO{u{si~4?e&I)?DkDZyT7ucbEnMc-GX;oV7dswEijx9H z5XnJo0-|=ZS(&pv)v@HrWgE$9?)Xvt;`@l5J2R#ToRR{f{uj9{;cw-O-=whQBfyML zhguFoBI&X|_cAnVi>jPeth}$&=7O)4ozFBzpe4Qj!DPBY(8iqd?D0rOIq{{VG7*ku zf9O;Od*9b-02QR;rpUNC?xV|$jU}7I>f>APh|Xm9a08|-&;`;bNx4)wr!krXF|cx1 zI?L|PshM*GHB7D%Q0{|O*(F84tq≪hatoq@Pr?s#)$?M9l?{AQun7-m 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 F{{sE%GlT#D literal 0 HcmV?d00001 diff --git a/docs/screenshots/m2/anmelden-handy.png b/docs/screenshots/m2/anmelden-handy.png new file mode 100644 index 0000000000000000000000000000000000000000..e092c9ce0caa071a62c9cedf7d33b1a3d7d0cefb GIT binary patch literal 33144 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 literal 0 HcmV?d00001 diff --git a/docs/screenshots/m2/uebersicht-desktop.png b/docs/screenshots/m2/uebersicht-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..faeda02a749138adb55152ea4c22185eb69f39dd GIT binary patch literal 106666 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�!ls9h9$1(c$68&yE0cTkWnpdh^|z4s7$M5OmF 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
      dZaZZ|`6$o@4XW7ytovw|;9h_iHCHNB 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 literal 0 HcmV?d00001 diff --git a/scripts/screenshots.ts b/scripts/screenshots.ts index bb88708..08390fe 100644 --- a/scripts/screenshots.ts +++ b/scripts/screenshots.ts @@ -15,7 +15,7 @@ */ import { mkdir } from "node:fs/promises"; import { join } from "node:path"; -import { chromium, type Browser } from "@playwright/test"; +import { chromium, type Browser, type Cookie } from "@playwright/test"; const APP_URL = process.env["E2E_APP_URL"] ?? "http://127.0.0.1:3000"; @@ -24,9 +24,18 @@ const ANSICHTEN = [ { name: "handy", breite: 390, hoehe: 844 }, ] as const; +type Seite = { + readonly name: string; + readonly pfad: string; + /** Oeffentliche Seiten werden ohne Anmeldung aufgenommen. */ + readonly ohneAnmeldung?: boolean; +}; + /** Seiten, die abgebildet werden. Waechst mit jedem Meilenstein. */ -const SEITEN: readonly { readonly name: string; readonly pfad: string }[] = [ +const SEITEN: readonly Seite[] = [ + { name: "anmelden", pfad: "/anmelden", ohneAnmeldung: true }, { name: "uebersicht", pfad: "/" }, + { name: "admin-benutzer", pfad: "/admin/benutzer" }, ]; function argument(name: string): string | undefined { @@ -47,6 +56,37 @@ async function warteAufApp(): Promise { throw new Error(`Die App antwortet nicht auf ${APP_URL}. Erst "pnpm start" laufen lassen.`); } +/** + * Meldet sich mit dem Seed-Administrator an und gibt den Sitzungs-Cookie zurueck. + * + * Geht ueber das echte Formular statt ueber einen gesetzten Cookie: so faellt + * sofort auf, wenn die Anmeldung selbst kaputt ist. + */ +async function anmelden(browser: Browser): Promise { + const email = process.env["SEED_ADMIN_EMAIL"]; + const passwort = process.env["SEED_ADMIN_PASSWORD"]; + if (!email || !passwort) { + throw new Error( + "SEED_ADMIN_EMAIL und SEED_ADMIN_PASSWORD werden gebraucht, um die geschuetzten Seiten " + + "aufzunehmen. Siehe .env.example.", + ); + } + + const kontext = await browser.newContext({ baseURL: APP_URL }); + const tab = await kontext.newPage(); + await tab.goto("/anmelden", { waitUntil: "load" }); + await tab.fill('input[name="email"]', email); + await tab.fill('input[name="passwort"]', passwort); + await Promise.all([tab.waitForURL("**/"), tab.click('button[type="submit"]')]); + + const kekse = await kontext.cookies(); + if (!kekse.some((keks) => keks.name === "lz_sitzung")) { + throw new Error("Die Anmeldung hat kein Sitzungscookie gesetzt."); + } + await kontext.close(); + return kekse; +} + /** Erzeugt die PWA-Kacheln aus dem SVG, damit keine Bilddatei von Hand entsteht. */ async function kachelnErzeugen(browser: Browser): Promise { const svg = new URL(`${APP_URL}/icon-kachel.svg`).toString(); @@ -72,7 +112,10 @@ const browser = await chromium.launch(); try { await kachelnErzeugen(browser); - for (const seite of SEITEN.filter((s) => !nur || s.name === nur)) { + const auswahl = SEITEN.filter((s) => !nur || s.name === nur); + const kekse = auswahl.some((s) => !s.ohneAnmeldung) ? await anmelden(browser) : []; + + for (const seite of auswahl) { for (const ansicht of ANSICHTEN) { const kontext = await browser.newContext({ viewport: { width: ansicht.breite, height: ansicht.hoehe }, @@ -81,10 +124,12 @@ try { timezoneId: "Europe/Berlin", deviceScaleFactor: 2, }); + if (!seite.ohneAnmeldung) await kontext.addCookies(kekse); const tab = await kontext.newPage(); - await tab.goto(`${APP_URL}${seite.pfad}`, { waitUntil: "networkidle" }); + await tab.goto(`${APP_URL}${seite.pfad}`, { waitUntil: "load" }); // Schriften muessen geladen sein, sonst wackelt das Bild zwischen Laeufen. await tab.evaluate(() => document.fonts.ready); + await tab.waitForLoadState("domcontentloaded"); const datei = join(ziel, `${seite.name}-${ansicht.name}.png`); await tab.screenshot({ path: datei, fullPage: ansicht.name === "desktop" }); diff --git a/src/app/(app)/admin/benutzer/page.tsx b/src/app/(app)/admin/benutzer/page.tsx new file mode 100644 index 0000000..3109e4e --- /dev/null +++ b/src/app/(app)/admin/benutzer/page.tsx @@ -0,0 +1,115 @@ +import { Rolle } from "@/generated/prisma/enums"; +import { BenutzerAnlegen } from "@/components/benutzer-anlegen"; +import { aktivSetzenAktion, rolleSetzenAktion } from "@/server/actions/benutzer"; +import { lokalerLoginAktiv } from "@/server/auth/benutzer"; +import { ROLLEN_TEXT } from "@/lib/rollen-text"; +import { sitzungErforderlich } from "@/server/auth/sitzungspflicht"; +import { benutzerListe, type BenutzerZeile } from "@/server/queries/benutzer"; + +const DATUM = new Intl.DateTimeFormat("de-DE", { dateStyle: "medium", timeStyle: "short" }); + +/** + * Bewusst keine Tabelle: bei 390 px waere die letzte Spalte abgeschnitten und der + * Knopf nicht mehr erreichbar. Karten stapeln am Handy und legen sich am + * Schreibtisch nebeneinander. + */ +function BenutzerKarte({ zeile, selbst }: { zeile: BenutzerZeile; selbst: boolean }) { + const anmeldewege = + [zeile.ueberOidc ? "Anbieter" : null, zeile.mitPasswort ? "Passwort" : null] + .filter(Boolean) + .join(" · ") || "kein Anmeldeweg"; + + return ( +

    1. +
      +
      +

      + {zeile.name} +

      +

      {zeile.email}

      +

      + {anmeldewege} + {" · "} + {zeile.letzteAnmeldungAm + ? `zuletzt ${DATUM.format(zeile.letzteAnmeldungAm)}` + : "noch nie angemeldet"} +

      +
      + +
      +
      + + + +
      + + {selbst ? ( + das bist du + ) : ( +
      + + + +
      + )} +
      +
      +
    2. + ); +} + +export default async function BenutzerSeite() { + const { benutzer: angemeldeter } = await sitzungErforderlich("verwaltung", "/admin/benutzer"); + const zeilen = await benutzerListe(); + + return ( + <> +

      Benutzer

      +

      + Die Menschen, die Laufzettel bedienen. Nicht zu verwechseln mit den Mitarbeitern aus dem Verzeichnis. + Bei Anmeldung über den Anbieter wird die Rolle aus den Gruppen gesetzt und überschreibt eine hier + gewählte. +

      + +
        + {zeilen.map((zeile) => ( + + ))} +
      + +
      +

      Lokales Konto anlegen

      +

      + Gedacht als Notfallzugang, falls der Anbieter ausfällt. Das Passwort wird nur als argon2-Hash + gespeichert. +

      + +
      + + ); +} diff --git a/src/app/(app)/layout.tsx b/src/app/(app)/layout.tsx new file mode 100644 index 0000000..04ed58a --- /dev/null +++ b/src/app/(app)/layout.tsx @@ -0,0 +1,25 @@ +import { headers } from "next/headers"; +import { Huelle } from "@/components/huelle"; +import { sitzungErforderlich } from "@/server/auth/sitzungspflicht"; + +/** + * Alles unter dieser Huelle verlangt eine Anmeldung. + * + * Der Proxy leitet zwar schon um, wenn gar kein Cookie da ist – geprueft wird + * aber hier, gegen die Datenbank. Der Proxy ist nur das billige Tor, damit nicht + * jede Anfrage ohne Cookie erst eine Datenbankabfrage kostet. + */ +export default async function AppLayout({ children }: { children: React.ReactNode }) { + const kopfzeilen = await headers(); + const pfad = kopfzeilen.get("x-pfad") ?? "/"; + // Der Abfrageteil gehoert zum Ziel: wer mit abgelaufenem Cookie auf + // /laeufe?filter=offen kommt, soll auch dorthin zurueck und nicht auf /laeufe. + const ziel = pfad + (kopfzeilen.get("x-abfrage") ?? ""); + const { benutzer } = await sitzungErforderlich(undefined, ziel); + + return ( + + {children} + + ); +} diff --git a/src/app/page.tsx b/src/app/(app)/page.tsx similarity index 64% rename from src/app/page.tsx rename to src/app/(app)/page.tsx index c31601b..bf98a35 100644 --- a/src/app/page.tsx +++ b/src/app/(app)/page.tsx @@ -1,19 +1,17 @@ -import { Huelle } from "@/components/huelle"; - export default function Startseite() { return ( - + <>

      Übersicht

      - Das Gerüst steht: Gestaltung, Betriebsstand, Qualitätsschranken und Prozess. Die Fachlichkeit kommt ab - dem Datenmodell. + Datenmodell und Anmeldung stehen. Als Nächstes kommen die Betriebsmodi und darauf die Vorlagen — + danach lässt sich der erste Lauf wirklich abarbeiten.

      {[ - { nummer: "01", titel: "Datenmodell", issue: "#006" }, - { nummer: "02", titel: "Anmeldung und Rollen", issue: "#007" }, - { nummer: "03", titel: "Betriebsmodus und Kunden", issue: "#008" }, + { nummer: "01", titel: "Betriebsmodus und Kunden", issue: "#008" }, + { nummer: "02", titel: "Vorlagen-Versionierung", issue: "#009" }, + { nummer: "03", titel: "Vorlagen-Editor", issue: "#010" }, ].map((karte) => (

      @@ -24,6 +22,6 @@ export default function Startseite() {

      ))}
      -
      + ); } diff --git a/src/app/anmelden/page.tsx b/src/app/anmelden/page.tsx new file mode 100644 index 0000000..ccb77ab --- /dev/null +++ b/src/app/anmelden/page.tsx @@ -0,0 +1,133 @@ +import { redirect } from "next/navigation"; +import { Bildmarke } from "@/components/bildmarke"; +import { Wortmarke } from "@/components/wortmarke"; +import { Button } from "@/components/ui/button"; +import { versionText } from "@/lib/version"; +import { anmeldenAktion } from "@/server/actions/anmeldung"; +import { sicheresZiel } from "@/server/auth/anmeldung"; +import { lokalerLoginAktiv } from "@/server/auth/benutzer"; +import { oidcAktiv, oidcName } from "@/server/auth/oidc"; +import { angemeldet } from "@/server/auth/sitzungspflicht"; + +/** + * Als Map statt als Objekt: ein Nachschlagen mit `fehler=constructor` oder + * `__proto__` haette sonst eine Funktion aus der Prototypenkette geliefert, die + * React nicht rendern kann – ein verschickter Link haette die einzige Seite + * lahmgelegt, die immer gehen muss. + */ +const MELDUNGEN = new Map( + Object.entries({ + zugangsdaten: "E-Mail-Adresse oder Passwort stimmt nicht.", + eingabe: "Bitte E-Mail-Adresse und Passwort ausfüllen.", + "oidc-aus": "Die Anmeldung über den Anbieter ist nicht eingerichtet.", + "oidc-start": "Der Anbieter war nicht erreichbar. Bitte später erneut versuchen.", + "oidc-rueckruf": "Die Anmeldung beim Anbieter ist fehlgeschlagen.", + keinrecht: "Für diesen Bereich fehlt dir die Berechtigung.", + }), +); + +export default async function AnmeldeSeite({ + searchParams, +}: { + searchParams: Promise>; +}) { + const parameter = await searchParams; + const einzeln = (name: string): string | undefined => { + const wert = parameter[name]; + return Array.isArray(wert) ? wert[0] : wert; + }; + + const ziel = sicheresZiel(einzeln("ziel")); + + // Wer schon angemeldet ist, hat auf der Anmeldeseite nichts verloren. + if (await angemeldet()) { + redirect(ziel); + } + + const fehlerschluessel = einzeln("fehler"); + const meldung = fehlerschluessel ? MELDUNGEN.get(fehlerschluessel) : undefined; + const abgemeldet = einzeln("abgemeldet") === "1"; + const mitOidc = oidcAktiv(); + const mitPasswort = lokalerLoginAktiv(); + + return ( +
      + ); +} diff --git a/src/app/api/auth/abmelden/route.ts b/src/app/api/auth/abmelden/route.ts new file mode 100644 index 0000000..1f236a7 --- /dev/null +++ b/src/app/api/auth/abmelden/route.ts @@ -0,0 +1,14 @@ +import { NextResponse, type NextRequest } from "next/server"; +import { oeffentlicheAdresse } from "@/lib/adressen"; +import { sitzungBeenden } from "@/server/auth/anmeldung"; + +/** + * Abmelden. Nur per POST, damit ein fremder Link oder ein vorgeladenes Bild + * niemanden abmelden kann. + */ +export async function POST(anfrage: NextRequest): Promise { + await sitzungBeenden(); + return NextResponse.redirect(oeffentlicheAdresse("/anmelden?abgemeldet=1", anfrage.nextUrl.origin), { + status: 303, + }); +} diff --git a/src/app/api/auth/oidc/rueckruf/route.ts b/src/app/api/auth/oidc/rueckruf/route.ts new file mode 100644 index 0000000..0e46107 --- /dev/null +++ b/src/app/api/auth/oidc/rueckruf/route.ts @@ -0,0 +1,44 @@ +import { NextResponse, type NextRequest } from "next/server"; +import { oeffentlicheAdresse } from "@/lib/adressen"; +import { sicheresZiel, sitzungSetzen } from "@/server/auth/anmeldung"; +import { benutzerAusOidcUebernehmen } from "@/server/auth/benutzer"; +import { OIDC_FLUSS_COOKIE, anmeldungAbschliessen } from "@/server/auth/oidc"; + +/** + * Rueckruf des OIDC-Anbieters. Prueft den Fluss, uebernimmt den Benutzer und + * setzt die Sitzung. + */ +export async function GET(anfrage: NextRequest): Promise { + const flussToken = anfrage.cookies.get(OIDC_FLUSS_COOKIE)?.value; + + try { + // Die Adresse fuer die Pruefung muss die oeffentliche sein – der Anbieter + // hat gegen die registrierte Rueckruf-Adresse signiert. + const aktuelleAdresse = oeffentlicheAdresse( + anfrage.nextUrl.pathname + anfrage.nextUrl.search, + anfrage.nextUrl.origin, + ); + + const anspruecke = await anmeldungAbschliessen(aktuelleAdresse, flussToken); + const benutzer = await benutzerAusOidcUebernehmen(anspruecke); + await sitzungSetzen(benutzer, "oidc"); + + const antwort = NextResponse.redirect( + oeffentlicheAdresse(sicheresZiel(anspruecke.ziel), anfrage.nextUrl.origin), + ); + antwort.cookies.delete(OIDC_FLUSS_COOKIE); + return antwort; + } catch (fehler) { + // Nur Name und Meldung: die cause-Kette von openid-client kann + // Antworten des Anbieters mitfuehren. + console.error( + `OIDC-Rueckruf fehlgeschlagen:`, + fehler instanceof Error ? `${fehler.name}: ${fehler.message}` : String(fehler), + ); + const antwort = NextResponse.redirect( + oeffentlicheAdresse("/anmelden?fehler=oidc-rueckruf", anfrage.nextUrl.origin), + ); + antwort.cookies.delete(OIDC_FLUSS_COOKIE); + return antwort; + } +} diff --git a/src/app/api/auth/oidc/start/route.ts b/src/app/api/auth/oidc/start/route.ts new file mode 100644 index 0000000..80b559a --- /dev/null +++ b/src/app/api/auth/oidc/start/route.ts @@ -0,0 +1,38 @@ +import { NextResponse, type NextRequest } from "next/server"; +import { oeffentlicheAdresse } from "@/lib/adressen"; +import { sicheresZiel, ueberHttps } from "@/server/auth/anmeldung"; +import { OIDC_FLUSS_COOKIE, anmeldungStarten, oidcAktiv } from "@/server/auth/oidc"; + +/** Beginnt die Anmeldung beim OIDC-Anbieter und leitet den Browser dorthin. */ +export async function GET(anfrage: NextRequest): Promise { + if (!oidcAktiv()) { + return NextResponse.redirect(oeffentlicheAdresse("/anmelden?fehler=oidc-aus", anfrage.nextUrl.origin)); + } + + const ziel = sicheresZiel(anfrage.nextUrl.searchParams.get("ziel")); + try { + const { adresse, flussToken } = await anmeldungStarten(ziel); + const antwort = NextResponse.redirect(adresse); + antwort.cookies.set(OIDC_FLUSS_COOKIE, flussToken, { + httpOnly: true, + // Der Rueckruf kommt als Navigation vom Anbieter zurueck, also lax. + sameSite: "lax", + // Das Schema der eigenen Anwendung, nicht das des Anbieters: laeuft + // authentik auf https und Laufzettel im Intranet auf http, schickte der + // Browser ein Secure-Cookie nie zurueck und der Rueckruf scheiterte + // reproduzierbar mit "Anmeldevorgang abgelaufen". + secure: ueberHttps(), + path: "/api/auth/oidc", + maxAge: 600, + }); + return antwort; + } catch (fehler) { + // Nur Name und Meldung: die cause-Kette von openid-client kann + // Antworten des Anbieters mitfuehren. + console.error( + `OIDC-Anmeldung konnte nicht begonnen werden:`, + fehler instanceof Error ? `${fehler.name}: ${fehler.message}` : String(fehler), + ); + return NextResponse.redirect(oeffentlicheAdresse("/anmelden?fehler=oidc-start", anfrage.nextUrl.origin)); + } +} diff --git a/src/app/globals.css b/src/app/globals.css index 8791f56..52ae3a2 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -103,10 +103,17 @@ body { background-color: var(--color-grund); color: var(--color-text); font-family: var(--font-sans); - /* Am Handy darf nie horizontal gescrollt werden. */ - overflow-x: hidden; } +/* + * Kein overflow-x: hidden auf body. + * + * Es sieht aus, als loese es das Problem, verdeckt es aber nur: zu breiter + * Inhalt wird abgeschnitten statt erreichbar, und die Pruefung in + * scripts/screenshots.ts kann es dann nicht mehr finden. Layouts muessen bei + * 390 px von sich aus passen. + */ + h1, h2, h3, diff --git a/src/components/benutzer-anlegen.tsx b/src/components/benutzer-anlegen.tsx new file mode 100644 index 0000000..8ba8953 --- /dev/null +++ b/src/components/benutzer-anlegen.tsx @@ -0,0 +1,83 @@ +"use client"; + +import { useActionState } from "react"; +import { Rolle } from "@/generated/prisma/enums"; +import { Button } from "@/components/ui/button"; +import { ROLLEN_TEXT } from "@/lib/rollen-text"; +import { benutzerAnlegenAktion, type AktionsErgebnis } from "@/server/actions/benutzer"; + +const FELD = + "min-h-11 rounded-karte border border-linie bg-grund px-3 text-sm text-text outline-none focus-visible:border-akzent"; + +/** + * Formular fuer ein lokales Konto. Als Client-Komponente, weil Erfolg und Fehler + * ohne Neuladen an Ort und Stelle erscheinen sollen – die Rechtepruefung liegt + * trotzdem ausschliesslich serverseitig in der Aktion. + */ +export function BenutzerAnlegen({ aktiv }: { aktiv: boolean }) { + const [ergebnis, aktion, laeuft] = useActionState(benutzerAnlegenAktion, {}); + + if (!aktiv) { + return ( +

      + Der lokale Login ist abgeschaltet (AUTH_LOCAL_ENABLED). Neue Konten + entstehen beim ersten Anmelden über den Anbieter von selbst. +

      + ); + } + + return ( +
      +
      + + + + +
      + + {ergebnis.fehler ? ( +

      + {ergebnis.fehler} +

      + ) : null} + {ergebnis.erfolg ? ( +

      + {ergebnis.erfolg} +

      + ) : null} + + +
      + ); +} diff --git a/src/components/huelle.tsx b/src/components/huelle.tsx index 07a6d38..ff52692 100644 --- a/src/components/huelle.tsx +++ b/src/components/huelle.tsx @@ -5,6 +5,7 @@ import { FileText, LayoutDashboard, ListChecks, + LogOut, Menu, ScanLine, Settings, @@ -14,7 +15,10 @@ import { import { Button } from "@/components/ui/button"; import { Bildmarke } from "@/components/bildmarke"; import { Wortmarke } from "@/components/wortmarke"; +import type { Rolle } from "@/generated/prisma/enums"; import { navigationFuer, type Betriebsmodus, type NavEintrag } from "@/lib/navigation"; +import { ROLLEN_TEXT } from "@/lib/rollen-text"; +import { darf } from "@/server/auth/rollen"; import { cn } from "@/lib/utils"; import { versionText } from "@/lib/version"; @@ -28,18 +32,25 @@ const SYMBOLE: Record = { Settings, }; -function NavListe({ modus, aktiv }: { modus: Betriebsmodus; aktiv: string }) { +function NavListe({ modus, aktiv, rolle }: { modus: Betriebsmodus; aktiv: string; rolle?: Rolle }) { + const eintraege = navigationFuer(modus, (recht) => (rolle ? darf(rolle, recht) : false)); return (
        - {navigationFuer(modus).map((eintrag) => ( + {eintraege.map((eintrag) => (
      • - +
      • ))}
      ); } +/** Die Uebersicht nur bei genauer Uebereinstimmung, alles andere auch fuer Unterseiten. */ +function istAktiv(pfad: string, aktiv: string): boolean { + if (pfad === "/") return aktiv === "/"; + return aktiv === pfad || aktiv.startsWith(`${pfad}/`); +} + function NavZeile({ eintrag, aktiv }: { eintrag: NavEintrag; aktiv: boolean }) { const Symbol = SYMBOLE[eintrag.symbol] ?? LayoutDashboard; const inhalt = ( @@ -92,6 +103,33 @@ function ScannenKnopf({ className }: { className?: string }) { ); } +export type AngemeldeterBenutzer = { + readonly name: string; + readonly rolle: Rolle; +}; + +function BenutzerBlock({ benutzer }: { benutzer: AngemeldeterBenutzer }) { + return ( +
      +
      +

      {benutzer.name}

      +

      {ROLLEN_TEXT[benutzer.rolle]}

      +
      + {/* Abmelden per POST, damit ein fremder Link niemanden abmelden kann. */} +
      + +
      +
      + ); +} + /** * Huelle der Anwendung: dunkle Seitenleiste am Schreibtisch, am Handy eine * Kopfzeile mit aufklappbarem Menue. Der Scannen-Knopf sitzt an beiden Stellen @@ -101,10 +139,12 @@ export function Huelle({ children, modus = "INTERN", aktiv = "/", + benutzer, }: { children: React.ReactNode; modus?: Betriebsmodus; aktiv?: string; + benutzer?: AngemeldeterBenutzer; }) { return (
      @@ -121,8 +161,13 @@ export function Huelle({ >
      @@ -136,9 +181,12 @@ export function Huelle({ - {versionText()} +
      + {benutzer ? : null} + {versionText()} +
      {children}
      diff --git a/src/lib/adressen.ts b/src/lib/adressen.ts new file mode 100644 index 0000000..1513a59 --- /dev/null +++ b/src/lib/adressen.ts @@ -0,0 +1,23 @@ +/** + * Adressen der Anwendung nach aussen (#007). + * + * Massgeblich ist APP_URL, nicht die eingehende Anfrage. Hinter einem Reverse + * Proxy traegt die Anfrage den internen Host und oft auch das falsche Schema – + * eine daraus gebaute Umleitung schickt den Benutzer dann an eine Adresse, die + * er gar nicht erreicht, und eine daraus gebaute OIDC-Rueckruf-Adresse passt + * nicht zu der beim Anbieter hinterlegten. + * + * Die Herkunft der Anfrage dient nur als Notnagel, damit die Anwendung auch ohne + * gesetzte APP_URL nicht stehen bleibt. + */ +export function oeffentlicheAdresse(pfad: string, ersatzHerkunft: string): URL { + const basis = process.env["APP_URL"]?.trim(); + if (basis) { + try { + return new URL(pfad, basis); + } catch { + // Eine unbrauchbare APP_URL soll die Anmeldung nicht blockieren. + } + } + return new URL(pfad, ersatzHerkunft); +} diff --git a/src/lib/kurzzeit-token.ts b/src/lib/kurzzeit-token.ts new file mode 100644 index 0000000..ad60bbd --- /dev/null +++ b/src/lib/kurzzeit-token.ts @@ -0,0 +1,91 @@ +import { scryptSync } from "node:crypto"; +import { SignJWT, jwtVerify } from "jose"; + +/** + * Kurzlebige, signierte Nutzlast fuer Zustaende, die zwischen zwei Anfragen + * ueberleben muessen (#007) – heute der OIDC-Anmeldefluss mit `state`, `nonce`, + * PKCE-Pruefwert und dem urspruenglich angeforderten Ziel. + * + * Bewusst getrennt von der Sitzung in src/lib/sitzung.ts: das hier lebt Minuten + * statt Stunden, ist einmalig und traegt keine Identitaet. Beide sind ueber + * `audience` gegeneinander abgegrenzt, ein Token kann also nicht an der falschen + * Stelle durchrutschen. + */ +const ALGORITHMUS = "HS256"; + +const HERAUSGEBER = "laufzettel"; + +const SALZ = "laufzettel.kurzzeit.v1"; + +const MINDESTLAENGE = 32; + +export class KurzzeitFehler extends Error { + constructor(nachricht: string) { + super(nachricht); + this.name = "KurzzeitFehler"; + } +} + +/** + * Der Schluessel wird erst beim ersten Aufruf abgeleitet, damit `next build` ohne + * gesetztes APP_SECRET laeuft. Die Quelle wird mitgemerkt, damit ein geaendertes + * Geheimnis nicht am Zwischenspeicher vorbeilaeuft. + */ +let abgeleitet: { quelle: string; schluessel: Uint8Array } | undefined; + +function schluesselHolen(): Uint8Array { + const quelle = process.env["APP_SECRET"] ?? ""; + if (quelle.length < MINDESTLAENGE) { + throw new KurzzeitFehler( + `APP_SECRET fehlt oder ist zu kurz (mindestens ${MINDESTLAENGE} Zeichen). ` + + "Erzeugen mit: openssl rand -base64 48", + ); + } + if (abgeleitet?.quelle !== quelle) { + abgeleitet = { quelle, schluessel: new Uint8Array(scryptSync(quelle, SALZ, 32)) }; + } + return abgeleitet.schluessel; +} + +/** Signiert eine Nutzlast fuer den angegebenen Zweck und die angegebene Dauer. */ +export async function kurzzeitTokenErzeugen( + zweck: string, + nutzlast: Record, + gueltigkeitSekunden: number, +): Promise { + return new SignJWT(nutzlast) + .setProtectedHeader({ alg: ALGORITHMUS }) + .setIssuedAt() + .setIssuer(HERAUSGEBER) + .setAudience(zweck) + .setExpirationTime(`${gueltigkeitSekunden}s`) + .sign(schluesselHolen()); +} + +/** + * Liest eine Nutzlast zurueck. Gibt `undefined` zurueck, wenn das Token fehlt, + * abgelaufen, verfaelscht oder fuer einen anderen Zweck ausgestellt ist – der + * Aufrufer behandelt all das gleich. + */ +export async function kurzzeitTokenLesen( + zweck: string, + token: string | undefined, +): Promise | undefined> { + if (!token) return undefined; + try { + const { payload } = await jwtVerify(token, schluesselHolen(), { + algorithms: [ALGORITHMUS], + issuer: HERAUSGEBER, + audience: zweck, + }); + const werte: Record = {}; + for (const [schluessel, wert] of Object.entries(payload)) { + if (typeof wert === "string") werte[schluessel] = wert; + } + return werte; + } catch (fehler) { + // Ein Konfigurationsfehler ist etwas anderes als ein ungueltiges Token. + if (fehler instanceof KurzzeitFehler) throw fehler; + return undefined; + } +} diff --git a/src/lib/navigation.ts b/src/lib/navigation.ts index c42d8de..bcbb310 100644 --- a/src/lib/navigation.ts +++ b/src/lib/navigation.ts @@ -5,6 +5,8 @@ * die Huelle von Anfang an die echte Struktur, ohne auf Seiten zu verlinken, die * es noch nicht gibt. Die Beschriftungen haengen am Betriebsmodus (#008). */ +import type { Recht } from "@/server/auth/rollen"; + export type Betriebsmodus = "INTERN" | "DIENSTLEISTUNG"; export type NavEintrag = { @@ -15,6 +17,8 @@ export type NavEintrag = { /** Nur in diesem Modus zeigen. Fehlt der Wert, gilt der Eintrag in beiden. */ readonly nurModus?: Betriebsmodus; readonly symbol: string; + /** Wer dieses Recht nicht hat, sieht den Eintrag gar nicht erst. */ + readonly recht?: Recht; readonly verfuegbar: boolean; /** Issue, das die Seite liefert – nur fuer den Hinweis, solange sie fehlt. */ readonly ausIssue?: number; @@ -41,11 +45,32 @@ export const NAVIGATION: readonly NavEintrag[] = [ ausIssue: 8, }, { pfad: "/archiv", beschriftung: "Archiv", symbol: "Archive", verfuegbar: false, ausIssue: 15 }, - { pfad: "/admin", beschriftung: "Admin", symbol: "Settings", verfuegbar: false, ausIssue: 8 }, + { + // Zeigt vorerst direkt auf die Benutzerverwaltung; mit #008 kommen die + // Einstellungen dazu und daraus wird ein eigener Bereich. + pfad: "/admin/benutzer", + beschriftung: "Admin", + symbol: "Settings", + recht: "verwaltung", + verfuegbar: true, + }, ]; -export function navigationFuer(modus: Betriebsmodus): readonly NavEintrag[] { - return NAVIGATION.filter((e) => e.nurModus === undefined || e.nurModus === modus).map((e) => +/** + * Die sichtbaren Eintraege fuer diesen Modus und diese Rolle. + * + * Das Ausblenden ist Bequemlichkeit, keine Absicherung – die Rechtepruefung + * sitzt in der Service-Schicht. Aber ein Leser soll nicht auf Knoepfe klicken, + * die ihm hinterher eine Fehlermeldung zeigen. + */ +export function navigationFuer( + modus: Betriebsmodus, + darfEintrag: (recht: Recht) => boolean = () => true, +): readonly NavEintrag[] { + return NAVIGATION.filter( + (e) => + (e.nurModus === undefined || e.nurModus === modus) && (e.recht === undefined || darfEintrag(e.recht)), + ).map((e) => modus === "DIENSTLEISTUNG" && e.beschriftungDienstleistung ? { ...e, beschriftung: e.beschriftungDienstleistung } : e, diff --git a/src/lib/rollen-text.ts b/src/lib/rollen-text.ts new file mode 100644 index 0000000..4c45ce2 --- /dev/null +++ b/src/lib/rollen-text.ts @@ -0,0 +1,27 @@ +import { Rolle } from "@/generated/prisma/enums"; + +/** + * Beschriftung und Rangfolge der Rollen. + * + * Liegt bewusst in src/lib und nicht in src/server/auth/rollen.ts: die + * Oberflaeche braucht die Beschriftungen auch in Client-Komponenten, und ein + * Import aus der Server-Schicht wuerde die Rechtetabelle mit ins Browser-Buendel + * ziehen. Wer darf was, bleibt serverseitig. + */ +export const ROLLEN_TEXT: Record = { + [Rolle.ADMIN]: "Administrator", + [Rolle.REDAKTEUR]: "Redakteur", + [Rolle.TECHNIKER]: "Techniker", + [Rolle.LESER]: "Leser", +}; + +/** + * Hoeher ist staerker. Die Luecken von zehn lassen Platz fuer Zwischenrollen, + * ohne die vorhandenen Werte anfassen zu muessen. + */ +export const ROLLEN_RANG: Record = { + [Rolle.ADMIN]: 40, + [Rolle.REDAKTEUR]: 30, + [Rolle.TECHNIKER]: 20, + [Rolle.LESER]: 10, +}; diff --git a/src/lib/sitzung.ts b/src/lib/sitzung.ts new file mode 100644 index 0000000..6aba47c --- /dev/null +++ b/src/lib/sitzung.ts @@ -0,0 +1,144 @@ +import { SignJWT, jwtVerify } from "jose"; + +/** + * Das signierte Sitzungscookie (#007). + * + * Absichtlich framework-frei: kein `next/headers`, kein Prisma, kein React. Das Setzen und + * Loeschen des Cookies gehoert in die Next-Schicht, das Nachladen von Rolle und Aktiv-Status + * in die Datenbankschicht. Hier steht nur, wie ein Token entsteht und wie es geprueft wird -- + * so laesst sich beides ohne Next und ohne Datenbank testen. + * + * Im Token stehen deshalb nur Angaben, die sich nicht hinter dem Ruecken der Anwendung + * aendern: wer angemeldet ist und woher die Anmeldung kam. Rolle und Aktiv-Status stehen + * bewusst *nicht* darin, sonst wirkte ein Rechteentzug erst nach zwoelf Stunden. + */ +export const SITZUNG_COOKIE = "lz_sitzung"; + +/** + * Ein Arbeitstag. Lang genug, dass niemand sich mitten in einem Lauf neu anmelden muss, + * kurz genug, dass ein liegengelassenes Notebook am naechsten Morgen abgemeldet ist. + */ +export const SITZUNG_LAUFZEIT_STUNDEN = 12; + +export type SitzungsHerkunft = "passwort" | "oidc"; + +export type Sitzung = { + benutzerId: string; + email: string; + name: string; + herkunft: SitzungsHerkunft; + /** Sekunden seit Epoche, aus dem iat-Anspruch. */ + ausgestelltAm: number; +}; + +/** + * `issuer` und `audience` werden beim Lesen geprueft, damit ein mit demselben Geheimnis + * signiertes Token aus einem anderen Zweck (etwa ein Einladungslink) nicht als Sitzung + * durchrutscht. + */ +const AUSSTELLER = "laufzettel"; +const ZIELGRUPPE = "laufzettel"; + +/** HS256 genuegt: derselbe Dienst signiert und prueft, ein Schluesselpaar braucht es nicht. */ +const ALGORITHMUS = "HS256"; + +const MINDESTLAENGE = 32; + +const ERLAUBTE_HERKUNFT: readonly SitzungsHerkunft[] = ["passwort", "oidc"]; + +export class SitzungsFehler extends Error { + constructor(nachricht: string, optionen?: ErrorOptions) { + super(nachricht, optionen); + this.name = "SitzungsFehler"; + } +} + +/** + * Der Schluessel wird erst beim ersten Aufruf abgeleitet, nicht beim Import: `next build` + * laeuft ohne gesetztes `APP_SECRET` und wuerde sonst abbrechen. Gemerkt wird die Quelle mit, + * damit ein geaendertes `APP_SECRET` (in Tests, nach einer Rotation) nicht am Zwischenspeicher + * vorbeilaeuft -- genau wie in `src/lib/geheimnisse.ts`. + */ +let abgeleitet: { quelle: string; schluessel: Uint8Array } | undefined; + +function schluesselHolen(): Uint8Array { + const quelle = process.env["APP_SECRET"] ?? ""; + if (quelle.length < MINDESTLAENGE) { + // Die tatsaechliche Laenge steht bewusst nicht in der Meldung: sie koennte in einem Log + // landen und verriete etwas ueber das Geheimnis. + throw new SitzungsFehler( + `APP_SECRET fehlt oder ist zu kurz (mindestens ${MINDESTLAENGE} Zeichen). ` + + "Erzeugen mit: openssl rand -base64 48", + ); + } + if (abgeleitet?.quelle !== quelle) { + abgeleitet = { quelle, schluessel: new TextEncoder().encode(quelle) }; + } + return abgeleitet.schluessel; +} + +export async function sitzungErzeugen(daten: Omit): Promise { + const schluessel = schluesselHolen(); + return await new SignJWT({ + email: daten.email, + name: daten.name, + herkunft: daten.herkunft, + }) + .setProtectedHeader({ alg: ALGORITHMUS }) + // Die Benutzerkennung steht im `sub`-Anspruch, dem dafuer vorgesehenen Feld -- so ist das + // Token auch mit fremdem Werkzeug lesbar. + .setSubject(daten.benutzerId) + .setIssuer(AUSSTELLER) + .setAudience(ZIELGRUPPE) + .setIssuedAt() + .setExpirationTime(`${SITZUNG_LAUFZEIT_STUNDEN}h`) + .sign(schluessel); +} + +/** Gibt undefined zurueck, wenn das Token fehlt, abgelaufen, verfaelscht oder fremd ist -- wirft nicht. */ +export async function sitzungLesen(jwt: string | undefined): Promise { + // Absichtlich vor dem `try`: ein zu kurzes `APP_SECRET` ist ein Konfigurationsfehler und + // darf nicht als "nicht angemeldet" durchgehen, sonst sucht niemand die Ursache. + const schluessel = schluesselHolen(); + if (jwt === undefined || jwt.length === 0) { + return undefined; + } + + try { + const { payload } = await jwtVerify(jwt, schluessel, { + // Ohne diese Einschraenkung waere ein Token mit `alg: none` oder einem anderen + // Verfahren denkbar. `issuer` und `audience` haelt jose selbst gegen. + algorithms: [ALGORITHMUS], + issuer: AUSSTELLER, + audience: ZIELGRUPPE, + }); + + const { sub, iat, email, name, herkunft } = payload; + // Signatur und Ablauf sind geprueft, der Inhalt aber noch nicht: ein aelteres oder von + // Hand gebautes Token kann Felder vermissen. Ein halb gefuelltes Sitzungsobjekt waere + // schlimmer als keines. + if ( + typeof sub !== "string" || + sub.length === 0 || + typeof iat !== "number" || + typeof email !== "string" || + typeof name !== "string" || + typeof herkunft !== "string" || + !ERLAUBTE_HERKUNFT.includes(herkunft as SitzungsHerkunft) + ) { + return undefined; + } + + return { + benutzerId: sub, + email, + name, + herkunft: herkunft as SitzungsHerkunft, + ausgestelltAm: iat, + }; + } catch { + // Fehlende Signatur, falscher Schluessel, Ablauf, fremder Aussteller, kaputtes base64 -- + // fuer den Aufrufer ist das alles dasselbe: nicht angemeldet. + return undefined; + } +} diff --git a/src/proxy.ts b/src/proxy.ts index 7c7ddbb..1097fb7 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -1,15 +1,48 @@ import { NextResponse, type NextRequest } from "next/server"; +import { oeffentlicheAdresse } from "@/lib/adressen"; +import { SITZUNG_COOKIE } from "@/lib/sitzung"; /** * In Next 16 heisst die frueher middleware.ts genannte Datei proxy.ts und laeuft * in der Node-Laufzeit. * - * Hier wird die Content-Security-Policy pro Anfrage mit einer Nonce gesetzt. Sie - * muss dynamisch sein, deshalb steht sie nicht bei den statischen Kopfzeilen in - * next.config.ts. Die Anmeldepflicht kommt in #007 dazu. + * Sie tut zweierlei: + * + * 1. Content-Security-Policy mit einer Nonce je Anfrage. Die muss dynamisch + * sein, deshalb steht sie nicht bei den festen Kopfzeilen in next.config.ts. + * 2. Ein billiges Tor: ohne Sitzungscookie geht es gar nicht erst weiter, und + * der Benutzer landet auf der Anmeldeseite – mit dem urspruenglichen Ziel im + * Gepaeck. Geprueft wird das Cookie hier NICHT; das macht die Huelle unter + * src/app/(app)/layout.tsx gegen die Datenbank. Diese Trennung spart bei + * jeder Anfrage ohne Cookie eine Datenbankabfrage, ohne die Sicherheit an + * den Proxy zu haengen. */ + +/** Pfade, die ohne Anmeldung erreichbar sein muessen. */ +const OEFFENTLICH: readonly string[] = [ + "/anmelden", + // Der Anmeldevorgang selbst – ohne ihn koennte sich niemand anmelden. + "/api/auth", + // Healthcheck fuer Docker und den Reverse Proxy. + "/api/gesundheit", + "/manifest.webmanifest", + "/icon.svg", +]; + +export function istOeffentlich(pfad: string): boolean { + return OEFFENTLICH.some((eintrag) => pfad === eintrag || pfad.startsWith(`${eintrag}/`)); +} + export function proxy(anfrage: NextRequest): NextResponse { const nonce = Buffer.from(crypto.randomUUID()).toString("base64"); + const pfad = anfrage.nextUrl.pathname; + + if (!istOeffentlich(pfad) && !anfrage.cookies.has(SITZUNG_COOKIE)) { + const ziel = pfad + anfrage.nextUrl.search; + const anmelden = oeffentlicheAdresse("/anmelden", anfrage.nextUrl.origin); + if (ziel !== "/") anmelden.searchParams.set("ziel", ziel); + return NextResponse.redirect(anmelden); + } const richtlinie = [ `default-src 'self'`, @@ -29,6 +62,11 @@ export function proxy(anfrage: NextRequest): NextResponse { const kopfzeilen = new Headers(anfrage.headers); kopfzeilen.set("x-nonce", nonce); + // Server Components kennen den Pfad nicht von sich aus; die Huelle braucht ihn + // fuer den aktiven Eintrag in der Navigation und fuer den Ruecksprung nach der + // Anmeldung. + kopfzeilen.set("x-pfad", pfad); + kopfzeilen.set("x-abfrage", anfrage.nextUrl.search); const antwort = NextResponse.next({ request: { headers: kopfzeilen } }); antwort.headers.set("Content-Security-Policy", richtlinie); @@ -36,6 +74,6 @@ export function proxy(anfrage: NextRequest): NextResponse { } export const config = { - // Statische Dateien und Bilder brauchen keine CSP-Nonce. + // Statische Dateien und Bilder brauchen weder CSP-Nonce noch Tor. matcher: ["/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|webp|woff2?)$).*)"], }; diff --git a/src/server/actions/anmeldung.ts b/src/server/actions/anmeldung.ts new file mode 100644 index 0000000..fa9d490 --- /dev/null +++ b/src/server/actions/anmeldung.ts @@ -0,0 +1,51 @@ +"use server"; + +import { redirect } from "next/navigation"; +import { z } from "zod"; +import { sicheresZiel, sitzungSetzen } from "@/server/auth/anmeldung"; +import { AnmeldeFehler, lokalAnmelden } from "@/server/auth/benutzer"; + +const EingabeSchema = z.object({ + email: z.string().trim().min(1, "Bitte eine E-Mail-Adresse angeben."), + passwort: z.string().min(1, "Bitte ein Passwort angeben."), + ziel: z.string().optional(), +}); + +/** + * Anmeldung mit E-Mail und Passwort. + * + * Bewusst ohne Client-Code: ein gewoehnliches Formular, das auf eine Server + * Action zeigt. Die Anmeldeseite funktioniert damit auch, bevor irgendetwas + * hydriert ist – und das ist die eine Seite, die immer gehen muss. + */ +export async function anmeldenAktion(formular: FormData): Promise { + const eingabe = EingabeSchema.safeParse({ + email: formular.get("email"), + passwort: formular.get("passwort"), + ziel: formular.get("ziel") ?? undefined, + }); + + const ziel = sicheresZiel(typeof eingabe.data?.ziel === "string" ? eingabe.data.ziel : undefined); + + if (!eingabe.success) { + redirect(anmeldeAdresse(ziel, "eingabe")); + } + + try { + const benutzer = await lokalAnmelden(eingabe.data.email, eingabe.data.passwort); + await sitzungSetzen(benutzer, "passwort"); + } catch (fehler) { + if (fehler instanceof AnmeldeFehler) { + redirect(anmeldeAdresse(ziel, "zugangsdaten")); + } + throw fehler; + } + + redirect(ziel); +} + +function anmeldeAdresse(ziel: string, fehler: string): string { + const parameter = new URLSearchParams({ fehler }); + if (ziel !== "/") parameter.set("ziel", ziel); + return `/anmelden?${parameter.toString()}`; +} diff --git a/src/server/actions/benutzer.ts b/src/server/actions/benutzer.ts new file mode 100644 index 0000000..5b47d83 --- /dev/null +++ b/src/server/actions/benutzer.ts @@ -0,0 +1,89 @@ +"use server"; + +import { revalidatePath } from "next/cache"; +import { z } from "zod"; +import { Rolle } from "@/generated/prisma/enums"; +import { + AnmeldeFehler, + aktivSetzen, + lokalenBenutzerAnlegen, + lokalerLoginAktiv, + rolleSetzen, +} from "@/server/auth/benutzer"; +import { rechtErforderlich } from "@/server/auth/sitzungspflicht"; + +/** + * Server Actions der Benutzerverwaltung (#007). + * + * Jede ist ein Dreizeiler: Recht pruefen, Eingabe gegen ein Zod-Schema, Service + * rufen. Die Regeln stehen im Service, nicht hier. + */ + +const RollenSchema = z.enum(Object.values(Rolle) as [Rolle, ...Rolle[]]); + +const NeuSchema = z.object({ + email: z.string().trim().toLowerCase().pipe(z.email("Das ist keine gültige E-Mail-Adresse.")), + name: z.string().trim().min(1, "Bitte einen Namen angeben."), + rolle: RollenSchema, + passwort: z.string().min(12, "Das Passwort braucht mindestens 12 Zeichen."), +}); + +export type AktionsErgebnis = { readonly fehler?: string; readonly erfolg?: string }; + +export async function benutzerAnlegenAktion( + _vorher: AktionsErgebnis, + formular: FormData, +): Promise { + const { benutzer } = await rechtErforderlich("verwaltung"); + + if (!lokalerLoginAktiv()) { + return { fehler: "Der lokale Login ist abgeschaltet – ein Konto mit Passwort nützt gerade nichts." }; + } + + const eingabe = NeuSchema.safeParse({ + email: formular.get("email"), + name: formular.get("name"), + rolle: formular.get("rolle"), + passwort: formular.get("passwort"), + }); + if (!eingabe.success) { + return { fehler: eingabe.error.issues[0]?.message ?? "Die Eingabe ist unvollständig." }; + } + + try { + const neu = await lokalenBenutzerAnlegen(eingabe.data, benutzer.id); + revalidatePath("/admin/benutzer"); + return { erfolg: `${neu.name} wurde angelegt.` }; + } catch (fehler) { + // Nur eigene Fehler tragen eine Meldung, die fuer Menschen gedacht ist. + // Alles andere koennte Innenleben der Datenbank preisgeben. + if (fehler instanceof AnmeldeFehler) return { fehler: fehler.message }; + console.error("Konto anlegen fehlgeschlagen:", fehler); + return { fehler: "Das Konto konnte nicht angelegt werden." }; + } +} + +export async function rolleSetzenAktion(formular: FormData): Promise { + const { benutzer } = await rechtErforderlich("verwaltung"); + const eingabe = z + .object({ benutzerId: z.string().min(1), rolle: RollenSchema }) + .parse({ benutzerId: formular.get("benutzerId"), rolle: formular.get("rolle") }); + + await rolleSetzen(eingabe.benutzerId, eingabe.rolle, benutzer.id); + revalidatePath("/admin/benutzer"); +} + +export async function aktivSetzenAktion(formular: FormData): Promise { + const { benutzer } = await rechtErforderlich("verwaltung"); + const eingabe = z + .object({ benutzerId: z.string().min(1), aktiv: z.enum(["true", "false"]) }) + .parse({ benutzerId: formular.get("benutzerId"), aktiv: formular.get("aktiv") }); + + // Sich selbst abzuschalten wuerde einen Administrator sofort aussperren. + if (eingabe.benutzerId === benutzer.id && eingabe.aktiv === "false") { + throw new AnmeldeFehler("Das eigene Konto laesst sich nicht deaktivieren."); + } + + await aktivSetzen(eingabe.benutzerId, eingabe.aktiv === "true", benutzer.id); + revalidatePath("/admin/benutzer"); +} diff --git a/src/server/auth/anmeldung.ts b/src/server/auth/anmeldung.ts new file mode 100644 index 0000000..d47e5bb --- /dev/null +++ b/src/server/auth/anmeldung.ts @@ -0,0 +1,104 @@ +import { cookies } from "next/headers"; +import type { Benutzer } from "@/generated/prisma/client"; +import { + SITZUNG_COOKIE, + SITZUNG_LAUFZEIT_STUNDEN, + sitzungErzeugen, + type SitzungsHerkunft, +} from "@/lib/sitzung"; + +/** + * Setzen und Loeschen des Sitzungscookies (#007). + * + * Getrennt von src/lib/sitzung.ts, weil dort nichts aus Next stehen soll – so + * bleibt das Signieren und Pruefen ohne Framework testbar. + */ + +/** + * Ein Secure-Cookie ueber http kommt nie beim Server an, und die Anmeldung + * laeuft dann endlos im Kreis. Massgeblich ist das Schema von APP_URL, nicht das + * der eingehenden Anfrage – hinter einem Reverse Proxy ist die intern oft http, + * obwohl der Benutzer https spricht. + */ +let fehlendeAppUrlGemeldet = false; + +export function ueberHttps(): boolean { + const basis = process.env["APP_URL"]; + if (!basis) { + // Ohne APP_URL faellt das Secure-Flag weg. In der Entwicklung ueber http ist + // das richtig; in Produktion waere es ein Sitzungscookie im Klartext, und das + // soll nicht unbemerkt bleiben. + if (process.env["NODE_ENV"] === "production" && !fehlendeAppUrlGemeldet) { + fehlendeAppUrlGemeldet = true; + console.warn( + "APP_URL ist nicht gesetzt. Das Sitzungscookie wird ohne Secure-Flag gesetzt. " + + "Hinter HTTPS muss APP_URL auf die oeffentliche Adresse zeigen.", + ); + } + return false; + } + try { + return new URL(basis).protocol === "https:"; + } catch { + return false; + } +} + +export async function sitzungSetzen(benutzer: Benutzer, herkunft: SitzungsHerkunft): Promise { + const token = await sitzungErzeugen({ + benutzerId: benutzer.id, + email: benutzer.email, + name: benutzer.name, + herkunft, + }); + const laden = await cookies(); + laden.set(SITZUNG_COOKIE, token, { + httpOnly: true, + sameSite: "lax", + secure: ueberHttps(), + path: "/", + maxAge: SITZUNG_LAUFZEIT_STUNDEN * 60 * 60, + }); +} + +export async function sitzungBeenden(): Promise { + const laden = await cookies(); + laden.delete(SITZUNG_COOKIE); +} + +/** Basis, die es nicht gibt – dient nur dazu, das Ziel aufzuloesen. */ +const WEGWERF_BASIS = "http://ziel.invalid"; + +/** + * Nimmt nur Ziele innerhalb der eigenen Anwendung an. + * + * Ohne diese Pruefung waere `?ziel=https://fremd.example` eine offene + * Weiterleitung: ein Angreifer koennte einen Anmeldelink verschicken, der nach + * erfolgreicher Anmeldung auf seiner Seite landet. + * + * Geprueft wird ueber das Aufloesen gegen eine Wegwerf-Basis, nicht ueber + * Praefixe. Eine Praefix-Pruefung laesst sich austricksen: `//fremd.example` + * faengt mit einem Schraegstrich an und ist kein `//`, aber Browser entfernen + * Tabulator, Zeilenumbruch und Wagenruecklauf beim Verarbeiten einer URL – uebrig + * bleibt `//fremd.example`, also ein fremder Host. Dasselbe gilt fuer kodierte + * Varianten, Backslashes und `..`. Das Aufloesen macht genau das, was der Browser + * auch tut, und der Vergleich der Herkunft erschlaegt damit alle Formen auf + * einmal. + */ +export function sicheresZiel(ziel: string | null | undefined): string { + if (!ziel || !ziel.startsWith("/")) return "/"; + try { + const aufgeloest = new URL(ziel, WEGWERF_BASIS); + if (aufgeloest.origin !== WEGWERF_BASIS) return "/"; + + const fertig = aufgeloest.pathname + aufgeloest.search + aufgeloest.hash; + // Zweite Runde: aus `/..//fremd.example` macht das Aufloesen `//fremd.example`, + // und genau das waere als Location-Kopfzeile wieder ein fremder Host. Ein + // Ergebnis, das selbst nicht mehr eindeutig zur eigenen Anwendung gehoert, + // wird verworfen. + if (!fertig.startsWith("/") || fertig.startsWith("//")) return "/"; + return fertig; + } catch { + return "/"; + } +} diff --git a/src/server/auth/benutzer.ts b/src/server/auth/benutzer.ts new file mode 100644 index 0000000..a6ecde6 --- /dev/null +++ b/src/server/auth/benutzer.ts @@ -0,0 +1,330 @@ +import { randomUUID } from "node:crypto"; +import { hash, verify } from "@node-rs/argon2"; +import type { Benutzer } from "@/generated/prisma/client"; +import type { Rolle } from "@/generated/prisma/enums"; +import { prisma } from "@/lib/db"; +import { + kundenkuerzelAusGruppen, + rolleAusGruppen, + rollenZuordnungAktiv, + type OidcAnspruecke, +} from "@/server/auth/oidc"; + +/** + * Anlegen und Pflegen der App-Benutzer (#007). + * + * Nicht zu verwechseln mit Mitarbeiter: das sind die Personen der Firma aus dem + * Verzeichnis. Hier geht es um die Menschen, die Laufzettel bedienen. + */ + +export class AnmeldeFehler extends Error { + constructor(nachricht: string) { + super(nachricht); + this.name = "AnmeldeFehler"; + } +} + +/** + * Der lokale Login ist Entwicklungshilfe und Notfallzugang. Er ist aus, solange + * er nicht ausdruecklich eingeschaltet wird – faellt der Anbieter aus, laesst er + * sich einschalten, ohne dass er im Normalbetrieb offensteht. + */ +export function lokalerLoginAktiv(): boolean { + return process.env["AUTH_LOCAL_ENABLED"]?.trim().toLowerCase() === "true"; +} + +/** + * Prueft E-Mail und Passwort. + * + * Gibt bei falscher Adresse und falschem Passwort dieselbe Meldung – sonst + * verriete die Anwendung, welche Adressen es gibt. Der Hash wird auch bei + * unbekannter Adresse geprueft, damit die Antwortzeit nichts verraet. + */ +export async function lokalAnmelden(email: string, passwort: string): Promise { + if (!lokalerLoginAktiv()) { + throw new AnmeldeFehler("Die Anmeldung mit Passwort ist abgeschaltet."); + } + + const benutzer = await prisma.benutzer.findUnique({ + where: { email: email.trim().toLowerCase() }, + }); + + // Auch bei unbekannter Adresse wird geprueft, und zwar gegen einen echten + // argon2-Hash: sonst waere die Antwort messbar schneller und verriete, welche + // Adressen es gibt. + const hashZumPruefen = benutzer?.passwortHash ?? (await platzhalterHash()); + let stimmt = false; + try { + stimmt = await verify(hashZumPruefen, passwort); + } catch { + stimmt = false; + } + + if (!benutzer || !benutzer.passwortHash || !stimmt) { + throw new AnmeldeFehler("E-Mail-Adresse oder Passwort stimmt nicht."); + } + if (!benutzer.aktiv) { + throw new AnmeldeFehler("Dieses Konto ist deaktiviert."); + } + + await prisma.benutzer.update({ + where: { id: benutzer.id }, + data: { letzteAnmeldungAm: new Date() }, + }); + return benutzer; +} + +/** + * Echter argon2-Hash eines Zufallswerts, gegen den bei unbekannter Adresse + * geprueft wird. + * + * Er wird einmal beim ersten Bedarf erzeugt, nicht beim Import – Hashen ist + * absichtlich langsam und soll den Start nicht aufhalten. Ein von Hand + * hingeschriebener Hash taugt hier nicht: waere er ungueltig, wuerde verify() + * sofort werfen und die Pruefung waere wieder messbar schneller. + */ +let platzhalter: Promise | undefined; + +function platzhalterHash(): Promise { + platzhalter ??= hash(randomUUID()); + return platzhalter; +} + +export async function passwortHashen(passwort: string): Promise { + return hash(passwort); +} + +/** + * Uebernimmt einen per OIDC angemeldeten Benutzer in die eigene Tabelle. + * + * Unbekannte Benutzer werden beim ersten Login angelegt (JIT-Provisioning), und + * die Rolle wird bei **jeder** Anmeldung neu aus den Gruppen gesetzt. Eine + * Aenderung im Verzeichnis greift damit ab der naechsten Anmeldung, ohne dass + * jemand hier nachpflegen muss. + */ +export async function benutzerAusOidcUebernehmen(anspruecke: OidcAnspruecke): Promise { + // Zuerst ueber sub suchen: die Adresse eines Kontos kann sich aendern, die + // Kennung beim Anbieter nicht. + const nachSub = await prisma.benutzer.findUnique({ where: { oidcSub: anspruecke.sub } }); + + // Ueber die Adresse verknuepfen nur, wenn der Anbieter sie bestaetigt hat. + // Sonst waere ein Konto mit frei waehlbarer Adresse der Weg, den lokalen + // Notfall-Administrator zu uebernehmen. + const nachEmail = nachSub + ? null + : anspruecke.emailBestaetigt + ? await prisma.benutzer.findUnique({ where: { email: anspruecke.email } }) + : null; + + if (!nachSub && !nachEmail) { + const belegt = await prisma.benutzer.findUnique({ where: { email: anspruecke.email } }); + if (belegt) { + throw new AnmeldeFehler( + `Es gibt bereits ein Konto mit der Adresse ${anspruecke.email}, und der Anbieter hat sie ` + + "nicht bestaetigt. Ein Administrator muss die Konten von Hand zusammenfuehren.", + ); + } + } + + const vorhanden = nachSub ?? nachEmail; + + // Ein deaktiviertes Konto wird abgewiesen, bevor irgendetwas geschrieben wird. + if (vorhanden && !vorhanden.aktiv) { + throw new AnmeldeFehler("Dieses Konto ist deaktiviert."); + } + + // Ohne eingerichtete Gruppen-Zuordnung bleibt die Rolle, wie sie ist – sonst + // waere jede Anmeldung eine stille Herabstufung auf LESER. + const rolle = rollenZuordnungAktiv() ? rolleAusGruppen(anspruecke.gruppen) : (vorhanden?.rolle ?? "LESER"); + + const benutzer = vorhanden + ? await prisma.benutzer.update({ + where: { id: vorhanden.id }, + data: { + oidcSub: anspruecke.sub, + email: anspruecke.email, + name: anspruecke.name, + rolle, + letzteAnmeldungAm: new Date(), + }, + }) + : await prisma.benutzer.create({ + data: { + oidcSub: anspruecke.sub, + email: anspruecke.email, + name: anspruecke.name, + rolle, + aktiv: true, + letzteAnmeldungAm: new Date(), + }, + }); + + if (!vorhanden) { + await prisma.protokoll.create({ + data: { + entitaet: "Benutzer", + entitaetId: benutzer.id, + aktion: "beim ersten OIDC-Login angelegt", + benutzerId: benutzer.id, + nachher: { email: benutzer.email, rolle: benutzer.rolle }, + }, + }); + } else if (vorhanden.rolle !== rolle) { + await prisma.protokoll.create({ + data: { + entitaet: "Benutzer", + entitaetId: benutzer.id, + aktion: "Rolle aus den OIDC-Gruppen geaendert", + benutzerId: benutzer.id, + vorher: { rolle: vorhanden.rolle }, + nachher: { rolle }, + }, + }); + } + + await kundenbindungSchreiben(benutzer.id, anspruecke.gruppen); + return benutzer; +} + +/** + * Schreibt die Kundenbindung aus den Gruppen neu. + * + * Ohne OIDC_CUSTOMER_GROUP_PREFIX passiert nichts – dann gilt keine + * Einschraenkung, und eine leere Bindung duerfte nicht faelschlich als + * "sieht gar nichts" gelesen werden. + */ +async function kundenbindungSchreiben(benutzerId: string, gruppen: readonly string[]): Promise { + const kuerzel = kundenkuerzelAusGruppen(gruppen); + if (kuerzel.length === 0 && !process.env["OIDC_CUSTOMER_GROUP_PREFIX"]?.trim()) { + return; + } + + const kunden = await prisma.kunde.findMany({ + where: { kuerzel: { in: [...kuerzel] } }, + select: { id: true }, + }); + + await prisma.$transaction([ + prisma.benutzerKunde.deleteMany({ where: { benutzerId } }), + prisma.benutzerKunde.createMany({ + data: kunden.map((kunde) => ({ benutzerId, kundeId: kunde.id })), + skipDuplicates: true, + }), + ]); +} + +export type NeuerLokalerBenutzer = { + readonly email: string; + readonly name: string; + readonly rolle: Rolle; + readonly passwort: string; +}; + +/** + * Legt ein lokales Konto an. Nur sinnvoll, solange der lokale Login aktiv ist – + * sonst entsteht ein Konto, mit dem sich niemand anmelden kann. + */ +export async function lokalenBenutzerAnlegen( + eingabe: NeuerLokalerBenutzer, + durchBenutzerId: string, +): Promise { + const email = eingabe.email.trim().toLowerCase(); + const vorhanden = await prisma.benutzer.findUnique({ where: { email } }); + if (vorhanden) { + throw new AnmeldeFehler(`Es gibt bereits ein Konto mit der Adresse ${email}.`); + } + + const benutzer = await prisma.benutzer.create({ + data: { + email, + name: eingabe.name.trim(), + rolle: eingabe.rolle, + passwortHash: await passwortHashen(eingabe.passwort), + aktiv: true, + }, + }); + + await prisma.protokoll.create({ + data: { + entitaet: "Benutzer", + entitaetId: benutzer.id, + aktion: "lokales Konto angelegt", + benutzerId: durchBenutzerId, + nachher: { email: benutzer.email, rolle: benutzer.rolle }, + }, + }); + return benutzer; +} + +/** + * Es muss immer mindestens ein aktiver Administrator uebrig bleiben. + * + * Ohne diese Schranke koennte sich der letzte Administrator selbst zum Leser + * machen oder ein vorletzter den letzten deaktivieren – zurueck ginge es dann nur + * noch ueber die Datenbank. + */ +async function letzterAdminSchutz(benutzerId: string, bleibtAdmin: boolean): Promise { + if (bleibtAdmin) return; + const uebrige = await prisma.benutzer.count({ + where: { rolle: "ADMIN", aktiv: true, id: { not: benutzerId } }, + }); + if (uebrige === 0) { + throw new AnmeldeFehler( + "Das ist der letzte aktive Administrator. Erst einen weiteren einrichten, dann aendern.", + ); + } +} + +export async function rolleSetzen(benutzerId: string, rolle: Rolle, durchBenutzerId: string): Promise { + const vorher = await prisma.benutzer.findUniqueOrThrow({ where: { id: benutzerId } }); + if (vorher.rolle === rolle) return; + if (vorher.rolle === "ADMIN" && vorher.aktiv) { + await letzterAdminSchutz(benutzerId, rolle === "ADMIN"); + } + + await prisma.benutzer.update({ where: { id: benutzerId }, data: { rolle } }); + await prisma.protokoll.create({ + data: { + entitaet: "Benutzer", + entitaetId: benutzerId, + aktion: "Rolle geaendert", + benutzerId: durchBenutzerId, + vorher: { rolle: vorher.rolle }, + nachher: { rolle }, + }, + }); +} + +/** + * Schaltet ein Konto ab oder wieder frei. + * + * Beim Abschalten werden zugleich alle bestehenden Sitzungen ungueltig – sonst + * koennte sich der Betroffene mit einem gueltigen Cookie noch bis zu zwoelf + * Stunden weiterbewegen. + */ +export async function aktivSetzen( + benutzerId: string, + aktiv: boolean, + durchBenutzerId: string, +): Promise { + const vorher = await prisma.benutzer.findUniqueOrThrow({ where: { id: benutzerId } }); + if (vorher.aktiv === aktiv) return; + if (vorher.rolle === "ADMIN" && vorher.aktiv) { + await letzterAdminSchutz(benutzerId, aktiv); + } + + await prisma.benutzer.update({ + where: { id: benutzerId }, + data: { aktiv, sitzungenUngueltigAb: aktiv ? vorher.sitzungenUngueltigAb : new Date() }, + }); + await prisma.protokoll.create({ + data: { + entitaet: "Benutzer", + entitaetId: benutzerId, + aktion: aktiv ? "Konto freigeschaltet" : "Konto deaktiviert", + benutzerId: durchBenutzerId, + vorher: { aktiv: vorher.aktiv }, + nachher: { aktiv }, + }, + }); +} diff --git a/src/server/auth/oidc.ts b/src/server/auth/oidc.ts new file mode 100644 index 0000000..df864ea --- /dev/null +++ b/src/server/auth/oidc.ts @@ -0,0 +1,252 @@ +import * as oidc from "openid-client"; +import type { Rolle } from "@/generated/prisma/enums"; +import { kurzzeitTokenErzeugen, kurzzeitTokenLesen } from "@/lib/kurzzeit-token"; +import { staerksteRolle } from "@/server/auth/rollen"; + +/** + * Anmeldung ueber einen generischen OIDC-Anbieter (#007). Ziel ist authentik, + * aber es wird nichts Anbieter-Eigenes benutzt: alles kommt aus der Discovery. + * + * Kein Auth.js – v5 steht dauerhaft auf Beta und das Projekt ist im + * Wartungsmodus, siehe docs/architektur.md, Abschnitt 3. + */ + +/** Zweck des Kurzzeit-Tokens, das den Fluss ueber die Weiterleitung traegt. */ +const FLUSS_ZWECK = "oidc-fluss"; + +/** Der Fluss ist eine Weiterleitung und zurueck – zehn Minuten sind reichlich. */ +const FLUSS_GUELTIGKEIT_SEKUNDEN = 600; + +export const OIDC_FLUSS_COOKIE = "lz_oidc"; + +export class OidcFehler extends Error { + constructor(nachricht: string, optionen?: ErrorOptions) { + super(nachricht, optionen); + this.name = "OidcFehler"; + } +} + +function umgebung(name: string): string | undefined { + const wert = process.env[name]?.trim(); + return wert ? wert : undefined; +} + +/** OIDC ist abgeschaltet, solange nicht alle drei Angaben vorliegen. */ +export function oidcAktiv(): boolean { + return Boolean(umgebung("OIDC_ISSUER") && umgebung("OIDC_CLIENT_ID") && umgebung("OIDC_CLIENT_SECRET")); +} + +export function oidcName(): string { + return umgebung("OIDC_NAME") ?? "Single Sign-on"; +} + +/** + * Die Rueckruf-Adresse wird aus APP_URL abgeleitet und nicht aus der eingehenden + * Anfrage. Hinter einem Reverse Proxy ist der Host der Anfrage der interne – + * genau dort geht die Anmeldung sonst schief. + */ +export function rueckrufAdresse(): string { + const basis = umgebung("APP_URL"); + if (!basis) { + throw new OidcFehler("APP_URL ist nicht gesetzt. Sie steckt in der OIDC-Rueckruf-Adresse."); + } + return new URL("/api/auth/oidc/rueckruf", basis).toString(); +} + +/** + * Die Discovery wird einmal je Aussteller geholt und behalten. Sie kostet einen + * Netzaufruf, den nicht jede Anmeldung bezahlen soll. + */ +let entdeckt: + { aussteller: string; kundennummer: string; konfiguration: Promise } | undefined; + +function konfigurationHolen(): Promise { + const aussteller = umgebung("OIDC_ISSUER"); + const kundennummer = umgebung("OIDC_CLIENT_ID"); + const geheimnis = umgebung("OIDC_CLIENT_SECRET"); + if (!aussteller || !kundennummer || !geheimnis) { + throw new OidcFehler( + "OIDC ist nicht vollstaendig konfiguriert. Erwartet werden OIDC_ISSUER, " + + "OIDC_CLIENT_ID und OIDC_CLIENT_SECRET.", + ); + } + if (entdeckt?.aussteller !== aussteller || entdeckt.kundennummer !== kundennummer) { + entdeckt = { + aussteller, + kundennummer, + konfiguration: oidc.discovery(new URL(aussteller), kundennummer, geheimnis).catch((fehler) => { + // Beim naechsten Versuch erneut holen, statt den Fehler ewig zu behalten. + entdeckt = undefined; + throw new OidcFehler(`Discovery bei ${aussteller} fehlgeschlagen.`, { cause: fehler }); + }), + }; + } + return entdeckt.konfiguration; +} + +/** Nur fuer Tests: den gemerkten Discovery-Stand verwerfen. */ +export function konfigurationVergessen(): void { + entdeckt = undefined; +} + +export type FlussStart = { + /** Adresse, zu der der Browser weitergeleitet wird. */ + readonly adresse: string; + /** Inhalt des Fluss-Cookies, das den Rueckruf wiedererkennbar macht. */ + readonly flussToken: string; +}; + +/** + * Beginnt die Anmeldung. `ziel` ist die Seite, die der Benutzer eigentlich + * wollte – nach dem Rueckruf landet er dort und nicht stumpf auf der Uebersicht. + * Das ist die Voraussetzung dafuer, dass ein gescannter QR-Code auch dann + * funktioniert, wenn noch niemand angemeldet war. + */ +export async function anmeldungStarten(ziel: string): Promise { + const konfiguration = await konfigurationHolen(); + + const pruefwert = oidc.randomPKCECodeVerifier(); + const herausforderung = await oidc.calculatePKCECodeChallenge(pruefwert); + const zustand = oidc.randomState(); + const einmalwert = oidc.randomNonce(); + + const adresse = oidc.buildAuthorizationUrl(konfiguration, { + redirect_uri: rueckrufAdresse(), + scope: umgebung("OIDC_SCOPE") ?? "openid profile email groups", + code_challenge: herausforderung, + code_challenge_method: "S256", + state: zustand, + nonce: einmalwert, + }); + + const flussToken = await kurzzeitTokenErzeugen( + FLUSS_ZWECK, + { pruefwert, zustand, einmalwert, ziel }, + FLUSS_GUELTIGKEIT_SEKUNDEN, + ); + + return { adresse: adresse.toString(), flussToken }; +} + +export type OidcAnspruecke = { + readonly sub: string; + readonly email: string; + /** + * Hat der Anbieter die Adresse bestaetigt? Entscheidend beim Verknuepfen mit + * einem bestehenden Konto: laesst ein Anbieter selbst gewaehlte, unbestaetigte + * Adressen zu, waere das sonst die Uebernahme eines fremden Kontos. + */ + readonly emailBestaetigt: boolean; + readonly name: string; + readonly gruppen: readonly string[]; + /** Ziel, das vor der Anmeldung angefordert wurde. */ + readonly ziel: string; +}; + +function textAus(wert: unknown): string | undefined { + return typeof wert === "string" && wert.trim() ? wert.trim() : undefined; +} + +function gruppenAus(wert: unknown): readonly string[] { + if (!Array.isArray(wert)) return []; + return wert.filter((eintrag): eintrag is string => typeof eintrag === "string"); +} + +/** + * Schliesst die Anmeldung ab. Prueft `state` und `nonce` gegen das Fluss-Cookie – + * ohne das waere der Rueckruf faelschbar. + */ +export async function anmeldungAbschliessen( + aktuelleAdresse: URL, + flussToken: string | undefined, +): Promise { + const fluss = await kurzzeitTokenLesen(FLUSS_ZWECK, flussToken); + if (!fluss?.["pruefwert"] || !fluss["zustand"] || !fluss["einmalwert"]) { + throw new OidcFehler( + "Der Anmeldevorgang ist abgelaufen oder wurde nicht von hier begonnen. Bitte erneut anmelden.", + ); + } + + const konfiguration = await konfigurationHolen(); + let antwort; + try { + antwort = await oidc.authorizationCodeGrant(konfiguration, aktuelleAdresse, { + pkceCodeVerifier: fluss["pruefwert"], + expectedState: fluss["zustand"], + expectedNonce: fluss["einmalwert"], + }); + } catch (fehler) { + throw new OidcFehler("Der Anbieter hat die Anmeldung abgelehnt.", { cause: fehler }); + } + + const anspruecke = antwort.claims(); + if (!anspruecke) { + throw new OidcFehler("Der Anbieter hat kein ID-Token geliefert."); + } + + const sub = textAus(anspruecke.sub); + const email = textAus(anspruecke["email"]); + if (!sub) throw new OidcFehler("Das ID-Token enthaelt keine Kennung (sub)."); + if (!email) { + throw new OidcFehler( + "Das ID-Token enthaelt keine E-Mail-Adresse. Der Scope 'email' muss beim Anbieter freigegeben sein.", + ); + } + + return { + sub, + email: email.toLowerCase(), + emailBestaetigt: anspruecke["email_verified"] === true, + name: textAus(anspruecke["name"]) ?? textAus(anspruecke["preferred_username"]) ?? email, + gruppen: gruppenAus(anspruecke["groups"]), + ziel: fluss["ziel"] ?? "/", + }; +} + +/** + * Bildet die Gruppen des Anbieters auf eine Rolle ab. Wird bei **jeder** Anmeldung + * neu ausgewertet, damit eine Aenderung im Verzeichnis sofort greift. + * + * Ohne Treffer gibt es LESER – nie einen Fehler und nie ADMIN. Wer in mehreren + * Gruppen steht, bekommt die staerkste Rolle. + */ +/** + * Ist ueberhaupt eine Gruppen-Zuordnung eingerichtet? + * + * Ohne diese Unterscheidung waere jede OIDC-Anmeldung eine stille Herabstufung + * auf LESER: `rolleAusGruppen` findet nichts und liefert den Standard. Bei einem + * einzigen Administrator koennte danach niemand mehr etwas zuruecksetzen. + */ +export function rollenZuordnungAktiv(): boolean { + return ["OIDC_GROUP_ADMIN", "OIDC_GROUP_EDITOR", "OIDC_GROUP_TECHNICIAN", "OIDC_GROUP_VIEWER"].some( + (name) => umgebung(name) !== undefined, + ); +} + +export function rolleAusGruppen(gruppen: readonly string[]): Rolle { + const zuordnung: readonly (readonly [string | undefined, Rolle])[] = [ + [umgebung("OIDC_GROUP_ADMIN"), "ADMIN"], + [umgebung("OIDC_GROUP_EDITOR"), "REDAKTEUR"], + [umgebung("OIDC_GROUP_TECHNICIAN"), "TECHNIKER"], + [umgebung("OIDC_GROUP_VIEWER"), "LESER"], + ]; + const vorhanden = new Set(gruppen); + const getroffen = zuordnung + .filter(([gruppe]) => gruppe !== undefined && vorhanden.has(gruppe)) + .map(([, rolle]) => rolle); + return staerksteRolle(getroffen); +} + +/** + * Kunden, an die der Benutzer gebunden ist, aus Gruppen wie `lz-kunde-MUS`. + * Ohne OIDC_CUSTOMER_GROUP_PREFIX gibt es keine Einschraenkung – dann ist die + * Liste leer und der Aufrufer bindet niemanden. + */ +export function kundenkuerzelAusGruppen(gruppen: readonly string[]): readonly string[] { + const praefix = umgebung("OIDC_CUSTOMER_GROUP_PREFIX"); + if (!praefix) return []; + return gruppen + .filter((gruppe) => gruppe.startsWith(praefix)) + .map((gruppe) => gruppe.slice(praefix.length).toUpperCase()) + .filter((kuerzel) => /^[A-Z0-9]{2,6}$/.test(kuerzel)); +} diff --git a/src/server/auth/rollen.ts b/src/server/auth/rollen.ts new file mode 100644 index 0000000..aafcaef --- /dev/null +++ b/src/server/auth/rollen.ts @@ -0,0 +1,66 @@ +import { Rolle } from "@/generated/prisma/enums"; +import { ROLLEN_RANG, ROLLEN_TEXT } from "@/lib/rollen-text"; + +/** + * Wer darf was (#007). + * + * Die Rechte stehen bewusst als eine Tabelle an einer Stelle -- nicht als + * `if (rolle === "ADMIN")` verstreut ueber Seiten, Aktionen und Services. Drei Gruende: + * + * 1. Eine Rechteaenderung hat genau einen Ort. Kommt spaeter eine Rolle hinzu oder darf ein + * `REDAKTEUR` etwas mehr, wird eine Zeile hier geaendert und nicht ein Dutzend Abfragen + * gesucht, von denen eine uebersehen wird. + * 2. Die Tabelle ist pruefbar. `tests/rollen.test.ts` schreibt jede Rolle gegen jedes Recht aus; + * eine versehentlich erweiterte Liste faellt sofort auf, statt erst im Betrieb. + * 3. Wer eine neue Aktion baut, sucht sich hier das passende Recht und prueft es mit `darf()`. + * Ein Recht kann so nie doppelt und unterschiedlich ausgelegt werden. + * + * Geprueft wird ausschliesslich serverseitig. Die Rolle kommt dabei pro Anfrage aus der + * Datenbank, nicht aus dem Sitzungstoken -- ein Rechteentzug wirkt sonst erst nach Ablauf + * des Cookies. + */ +export const RECHTE = { + /** Vorlagen, Laeufe, Geraete und Verzeichnis ansehen. Jede Rolle darf das. */ + lesen: ["ADMIN", "REDAKTEUR", "TECHNIKER", "LESER"], + /** Laeufe starten, abarbeiten, abschliessen und archivieren. */ + laeufeBearbeiten: ["ADMIN", "REDAKTEUR", "TECHNIKER"], + /** Geraete und deren Stammdaten pflegen, Tags registrieren. */ + geraeteBearbeiten: ["ADMIN", "REDAKTEUR", "TECHNIKER"], + /** Vorlagen anlegen, bearbeiten und veroeffentlichen. */ + vorlagenBearbeiten: ["ADMIN", "REDAKTEUR"], + /** + * Einen archivierten Lauf zurueckholen. Nur `ADMIN`: das Archiv ist die Zusage, dass ein + * abgeschlossener Lauf sich nicht mehr aendert -- diese Zusage darf nur eine Stelle aufheben. + */ + archivVerwalten: ["ADMIN"], + /** App-Benutzer, Verzeichnis, Abteilungen, Einstellungen, Kunden. */ + verwaltung: ["ADMIN"], +} as const satisfies Record; + +export type Recht = keyof typeof RECHTE; + +export function darf(rolle: Rolle, recht: Recht): boolean { + return (RECHTE[recht] as readonly Rolle[]).includes(rolle); +} + +/** + * Die staerkste der uebergebenen Rollen. + * + * Der OIDC-Login braucht das: ist jemand in mehreren abgebildeten Gruppen, gewinnt die + * staerkere Rolle. Eine leere Liste ergibt `LESER` -- nie ein Fehler und nie `ADMIN`. Wer + * sich anmelden darf, aber keiner abgebildeten Gruppe angehoert, soll hineinsehen koennen + * und nichts aendern; ein Fehler an dieser Stelle wuerde stattdessen den Login blockieren. + */ +export function staerksteRolle(rollen: readonly Rolle[]): Rolle { + let staerkste: Rolle = Rolle.LESER; + for (const rolle of rollen) { + if (ROLLEN_RANG[rolle] > ROLLEN_RANG[staerkste]) { + staerkste = rolle; + } + } + return staerkste; +} + +// Beschriftung und Rang liegen in src/lib, damit Client-Komponenten sie ohne +// die Rechtetabelle bekommen. Hier weitergereicht fuer serverseitige Aufrufer. +export { ROLLEN_RANG, ROLLEN_TEXT }; diff --git a/src/server/auth/sitzungspflicht.ts b/src/server/auth/sitzungspflicht.ts new file mode 100644 index 0000000..cbccc75 --- /dev/null +++ b/src/server/auth/sitzungspflicht.ts @@ -0,0 +1,114 @@ +import { cache } from "react"; +import { cookies } from "next/headers"; +import { redirect } from "next/navigation"; +import type { Benutzer } from "@/generated/prisma/client"; +import { prisma } from "@/lib/db"; +import { SITZUNG_COOKIE, sitzungLesen, type Sitzung } from "@/lib/sitzung"; +import { darf, type Recht } from "@/server/auth/rollen"; + +/** + * Wer ist angemeldet und was darf er (#007). + * + * Rolle und Aktiv-Status kommen bei **jeder** Anfrage aus der Datenbank, nicht + * aus dem Cookie. Das kostet eine Abfrage und ist es wert: eine entzogene Rolle + * greift sofort, und ein deaktiviertes Konto kommt nicht mit einem gueltigen + * Cookie noch zwoelf Stunden weiter. + */ + +export class RechteFehler extends Error { + constructor(nachricht: string) { + super(nachricht); + this.name = "RechteFehler"; + } +} + +export type Urteil = + | { readonly gueltig: true } + | { readonly gueltig: false; readonly grund: "unbekannt" | "deaktiviert" | "widerrufen" }; + +/** + * Reine Entscheidung, ob eine Sitzung noch traegt – ohne Datenbank und ohne Next, + * damit sie sich einzeln testen laesst. + */ +export function sitzungBewerten( + sitzung: Sitzung, + benutzer: Pick | null, +): Urteil { + if (!benutzer || benutzer.id !== sitzung.benutzerId) { + return { gueltig: false, grund: "unbekannt" }; + } + if (!benutzer.aktiv) { + return { gueltig: false, grund: "deaktiviert" }; + } + if (benutzer.sitzungenUngueltigAb) { + // Der Anspruch iat steht in Sekunden, der Zeitstempel in Millisekunden. + const ausgestellt = sitzung.ausgestelltAm * 1000; + if (ausgestellt < benutzer.sitzungenUngueltigAb.getTime()) { + return { gueltig: false, grund: "widerrufen" }; + } + } + return { gueltig: true }; +} + +export type Angemeldet = { + readonly benutzer: Benutzer; + readonly sitzung: Sitzung; +}; + +/** + * Der angemeldete Benutzer oder `undefined`. Leitet nicht weiter – dafuer gibt es + * `sitzungErforderlich`. + * + * `cache` sorgt dafuer, dass mehrere Komponenten derselben Anfrage sich eine + * Abfrage teilen. + */ +export const angemeldet = cache(async (): Promise => { + const laden = await cookies(); + const sitzung = await sitzungLesen(laden.get(SITZUNG_COOKIE)?.value); + if (!sitzung) return undefined; + + const benutzer = await prisma.benutzer.findUnique({ where: { id: sitzung.benutzerId } }); + const urteil = sitzungBewerten(sitzung, benutzer); + if (!urteil.gueltig || !benutzer) return undefined; + + return { benutzer, sitzung }; +}); + +/** + * Verlangt eine Anmeldung und – wenn angegeben – ein bestimmtes Recht. + * + * Ohne Anmeldung geht es zur Anmeldeseite, mit `ziel` auf die urspruenglich + * angeforderte Adresse. Genau daran haengt, dass ein gescannter QR-Code auch + * dann funktioniert, wenn noch niemand angemeldet war. + */ +export async function sitzungErforderlich(recht?: Recht, ziel?: string): Promise { + const vorhanden = await angemeldet(); + if (!vorhanden) { + redirect(ziel ? `/anmelden?ziel=${encodeURIComponent(ziel)}` : "/anmelden"); + } + if (recht && !darf(vorhanden.benutzer.rolle, recht)) { + // Bei einer Seite ist ein geworfener Fehler eine 500er-Seite – fuer jemanden, + // der einfach ein altes Lesezeichen geoeffnet hat, die falsche Auskunft. + // Deshalb hier eine Weiterleitung mit Erklaerung; in Server Actions bleibt + // das Werfen richtig, siehe rechtErforderlich. + redirect("/anmelden?fehler=keinrecht"); + } + return vorhanden; +} + +/** + * Dasselbe fuer Server Actions und Route Handler: wirft statt weiterzuleiten, + * weil eine Weiterleitung mitten in einer Aktion nichts hilft. + */ +export async function rechtErforderlich(recht: Recht): Promise { + const vorhanden = await angemeldet(); + if (!vorhanden) { + throw new RechteFehler("Nicht angemeldet."); + } + if (!darf(vorhanden.benutzer.rolle, recht)) { + throw new RechteFehler( + `Diese Aktion verlangt das Recht "${recht}", die Rolle ${vorhanden.benutzer.rolle} hat es nicht.`, + ); + } + return vorhanden; +} diff --git a/src/server/queries/benutzer.ts b/src/server/queries/benutzer.ts new file mode 100644 index 0000000..2b42af9 --- /dev/null +++ b/src/server/queries/benutzer.ts @@ -0,0 +1,45 @@ +import type { Rolle } from "@/generated/prisma/enums"; +import { prisma } from "@/lib/db"; + +/** Lesemodelle der Benutzerverwaltung (#007). */ + +export type BenutzerZeile = { + readonly id: string; + readonly email: string; + readonly name: string; + readonly rolle: Rolle; + readonly aktiv: boolean; + /** true, wenn das Konto ein Passwort hat, sich also lokal anmelden kann. */ + readonly mitPasswort: boolean; + readonly ueberOidc: boolean; + readonly letzteAnmeldungAm: Date | null; +}; + +export async function benutzerListe(): Promise { + const zeilen = await prisma.benutzer.findMany({ + orderBy: [{ aktiv: "desc" }, { name: "asc" }], + select: { + id: true, + email: true, + name: true, + rolle: true, + aktiv: true, + // Der Hash selbst verlaesst die Service-Schicht nie – nur die Auskunft, + // ob ueberhaupt einer da ist. + passwortHash: true, + oidcSub: true, + letzteAnmeldungAm: true, + }, + }); + + return zeilen.map((zeile) => ({ + id: zeile.id, + email: zeile.email, + name: zeile.name, + rolle: zeile.rolle, + aktiv: zeile.aktiv, + mitPasswort: zeile.passwortHash !== null, + ueberOidc: zeile.oidcSub !== null, + letzteAnmeldungAm: zeile.letzteAnmeldungAm, + })); +} diff --git a/tests/anmeldung.test.ts b/tests/anmeldung.test.ts new file mode 100644 index 0000000..407c18e --- /dev/null +++ b/tests/anmeldung.test.ts @@ -0,0 +1,222 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { oeffentlicheAdresse } from "@/lib/adressen"; +import { sicheresZiel } from "@/server/auth/anmeldung"; +import { sitzungBewerten } from "@/server/auth/sitzungspflicht"; +import type { Sitzung } from "@/lib/sitzung"; +import { + kundenkuerzelAusGruppen, + oidcAktiv, + oidcName, + rolleAusGruppen, + rueckrufAdresse, +} from "@/server/auth/oidc"; + +/** + * Die Entscheidungen rund um die Anmeldung, die ohne Datenbank und ohne Next + * pruefbar sind (#007). + */ + +const UMGEBUNG = { ...process.env }; + +afterEach(() => { + process.env = { ...UMGEBUNG }; +}); + +describe("Ruecksprungziel", () => { + it("nimmt einen Pfad innerhalb der Anwendung an", () => { + expect(sicheresZiel("/t/LZ-7K3F9Q")).toBe("/t/LZ-7K3F9Q"); + expect(sicheresZiel("/admin/benutzer?seite=2")).toBe("/admin/benutzer?seite=2"); + }); + + it("weist eine Weiterleitung nach draussen ab", () => { + // Ohne diese Pruefung waere ein Anmeldelink verschickbar, der nach + // erfolgreicher Anmeldung auf einer fremden Seite landet. + for (const boesartig of [ + "https://fremd.example/phishing", + "//fremd.example", + "/\\fremd.example", + "http://fremd.example", + "javascript:alert(1)", + ]) { + expect(sicheresZiel(boesartig)).toBe("/"); + } + }); + + it("faellt ohne Angabe auf die Startseite zurueck", () => { + expect(sicheresZiel(undefined)).toBe("/"); + expect(sicheresZiel(null)).toBe("/"); + expect(sicheresZiel("")).toBe("/"); + }); +}); + +describe("Rollen aus OIDC-Gruppen", () => { + beforeEach(() => { + process.env["OIDC_GROUP_ADMIN"] = "lz-admin"; + process.env["OIDC_GROUP_EDITOR"] = "lz-redakteur"; + process.env["OIDC_GROUP_TECHNICIAN"] = "lz-techniker"; + process.env["OIDC_GROUP_VIEWER"] = "lz-leser"; + }); + + it("bildet jede Gruppe auf ihre Rolle ab", () => { + expect(rolleAusGruppen(["lz-admin"])).toBe("ADMIN"); + expect(rolleAusGruppen(["lz-redakteur"])).toBe("REDAKTEUR"); + expect(rolleAusGruppen(["lz-techniker"])).toBe("TECHNIKER"); + expect(rolleAusGruppen(["lz-leser"])).toBe("LESER"); + }); + + it("gibt bei mehreren Gruppen die staerkste Rolle", () => { + expect(rolleAusGruppen(["lz-leser", "lz-admin", "lz-techniker"])).toBe("ADMIN"); + expect(rolleAusGruppen(["lz-techniker", "lz-redakteur"])).toBe("REDAKTEUR"); + }); + + it("gibt ohne Treffer LESER, nie ADMIN und nie einen Fehler", () => { + expect(rolleAusGruppen([])).toBe("LESER"); + expect(rolleAusGruppen(["irgendwas", "ganz-anderes"])).toBe("LESER"); + }); + + it("achtet auf Gross- und Kleinschreibung der Gruppennamen", () => { + // Verzeichnisse unterscheiden hier, also darf die Zuordnung es auch. + expect(rolleAusGruppen(["LZ-ADMIN"])).toBe("LESER"); + }); + + it("ordnet nichts zu, wenn die Variablen fehlen", () => { + process.env = { ...UMGEBUNG }; + delete process.env["OIDC_GROUP_ADMIN"]; + expect(rolleAusGruppen(["lz-admin"])).toBe("LESER"); + }); +}); + +describe("Kundenbindung aus OIDC-Gruppen", () => { + it("liefert ohne Praefix nichts, damit keine Einschraenkung entsteht", () => { + delete process.env["OIDC_CUSTOMER_GROUP_PREFIX"]; + expect(kundenkuerzelAusGruppen(["lz-kunde-MUS"])).toEqual([]); + }); + + it("liest die Kuerzel hinter dem Praefix", () => { + process.env["OIDC_CUSTOMER_GROUP_PREFIX"] = "lz-kunde-"; + expect(kundenkuerzelAusGruppen(["lz-kunde-MUS", "lz-kunde-rei", "lz-admin"])).toEqual(["MUS", "REI"]); + }); + + it("verwirft Kuerzel, die nicht zur Form passen", () => { + process.env["OIDC_CUSTOMER_GROUP_PREFIX"] = "lz-kunde-"; + // Dieselbe Form wie die Bedingung Kunde_kuerzel_form in der Datenbank. + expect(kundenkuerzelAusGruppen(["lz-kunde-X", "lz-kunde-ZULANG7", "lz-kunde-MU_S"])).toEqual([]); + }); +}); + +describe("OIDC-Konfiguration", () => { + it("gilt erst als eingerichtet, wenn alle drei Angaben da sind", () => { + process.env["OIDC_ISSUER"] = "https://authentik.example/application/o/laufzettel/"; + process.env["OIDC_CLIENT_ID"] = "kennung"; + delete process.env["OIDC_CLIENT_SECRET"]; + expect(oidcAktiv()).toBe(false); + + process.env["OIDC_CLIENT_SECRET"] = "geheim"; + expect(oidcAktiv()).toBe(true); + }); + + it("leitet die Rueckruf-Adresse aus APP_URL ab, nicht aus der Anfrage", () => { + // Hinter einem Reverse Proxy traegt die Anfrage den internen Host; die beim + // Anbieter hinterlegte Adresse ist aber die oeffentliche. + process.env["APP_URL"] = "https://laufzettel.example.de"; + expect(rueckrufAdresse()).toBe("https://laufzettel.example.de/api/auth/oidc/rueckruf"); + }); + + it("wirft mit klarer Meldung, wenn APP_URL fehlt", () => { + delete process.env["APP_URL"]; + expect(() => rueckrufAdresse()).toThrow(/APP_URL/); + }); + + it("nennt den Anbieter beim Namen, sonst neutral", () => { + process.env["OIDC_NAME"] = "authentik"; + expect(oidcName()).toBe("authentik"); + delete process.env["OIDC_NAME"]; + expect(oidcName()).toBe("Single Sign-on"); + }); +}); + +describe("Gueltigkeit einer Sitzung", () => { + const jetzt = Math.floor(Date.now() / 1000); + const sitzung: Sitzung = { + benutzerId: "benutzer-1", + email: "techniker@firma.example", + name: "Techniker", + herkunft: "passwort", + ausgestelltAm: jetzt, + }; + + it("traegt bei aktivem Benutzer", () => { + expect(sitzungBewerten(sitzung, { id: "benutzer-1", aktiv: true, sitzungenUngueltigAb: null })).toEqual({ + gueltig: true, + }); + }); + + it("faellt, wenn es den Benutzer nicht mehr gibt", () => { + expect(sitzungBewerten(sitzung, null)).toEqual({ gueltig: false, grund: "unbekannt" }); + }); + + it("faellt, wenn das Cookie auf einen anderen Benutzer zeigt", () => { + expect(sitzungBewerten(sitzung, { id: "benutzer-2", aktiv: true, sitzungenUngueltigAb: null })).toEqual({ + gueltig: false, + grund: "unbekannt", + }); + }); + + it("faellt sofort bei einem deaktivierten Konto", () => { + // Genau dafuer wird pro Anfrage aus der Datenbank gelesen: sonst liefe das + // Cookie noch bis zu zwoelf Stunden weiter. + expect(sitzungBewerten(sitzung, { id: "benutzer-1", aktiv: false, sitzungenUngueltigAb: null })).toEqual({ + gueltig: false, + grund: "deaktiviert", + }); + }); + + it("faellt, wenn die Sitzung vor dem Widerruf ausgestellt wurde", () => { + expect( + sitzungBewerten(sitzung, { + id: "benutzer-1", + aktiv: true, + sitzungenUngueltigAb: new Date((jetzt + 60) * 1000), + }), + ).toEqual({ gueltig: false, grund: "widerrufen" }); + }); + + it("traegt, wenn die Sitzung nach dem Widerruf ausgestellt wurde", () => { + expect( + sitzungBewerten(sitzung, { + id: "benutzer-1", + aktiv: true, + sitzungenUngueltigAb: new Date((jetzt - 60) * 1000), + }), + ).toEqual({ gueltig: true }); + }); +}); + +describe("Oeffentliche Adressen", () => { + it("baut Umleitungen aus APP_URL, nicht aus der Anfrage", () => { + // Hinter einem Reverse Proxy traegt die Anfrage den internen Host. Eine + // daraus gebaute Umleitung schickt den Benutzer an eine Adresse, die er gar + // nicht erreicht. + process.env["APP_URL"] = "https://laufzettel.example.de"; + expect(oeffentlicheAdresse("/anmelden", "http://10.0.0.7:3000").toString()).toBe( + "https://laufzettel.example.de/anmelden", + ); + }); + + it("behaelt Abfrageparameter", () => { + process.env["APP_URL"] = "https://laufzettel.example.de"; + expect(oeffentlicheAdresse("/anmelden?fehler=oidc-aus", "http://intern").search).toBe("?fehler=oidc-aus"); + }); + + it("faellt ohne APP_URL auf die Herkunft der Anfrage zurueck", () => { + delete process.env["APP_URL"]; + expect(oeffentlicheAdresse("/anmelden", "http://127.0.0.1:3100").toString()).toBe( + "http://127.0.0.1:3100/anmelden", + ); + }); + + it("faellt auch bei unbrauchbarer APP_URL zurueck, statt stehen zu bleiben", () => { + process.env["APP_URL"] = "keine-adresse"; + expect(oeffentlicheAdresse("/anmelden", "http://127.0.0.1:3100").host).toBe("127.0.0.1:3100"); + }); +}); diff --git a/tests/benutzer.test.ts b/tests/benutzer.test.ts new file mode 100644 index 0000000..aae1a5c --- /dev/null +++ b/tests/benutzer.test.ts @@ -0,0 +1,429 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { + AnmeldeFehler, + aktivSetzen, + benutzerAusOidcUebernehmen, + lokalAnmelden, + lokalenBenutzerAnlegen, + lokalerLoginAktiv, + passwortHashen, + rolleSetzen, +} from "@/server/auth/benutzer"; +import type { OidcAnspruecke } from "@/server/auth/oidc"; +import { datenbankLeeren, datenbankVerfuegbar, testPrisma } from "./helpers/db"; + +/** + * Anmeldung und Benutzerpflege gegen die echte Datenbank (#007). + * + * Hier haengen mehrere Akzeptanzkriterien dran: JIT-Provisioning, dass die Rolle + * bei jeder Anmeldung neu gesetzt wird, dass ein deaktiviertes Konto abgewiesen + * wird und dass Passwoerter nur als Hash in der Datenbank stehen. + */ + +const UMGEBUNG = { ...process.env }; + +function anspruecke(ueberschreiben: Partial = {}): OidcAnspruecke { + return { + sub: "anbieter-sub-1", + email: "maria.huber@firma.example", + emailBestaetigt: true, + name: "Maria Huber", + gruppen: [], + ziel: "/", + ...ueberschreiben, + }; +} + +describe.runIf(datenbankVerfuegbar)("Anmeldung und Benutzerpflege", () => { + beforeEach(async () => { + await datenbankLeeren(); + process.env["AUTH_LOCAL_ENABLED"] = "true"; + process.env["OIDC_GROUP_ADMIN"] = "lz-admin"; + process.env["OIDC_GROUP_EDITOR"] = "lz-redakteur"; + process.env["OIDC_GROUP_TECHNICIAN"] = "lz-techniker"; + process.env["OIDC_GROUP_VIEWER"] = "lz-leser"; + delete process.env["OIDC_CUSTOMER_GROUP_PREFIX"]; + }); + + afterEach(() => { + process.env = { ...UMGEBUNG }; + }); + + describe("JIT-Provisioning", () => { + it("legt einen unbekannten Benutzer beim ersten Login an", async () => { + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-techniker"] })); + + expect(benutzer.email).toBe("maria.huber@firma.example"); + expect(benutzer.name).toBe("Maria Huber"); + expect(benutzer.rolle).toBe("TECHNIKER"); + expect(benutzer.aktiv).toBe(true); + expect(benutzer.passwortHash).toBeNull(); + expect(await testPrisma.benutzer.count()).toBe(1); + }); + + it("haelt den Vorgang im Protokoll fest", async () => { + const benutzer = await benutzerAusOidcUebernehmen(anspruecke()); + const eintraege = await testPrisma.protokoll.findMany({ + where: { entitaet: "Benutzer", entitaetId: benutzer.id }, + }); + expect(eintraege).toHaveLength(1); + expect(eintraege[0]?.aktion).toContain("angelegt"); + }); + + it("legt beim zweiten Login kein zweites Konto an", async () => { + await benutzerAusOidcUebernehmen(anspruecke()); + await benutzerAusOidcUebernehmen(anspruecke()); + expect(await testPrisma.benutzer.count()).toBe(1); + }); + + it("erkennt den Benutzer an der Kennung wieder, auch wenn die Adresse wechselt", async () => { + // Die Adresse eines Kontos kann sich aendern, die Kennung beim Anbieter nicht. + const erst = await benutzerAusOidcUebernehmen(anspruecke()); + const dann = await benutzerAusOidcUebernehmen( + anspruecke({ email: "m.huber@firma.example", name: "Maria Huber-Schmitt" }), + ); + expect(dann.id).toBe(erst.id); + expect(dann.email).toBe("m.huber@firma.example"); + expect(dann.name).toBe("Maria Huber-Schmitt"); + expect(await testPrisma.benutzer.count()).toBe(1); + }); + + it("verknuepft nicht ueber eine unbestaetigte Adresse", async () => { + // Sonst waere ein Anbieter mit frei waehlbarer Adresse der Weg, den + // lokalen Notfall-Administrator zu uebernehmen. + await testPrisma.benutzer.create({ + data: { + email: "maria.huber@firma.example", + name: "Maria Huber", + rolle: "ADMIN", + passwortHash: await passwortHashen("ein-langes-passwort"), + }, + }); + await expect(benutzerAusOidcUebernehmen(anspruecke({ emailBestaetigt: false }))).rejects.toBeInstanceOf( + AnmeldeFehler, + ); + // Das bestehende Konto bleibt unangetastet. + const unveraendert = await testPrisma.benutzer.findUniqueOrThrow({ + where: { email: "maria.huber@firma.example" }, + }); + expect(unveraendert.oidcSub).toBeNull(); + expect(unveraendert.rolle).toBe("ADMIN"); + }); + + it("uebernimmt ein bestehendes lokales Konto mit derselben Adresse", async () => { + const lokal = await testPrisma.benutzer.create({ + data: { + email: "maria.huber@firma.example", + name: "Maria Huber", + rolle: "LESER", + passwortHash: await passwortHashen("ein-langes-passwort"), + }, + }); + const nachOidc = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-admin"] })); + + expect(nachOidc.id).toBe(lokal.id); + expect(nachOidc.oidcSub).toBe("anbieter-sub-1"); + // Der Notfallzugang bleibt erhalten. + expect(nachOidc.passwortHash).not.toBeNull(); + }); + }); + + describe("Rolle aus den Gruppen", () => { + it("setzt die Rolle bei jeder Anmeldung neu", async () => { + const erst = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-techniker"] })); + expect(erst.rolle).toBe("TECHNIKER"); + + const befoerdert = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-admin"] })); + expect(befoerdert.rolle).toBe("ADMIN"); + + // Und wieder zurueck: eine entzogene Gruppe entzieht die Rolle. + const entzogen = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: [] })); + expect(entzogen.rolle).toBe("LESER"); + }); + + it("protokolliert jede Rollenaenderung aus den Gruppen", async () => { + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-techniker"] })); + await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-admin"] })); + + const aenderungen = await testPrisma.protokoll.findMany({ + where: { entitaetId: benutzer.id, aktion: { contains: "Rolle" } }, + }); + expect(aenderungen).toHaveLength(1); + expect(aenderungen[0]?.vorher).toEqual({ rolle: "TECHNIKER" }); + expect(aenderungen[0]?.nachher).toEqual({ rolle: "ADMIN" }); + }); + + it("weist ein deaktiviertes Konto ab, auch bei gueltiger Anmeldung beim Anbieter", async () => { + const benutzer = await benutzerAusOidcUebernehmen(anspruecke()); + await testPrisma.benutzer.update({ where: { id: benutzer.id }, data: { aktiv: false } }); + + await expect(benutzerAusOidcUebernehmen(anspruecke())).rejects.toBeInstanceOf(AnmeldeFehler); + }); + + it("schreibt nichts, bevor ein deaktiviertes Konto abgewiesen wird", async () => { + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-admin"] })); + await testPrisma.benutzer.update({ + where: { id: benutzer.id }, + data: { aktiv: false, letzteAnmeldungAm: null }, + }); + + await expect(benutzerAusOidcUebernehmen(anspruecke())).rejects.toBeInstanceOf(AnmeldeFehler); + + const danach = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: benutzer.id } }); + expect(danach.letzteAnmeldungAm).toBeNull(); + expect(danach.rolle).toBe("ADMIN"); + }); + + it("laesst die Rolle unangetastet, wenn keine Gruppen-Zuordnung eingerichtet ist", async () => { + // Sonst waere jede OIDC-Anmeldung eine stille Herabstufung auf LESER – bei + // einem einzigen Administrator koennte danach niemand mehr etwas richten. + const admin = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-admin"] })); + expect(admin.rolle).toBe("ADMIN"); + + for (const name of [ + "OIDC_GROUP_ADMIN", + "OIDC_GROUP_EDITOR", + "OIDC_GROUP_TECHNICIAN", + "OIDC_GROUP_VIEWER", + ]) { + delete process.env[name]; + } + + const nochmal = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: [] })); + expect(nochmal.rolle).toBe("ADMIN"); + }); + }); + + describe("Kundenbindung", () => { + it("bindet den Benutzer an die Kunden aus seinen Gruppen", async () => { + process.env["OIDC_CUSTOMER_GROUP_PREFIX"] = "lz-kunde-"; + const mus = await testPrisma.kunde.create({ data: { name: "Musterfirma", kuerzel: "MUS" } }); + await testPrisma.kunde.create({ data: { name: "Baeckerei Reiter", kuerzel: "REI" } }); + + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-kunde-MUS"] })); + const bindungen = await testPrisma.benutzerKunde.findMany({ + where: { benutzerId: benutzer.id }, + }); + expect(bindungen).toHaveLength(1); + expect(bindungen[0]?.kundeId).toBe(mus.id); + }); + + it("schreibt die Bindung bei jeder Anmeldung neu", async () => { + process.env["OIDC_CUSTOMER_GROUP_PREFIX"] = "lz-kunde-"; + await testPrisma.kunde.create({ data: { name: "Musterfirma", kuerzel: "MUS" } }); + const rei = await testPrisma.kunde.create({ + data: { name: "Baeckerei Reiter", kuerzel: "REI" }, + }); + + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-kunde-MUS"] })); + await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-kunde-REI"] })); + + const bindungen = await testPrisma.benutzerKunde.findMany({ + where: { benutzerId: benutzer.id }, + }); + expect(bindungen).toHaveLength(1); + expect(bindungen[0]?.kundeId).toBe(rei.id); + }); + + it("bindet ohne Praefix niemanden ein", async () => { + await testPrisma.kunde.create({ data: { name: "Musterfirma", kuerzel: "MUS" } }); + const benutzer = await benutzerAusOidcUebernehmen(anspruecke({ gruppen: ["lz-kunde-MUS"] })); + expect(await testPrisma.benutzerKunde.count({ where: { benutzerId: benutzer.id } })).toBe(0); + }); + }); + + describe("Lokale Anmeldung", () => { + const PASSWORT = "ein-hinreichend-langes-passwort"; + + async function kontoAnlegen(email = "admin@firma.example") { + return testPrisma.benutzer.create({ + data: { + email, + name: "Administrator", + rolle: "ADMIN", + passwortHash: await passwortHashen(PASSWORT), + }, + }); + } + + it("laesst ein richtiges Passwort durch", async () => { + const konto = await kontoAnlegen(); + const angemeldet = await lokalAnmelden("admin@firma.example", PASSWORT); + expect(angemeldet.id).toBe(konto.id); + }); + + it("merkt sich den Zeitpunkt der Anmeldung", async () => { + await kontoAnlegen(); + const angemeldet = await lokalAnmelden("admin@firma.example", PASSWORT); + expect(angemeldet.letzteAnmeldungAm).toBeNull(); + + const frisch = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: angemeldet.id } }); + expect(frisch.letzteAnmeldungAm).not.toBeNull(); + }); + + it("nimmt die Adresse unabhaengig von Gross- und Kleinschreibung", async () => { + await kontoAnlegen(); + await expect(lokalAnmelden(" Admin@Firma.Example ", PASSWORT)).resolves.toBeTruthy(); + }); + + it("weist ein falsches Passwort ab", async () => { + await kontoAnlegen(); + await expect(lokalAnmelden("admin@firma.example", "falsch")).rejects.toBeInstanceOf(AnmeldeFehler); + }); + + it("verraet nicht, ob es die Adresse gibt", async () => { + await kontoAnlegen(); + const beiFalschemPasswort = await lokalAnmelden("admin@firma.example", "falsch").catch( + (f: Error) => f.message, + ); + const beiUnbekannterAdresse = await lokalAnmelden("gibtsnicht@firma.example", "egal").catch( + (f: Error) => f.message, + ); + expect(beiFalschemPasswort).toBe(beiUnbekannterAdresse); + }); + + it("weist ein Konto ohne Passwort ab, auch mit leerem Passwort", async () => { + await testPrisma.benutzer.create({ + data: { email: "nur-oidc@firma.example", name: "Nur OIDC", oidcSub: "sub-x" }, + }); + await expect(lokalAnmelden("nur-oidc@firma.example", "")).rejects.toBeInstanceOf(AnmeldeFehler); + }); + + it("weist ein deaktiviertes Konto ab", async () => { + const konto = await kontoAnlegen(); + await testPrisma.benutzer.update({ where: { id: konto.id }, data: { aktiv: false } }); + await expect(lokalAnmelden("admin@firma.example", PASSWORT)).rejects.toThrow(/deaktiviert/); + }); + + it("ist abgeschaltet, solange AUTH_LOCAL_ENABLED nicht true ist", async () => { + await kontoAnlegen(); + for (const wert of ["false", "", "1", "ja"]) { + process.env["AUTH_LOCAL_ENABLED"] = wert; + expect(lokalerLoginAktiv()).toBe(false); + await expect(lokalAnmelden("admin@firma.example", PASSWORT)).rejects.toThrow(/abgeschaltet/); + } + }); + + it("speichert das Passwort nur als argon2-Hash", async () => { + const konto = await kontoAnlegen(); + expect(konto.passwortHash).toMatch(/^\$argon2/); + expect(konto.passwortHash).not.toContain(PASSWORT); + }); + }); + + describe("Verwaltung", () => { + async function adminAnlegen() { + return testPrisma.benutzer.create({ + data: { email: "admin@firma.example", name: "Administrator", rolle: "ADMIN" }, + }); + } + + it("legt ein lokales Konto an und protokolliert es", async () => { + const admin = await adminAnlegen(); + const neu = await lokalenBenutzerAnlegen( + { + email: " Neu@Firma.Example ", + name: " Neue Kollegin ", + rolle: "TECHNIKER", + passwort: "ein-langes-passwort", + }, + admin.id, + ); + + expect(neu.email).toBe("neu@firma.example"); + expect(neu.name).toBe("Neue Kollegin"); + expect(neu.passwortHash).toMatch(/^\$argon2/); + + const protokoll = await testPrisma.protokoll.findFirst({ + where: { entitaetId: neu.id, aktion: "lokales Konto angelegt" }, + }); + expect(protokoll?.benutzerId).toBe(admin.id); + }); + + it("weist eine doppelte Adresse ab", async () => { + const admin = await adminAnlegen(); + const eingabe = { + email: "doppelt@firma.example", + name: "Doppelt", + rolle: "LESER" as const, + passwort: "ein-langes-passwort", + }; + await lokalenBenutzerAnlegen(eingabe, admin.id); + await expect(lokalenBenutzerAnlegen(eingabe, admin.id)).rejects.toBeInstanceOf(AnmeldeFehler); + }); + + it("protokolliert eine Rollenaenderung mit Vorher und Nachher", async () => { + const admin = await adminAnlegen(); + const ziel = await testPrisma.benutzer.create({ + data: { email: "ziel@firma.example", name: "Ziel", rolle: "LESER" }, + }); + + await rolleSetzen(ziel.id, "REDAKTEUR", admin.id); + + const frisch = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: ziel.id } }); + expect(frisch.rolle).toBe("REDAKTEUR"); + const protokoll = await testPrisma.protokoll.findFirst({ + where: { entitaetId: ziel.id, aktion: "Rolle geaendert" }, + }); + expect(protokoll?.vorher).toEqual({ rolle: "LESER" }); + expect(protokoll?.nachher).toEqual({ rolle: "REDAKTEUR" }); + }); + + it("macht beim Deaktivieren zugleich alle laufenden Sitzungen ungueltig", async () => { + // Sonst koennte sich der Betroffene mit einem gueltigen Cookie noch bis zu + // zwoelf Stunden weiterbewegen. + const admin = await adminAnlegen(); + const ziel = await testPrisma.benutzer.create({ + data: { email: "ziel@firma.example", name: "Ziel", rolle: "TECHNIKER" }, + }); + + await aktivSetzen(ziel.id, false, admin.id); + + const frisch = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: ziel.id } }); + expect(frisch.aktiv).toBe(false); + expect(frisch.sitzungenUngueltigAb).not.toBeNull(); + }); + + it("laesst den letzten aktiven Administrator nicht herabstufen", async () => { + const admin = await adminAnlegen(); + await expect(rolleSetzen(admin.id, "LESER", admin.id)).rejects.toThrow(/letzte aktive Administrator/); + const unveraendert = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: admin.id } }); + expect(unveraendert.rolle).toBe("ADMIN"); + }); + + it("laesst den letzten aktiven Administrator nicht deaktivieren", async () => { + const admin = await adminAnlegen(); + await expect(aktivSetzen(admin.id, false, admin.id)).rejects.toThrow(/letzte aktive Administrator/); + }); + + it("erlaubt die Aenderung, sobald ein zweiter Administrator da ist", async () => { + const admin = await adminAnlegen(); + await testPrisma.benutzer.create({ + data: { email: "zweiter@firma.example", name: "Zweiter", rolle: "ADMIN" }, + }); + await rolleSetzen(admin.id, "LESER", admin.id); + const danach = await testPrisma.benutzer.findUniqueOrThrow({ where: { id: admin.id } }); + expect(danach.rolle).toBe("LESER"); + }); + + it("zaehlt einen deaktivierten Administrator nicht als Rueckweg", async () => { + const admin = await adminAnlegen(); + await testPrisma.benutzer.create({ + data: { email: "inaktiv@firma.example", name: "Inaktiv", rolle: "ADMIN", aktiv: false }, + }); + await expect(rolleSetzen(admin.id, "LESER", admin.id)).rejects.toThrow(/letzte aktive Administrator/); + }); + + it("schreibt nichts, wenn sich nichts aendert", async () => { + const admin = await adminAnlegen(); + const ziel = await testPrisma.benutzer.create({ + data: { email: "ziel@firma.example", name: "Ziel", rolle: "LESER" }, + }); + + await rolleSetzen(ziel.id, "LESER", admin.id); + await aktivSetzen(ziel.id, true, admin.id); + + expect(await testPrisma.protokoll.count({ where: { entitaetId: ziel.id } })).toBe(0); + }); + }); +}); diff --git a/tests/navigation.test.ts b/tests/navigation.test.ts index 28ed32e..0e3e3ec 100644 --- a/tests/navigation.test.ts +++ b/tests/navigation.test.ts @@ -1,19 +1,52 @@ import { describe, expect, it } from "vitest"; import { navigationFuer } from "@/lib/navigation"; +import { darf } from "@/server/auth/rollen"; +import type { Rolle } from "@/generated/prisma/enums"; -describe("Seitenleiste", () => { +/** Was die Seitenleiste je Betriebsmodus und Rolle zeigt (#005, #007). */ + +function pfadeFuer(modus: "INTERN" | "DIENSTLEISTUNG", rolle: Rolle): string[] { + return navigationFuer(modus, (recht) => darf(rolle, recht)).map((e) => e.pfad); +} + +describe("Seitenleiste nach Betriebsmodus", () => { it("zeigt im Modus Intern die Kunden-Ebene nicht", () => { - const pfade = navigationFuer("INTERN").map((e) => e.pfad); + const pfade = pfadeFuer("INTERN", "ADMIN"); expect(pfade).not.toContain("/kunden"); expect(pfade).toContain("/mitarbeiter"); }); it("zeigt im Modus Dienstleistung Kunden statt Mitarbeiter & Geräte", () => { - const pfade = navigationFuer("DIENSTLEISTUNG").map((e) => e.pfad); + const pfade = pfadeFuer("DIENSTLEISTUNG", "ADMIN"); expect(pfade).toContain("/kunden"); expect(pfade).not.toContain("/mitarbeiter"); }); +}); +describe("Seitenleiste nach Rolle", () => { + it("zeigt Admin nur dem Administrator", () => { + expect(pfadeFuer("INTERN", "ADMIN")).toContain("/admin/benutzer"); + for (const rolle of ["REDAKTEUR", "TECHNIKER", "LESER"] as const) { + expect(pfadeFuer("INTERN", rolle), `Rolle ${rolle}`).not.toContain("/admin/benutzer"); + } + }); + + it("zeigt einem Leser die fachlichen Bereiche, aber nichts Verwaltendes", () => { + const pfade = pfadeFuer("INTERN", "LESER"); + expect(pfade).toContain("/"); + expect(pfade).toContain("/laeufe"); + expect(pfade).toContain("/archiv"); + expect(pfade).not.toContain("/admin/benutzer"); + }); + + it("blendet ohne bekannte Rolle alles Rechtegebundene aus", () => { + // So sieht die Huelle aus, solange niemand angemeldet ist. + const pfade = navigationFuer("INTERN", () => false).map((e) => e.pfad); + expect(pfade).not.toContain("/admin/benutzer"); + }); +}); + +describe("Aufbau der Eintraege", () => { it("verlinkt keinen Eintrag, dessen Seite es noch nicht gibt", () => { for (const eintrag of navigationFuer("INTERN")) { if (!eintrag.verfuegbar) { @@ -21,4 +54,11 @@ describe("Seitenleiste", () => { } } }); + + it("hat keine doppelten Pfade je Modus", () => { + for (const modus of ["INTERN", "DIENSTLEISTUNG"] as const) { + const pfade = pfadeFuer(modus, "ADMIN"); + expect(new Set(pfade).size).toBe(pfade.length); + } + }); }); diff --git a/tests/rollen.test.ts b/tests/rollen.test.ts new file mode 100644 index 0000000..92c5462 --- /dev/null +++ b/tests/rollen.test.ts @@ -0,0 +1,143 @@ +import { describe, expect, it } from "vitest"; +import { Rolle } from "@/generated/prisma/enums"; +import { RECHTE, ROLLEN_RANG, ROLLEN_TEXT, darf, staerksteRolle, type Recht } from "@/server/auth/rollen"; + +const ALLE_ROLLEN = Object.values(Rolle); +const ALLE_RECHTE = Object.keys(RECHTE) as Recht[]; + +/** + * Die vollstaendige Rechtematrix, absichtlich ausgeschrieben statt aus `RECHTE` berechnet: + * nur so faellt auf, wenn jemand einem `LESER` versehentlich Schreibrechte gibt (#007). Ein + * Test, der die Tabelle nur gegen sich selbst haelt, wuerde jede Aenderung mitmachen. + */ +const MATRIX: Record> = { + lesen: { ADMIN: true, REDAKTEUR: true, TECHNIKER: true, LESER: true }, + laeufeBearbeiten: { ADMIN: true, REDAKTEUR: true, TECHNIKER: true, LESER: false }, + geraeteBearbeiten: { ADMIN: true, REDAKTEUR: true, TECHNIKER: true, LESER: false }, + vorlagenBearbeiten: { ADMIN: true, REDAKTEUR: true, TECHNIKER: false, LESER: false }, + archivVerwalten: { ADMIN: true, REDAKTEUR: false, TECHNIKER: false, LESER: false }, + verwaltung: { ADMIN: true, REDAKTEUR: false, TECHNIKER: false, LESER: false }, +}; + +describe("Rechtematrix", () => { + const faelle = ALLE_RECHTE.flatMap((recht) => + ALLE_ROLLEN.map((rolle) => [recht, rolle, MATRIX[recht][rolle]] as const), + ); + + it("prueft jede Rolle gegen jedes Recht", () => { + // Haelt fest, dass die Tabelle unten wirklich vollstaendig ist: vier Rollen, sechs Rechte. + expect(ALLE_ROLLEN).toHaveLength(4); + expect(ALLE_RECHTE).toHaveLength(6); + expect(faelle).toHaveLength(24); + }); + + it.each(faelle)("%s: %s -> %s", (recht, rolle, erwartet) => { + expect(darf(rolle, recht)).toBe(erwartet); + }); +}); + +describe("Rollen im Einzelnen", () => { + it("laesst LESER nur lesen", () => { + expect(darf("LESER", "lesen")).toBe(true); + for (const recht of ALLE_RECHTE.filter((r) => r !== "lesen")) { + expect(darf("LESER", recht), `LESER darf ${recht} nicht`).toBe(false); + } + }); + + it("gibt TECHNIKER Laeufe und Geraete, aber keine Vorlagen und keine Verwaltung", () => { + expect(darf("TECHNIKER", "laeufeBearbeiten")).toBe(true); + expect(darf("TECHNIKER", "geraeteBearbeiten")).toBe(true); + expect(darf("TECHNIKER", "vorlagenBearbeiten")).toBe(false); + expect(darf("TECHNIKER", "verwaltung")).toBe(false); + expect(darf("TECHNIKER", "archivVerwalten")).toBe(false); + }); + + it("gibt REDAKTEUR alles von TECHNIKER plus Vorlagen, aber keine Verwaltung", () => { + for (const recht of ALLE_RECHTE.filter((r) => darf("TECHNIKER", r))) { + expect(darf("REDAKTEUR", recht), `REDAKTEUR darf ${recht} wie ein TECHNIKER`).toBe(true); + } + expect(darf("REDAKTEUR", "vorlagenBearbeiten")).toBe(true); + expect(darf("REDAKTEUR", "verwaltung")).toBe(false); + expect(darf("REDAKTEUR", "archivVerwalten")).toBe(false); + }); + + it("gibt ADMIN alles", () => { + for (const recht of ALLE_RECHTE) { + expect(darf("ADMIN", recht), `ADMIN darf ${recht}`).toBe(true); + } + }); + + it("behaelt das Zurueckholen aus dem Archiv beim ADMIN", () => { + // Steht als eigener Test da, weil die Zusage "ein archivierter Lauf aendert sich nicht" + // daran haengt. + expect(RECHTE.archivVerwalten).toStrictEqual(["ADMIN"]); + }); +}); + +describe("Aufbau der Tabelle", () => { + it("listet fuer jedes Recht mindestens eine Rolle", () => { + for (const recht of ALLE_RECHTE) { + expect(RECHTE[recht].length, `${recht} ohne Rolle waere fuer niemanden erreichbar`).toBeGreaterThan(0); + } + }); + + it("nennt in jedem Recht nur bekannte Rollen, jede hoechstens einmal", () => { + for (const recht of ALLE_RECHTE) { + const rollen = RECHTE[recht] as readonly Rolle[]; + expect(new Set(rollen).size, `${recht} nennt eine Rolle doppelt`).toBe(rollen.length); + for (const rolle of rollen) { + expect(ALLE_ROLLEN).toContain(rolle); + } + } + }); + + it("deckt mit ROLLEN_TEXT genau die Rollen des Enums ab", () => { + expect(Object.keys(ROLLEN_TEXT).sort()).toStrictEqual([...ALLE_ROLLEN].sort()); + for (const rolle of ALLE_ROLLEN) { + expect(ROLLEN_TEXT[rolle].length).toBeGreaterThan(0); + } + }); + + it("deckt mit ROLLEN_RANG genau die Rollen des Enums ab", () => { + expect(Object.keys(ROLLEN_RANG).sort()).toStrictEqual([...ALLE_ROLLEN].sort()); + }); + + it("gibt jeder Rolle einen eigenen Rang, ADMIN oben und LESER unten", () => { + const raenge = ALLE_ROLLEN.map((rolle) => ROLLEN_RANG[rolle]); + expect(new Set(raenge).size).toBe(ALLE_ROLLEN.length); + expect(Math.max(...raenge)).toBe(ROLLEN_RANG.ADMIN); + expect(Math.min(...raenge)).toBe(ROLLEN_RANG.LESER); + expect(ROLLEN_RANG.ADMIN).toBeGreaterThan(ROLLEN_RANG.REDAKTEUR); + expect(ROLLEN_RANG.REDAKTEUR).toBeGreaterThan(ROLLEN_RANG.TECHNIKER); + expect(ROLLEN_RANG.TECHNIKER).toBeGreaterThan(ROLLEN_RANG.LESER); + }); +}); + +describe("staerksteRolle", () => { + it("gibt bei leerer Liste LESER zurueck", () => { + // Wer in keiner abgebildeten Gruppe ist, soll hineinsehen duerfen -- nicht scheitern + // und erst recht nicht ADMIN werden. + expect(staerksteRolle([])).toBe("LESER"); + }); + + it.each(ALLE_ROLLEN)("gibt bei nur %s diese Rolle zurueck", (rolle) => { + expect(staerksteRolle([rolle])).toBe(rolle); + }); + + it.each([ + ["LESER und TECHNIKER", ["LESER", "TECHNIKER"], "TECHNIKER"], + ["TECHNIKER und REDAKTEUR", ["TECHNIKER", "REDAKTEUR"], "REDAKTEUR"], + ["REDAKTEUR und ADMIN", ["REDAKTEUR", "ADMIN"], "ADMIN"], + ["alle vier", ["LESER", "TECHNIKER", "REDAKTEUR", "ADMIN"], "ADMIN"], + ["ADMIN zuerst genannt", ["ADMIN", "LESER"], "ADMIN"], + ["LESER zuerst genannt", ["LESER", "ADMIN"], "ADMIN"], + ["dieselbe Rolle mehrfach", ["TECHNIKER", "TECHNIKER"], "TECHNIKER"], + ] as const)("waehlt aus %s die Rolle %s", (_fall, rollen, erwartet) => { + expect(staerksteRolle(rollen)).toBe(erwartet); + }); + + it("ist von der Reihenfolge unabhaengig", () => { + const rollen: Rolle[] = ["TECHNIKER", "ADMIN", "LESER", "REDAKTEUR"]; + expect(staerksteRolle(rollen)).toBe(staerksteRolle([...rollen].reverse())); + }); +}); diff --git a/tests/sitzung.test.ts b/tests/sitzung.test.ts new file mode 100644 index 0000000..5f667a5 --- /dev/null +++ b/tests/sitzung.test.ts @@ -0,0 +1,281 @@ +import { SignJWT } from "jose"; +import { afterEach, describe, expect, it } from "vitest"; +import { + SITZUNG_COOKIE, + SITZUNG_LAUFZEIT_STUNDEN, + SitzungsFehler, + sitzungErzeugen, + sitzungLesen, + type Sitzung, +} from "@/lib/sitzung"; + +// `tests/setup-env.ts` setzt einen Standardwert. Tests, die daran drehen, stellen ihn danach +// wieder her, damit die Reihenfolge der Tests nichts aendert. +const APP_SECRET_VORHER = process.env["APP_SECRET"]; + +function appSecretSetzen(wert: string): void { + process.env["APP_SECRET"] = wert; +} + +afterEach(() => { + if (APP_SECRET_VORHER === undefined) { + delete process.env["APP_SECRET"]; + } else { + process.env["APP_SECRET"] = APP_SECRET_VORHER; + } +}); + +const DATEN: Omit = { + benutzerId: "b-0815", + email: "anna.mueller@example.org", + name: "Anna Müller", + herkunft: "passwort", +}; + +function schluessel(quelle: string): Uint8Array { + return new TextEncoder().encode(quelle); +} + +/** Baut ein Token von Hand, damit sich Ablauf, Aussteller und Zielgruppe einzeln verbiegen lassen. */ +async function tokenBauen(optionen: { + aussteller?: string; + zielgruppe?: string; + ausgestelltAm?: number; + laeuftAbAm?: number; + geheimnis?: string; + inhalt?: Record; +}): Promise { + const jetzt = Math.floor(Date.now() / 1000); + return await new SignJWT({ + email: DATEN.email, + name: DATEN.name, + herkunft: DATEN.herkunft, + ...optionen.inhalt, + }) + .setProtectedHeader({ alg: "HS256" }) + .setSubject(DATEN.benutzerId) + .setIssuer(optionen.aussteller ?? "laufzettel") + .setAudience(optionen.zielgruppe ?? "laufzettel") + .setIssuedAt(optionen.ausgestelltAm ?? jetzt) + .setExpirationTime(optionen.laeuftAbAm ?? jetzt + 3600) + .sign(schluessel(optionen.geheimnis ?? APP_SECRET_VORHER ?? "")); +} + +/** Aendert genau ein Zeichen im angegebenen Abschnitt des Tokens. */ +function zeichenVerfaelschen(jwt: string, abschnitt: number): string { + const teile = jwt.split("."); + const teil = teile[abschnitt]; + if (teil === undefined || teil.length === 0) { + throw new Error(`Abschnitt ${abschnitt} fehlt im Token.`); + } + teile[abschnitt] = (teil.startsWith("A") ? "B" : "A") + teil.slice(1); + return teile.join("."); +} + +describe("Sitzung erzeugen und lesen", () => { + it("ist verlustfrei, auch bei Umlauten im Namen", async () => { + const jwt = await sitzungErzeugen(DATEN); + const sitzung = await sitzungLesen(jwt); + + expect(sitzung).toBeDefined(); + expect(sitzung?.benutzerId).toBe(DATEN.benutzerId); + expect(sitzung?.email).toBe(DATEN.email); + expect(sitzung?.name).toBe("Anna Müller"); + expect(sitzung?.herkunft).toBe("passwort"); + }); + + it.each([ + ["Umlaute und Eszett", "Jörg Weiß-Bäcker"], + ["franzoesische Akzente", "Zoé Lefèvre"], + ["langer Doppelname", "Maximilian Freiherr von Hohenstein-Überlingen"], + ])("behaelt %s im Namen", async (_fall, name) => { + const jwt = await sitzungErzeugen({ ...DATEN, name }); + expect((await sitzungLesen(jwt))?.name).toBe(name); + }); + + it("setzt ausgestelltAm auf die aktuelle Zeit in Sekunden", async () => { + const vorher = Math.floor(Date.now() / 1000); + const sitzung = await sitzungLesen(await sitzungErzeugen(DATEN)); + const nachher = Math.floor(Date.now() / 1000); + + expect(sitzung?.ausgestelltAm).toBeGreaterThanOrEqual(vorher); + expect(sitzung?.ausgestelltAm).toBeLessThanOrEqual(nachher); + }); + + it("uebernimmt beide Herkuenfte", async () => { + for (const herkunft of ["passwort", "oidc"] as const) { + const sitzung = await sitzungLesen(await sitzungErzeugen({ ...DATEN, herkunft })); + expect(sitzung?.herkunft).toBe(herkunft); + } + }); + + it("signiert mit HS256 und laeuft nach der festgelegten Laufzeit ab", async () => { + const jwt = await sitzungErzeugen(DATEN); + const [kopfTeil, inhaltTeil] = jwt.split("."); + const kopf = JSON.parse(Buffer.from(kopfTeil ?? "", "base64url").toString("utf8")) as { + alg: string; + }; + const inhalt = JSON.parse(Buffer.from(inhaltTeil ?? "", "base64url").toString("utf8")) as { + iat: number; + exp: number; + iss: string; + aud: string; + }; + + expect(kopf.alg).toBe("HS256"); + expect(inhalt.exp - inhalt.iat).toBe(SITZUNG_LAUFZEIT_STUNDEN * 3600); + expect(inhalt.iss).toBe("laufzettel"); + expect(inhalt.aud).toBe("laufzettel"); + }); + + it("nennt den Cookie-Namen und die Laufzeit unveraendert", () => { + // Der Name steht im Proxy und in der Anmelderoute; eine Umbenennung meldet sich hier. + expect(SITZUNG_COOKIE).toBe("lz_sitzung"); + expect(SITZUNG_LAUFZEIT_STUNDEN).toBe(12); + }); + + it("legt den Namen nicht im Klartext offen, aber signiert ihn nachvollziehbar", async () => { + // Ein JWT ist nur signiert, nicht verschluesselt -- das soll hier niemand fuer + // Geheimhaltung halten. Der Test haelt fest, dass nichts Vertrauliches hineingehoert. + const jwt = await sitzungErzeugen(DATEN); + expect(jwt.split(".")).toHaveLength(3); + }); +}); + +describe("Sitzung lesen bei kaputtem Token", () => { + it("gibt bei undefined undefined zurueck", async () => { + await expect(sitzungLesen(undefined)).resolves.toBeUndefined(); + }); + + it.each([ + ["leerer Wert", ""], + ["nur Leerzeichen", " "], + ["Klartext ohne Punkte", "keinTokenSondernText"], + ["zu wenige Abschnitte", "aaa.bbb"], + ["kein base64", "!!!.???.###"], + ])("gibt bei %s undefined zurueck", async (_fall, jwt) => { + await expect(sitzungLesen(jwt)).resolves.toBeUndefined(); + }); + + it("gibt bei einem an einem Zeichen verfaelschten Token undefined zurueck", async () => { + const jwt = await sitzungErzeugen(DATEN); + // Die Signatur passt danach nicht mehr -- genau das soll auffallen. + await expect(sitzungLesen(zeichenVerfaelschen(jwt, 2))).resolves.toBeUndefined(); + }); + + it("gibt bei verfaelschtem Inhalt undefined zurueck", async () => { + const jwt = await sitzungErzeugen(DATEN); + await expect(sitzungLesen(zeichenVerfaelschen(jwt, 1))).resolves.toBeUndefined(); + }); + + it("gibt bei verfaelschtem Kopf undefined zurueck", async () => { + const jwt = await sitzungErzeugen(DATEN); + await expect(sitzungLesen(zeichenVerfaelschen(jwt, 0))).resolves.toBeUndefined(); + }); + + it("gibt bei einem abgeschnittenen Token undefined zurueck", async () => { + const jwt = await sitzungErzeugen(DATEN); + + await expect(sitzungLesen(jwt.slice(0, jwt.length - 5))).resolves.toBeUndefined(); + await expect(sitzungLesen(jwt.split(".").slice(0, 2).join("."))).resolves.toBeUndefined(); + }); + + it("gibt bei einem Token ohne Signatur undefined zurueck", async () => { + // Der klassische alg-none-Versuch: Signatur weglassen und hoffen. + const jwt = await sitzungErzeugen(DATEN); + await expect(sitzungLesen(`${jwt.split(".").slice(0, 2).join(".")}.`)).resolves.toBeUndefined(); + }); + + it("gibt bei einem mit anderem Schluessel signierten Token undefined zurueck", async () => { + const fremd = await tokenBauen({ geheimnis: "ein-voellig-anderes-geheimnis-mit-genug-zeichen" }); + await expect(sitzungLesen(fremd)).resolves.toBeUndefined(); + }); + + it("gibt bei einem Token undefined zurueck, dessen APP_SECRET inzwischen rotiert wurde", async () => { + const jwt = await sitzungErzeugen(DATEN); + appSecretSetzen("nach-der-rotation-ein-anderes-geheimnis-mit-laenge"); + + // Haelt fest, dass der Schluessel nicht am Zwischenspeicher vorbeilaeuft. + await expect(sitzungLesen(jwt)).resolves.toBeUndefined(); + }); +}); + +describe("Sitzung lesen bei abgelaufenem oder fremdem Token", () => { + it("gibt bei einem abgelaufenen Token undefined zurueck", async () => { + const jetzt = Math.floor(Date.now() / 1000); + const abgelaufen = await tokenBauen({ + ausgestelltAm: jetzt - 13 * 3600, + laeuftAbAm: jetzt - 3600, + }); + + await expect(sitzungLesen(abgelaufen)).resolves.toBeUndefined(); + }); + + it("nimmt ein Token an, das gerade noch laeuft", async () => { + const jetzt = Math.floor(Date.now() / 1000); + const knapp = await tokenBauen({ laeuftAbAm: jetzt + 60 }); + + expect(await sitzungLesen(knapp)).toBeDefined(); + }); + + it("gibt bei falschem Aussteller undefined zurueck", async () => { + // Ein mit demselben Geheimnis signiertes Token aus einem anderen Zweck darf nicht als + // Sitzung durchrutschen. + const fremd = await tokenBauen({ aussteller: "proxledger" }); + await expect(sitzungLesen(fremd)).resolves.toBeUndefined(); + }); + + it("gibt bei falscher Zielgruppe undefined zurueck", async () => { + const fremd = await tokenBauen({ zielgruppe: "einladung" }); + await expect(sitzungLesen(fremd)).resolves.toBeUndefined(); + }); + + it.each([ + ["fehlende E-Mail", { email: undefined }], + ["fehlender Name", { name: undefined }], + ["fehlende Herkunft", { herkunft: undefined }], + ["unbekannte Herkunft", { herkunft: "ldap" }], + ["Name als Zahl", { name: 42 }], + ])("gibt bei %s undefined zurueck", async (_fall, inhalt) => { + const luecke = await tokenBauen({ inhalt }); + await expect(sitzungLesen(luecke)).resolves.toBeUndefined(); + }); +}); + +describe("APP_SECRET pruefen", () => { + it.each([ + ["fehlendes", ""], + ["viel zu kurzes", "kurz"], + ["knapp zu kurzes (31 Zeichen)", "a".repeat(31)], + ])("wirft beim Erzeugen bei %s APP_SECRET mit Hinweis auf openssl", async (_fall, wert) => { + appSecretSetzen(wert); + + await expect(sitzungErzeugen(DATEN)).rejects.toThrow(SitzungsFehler); + await expect(sitzungErzeugen(DATEN)).rejects.toThrow(/openssl rand -base64 48/); + await expect(sitzungErzeugen(DATEN)).rejects.toThrow(/mindestens 32 Zeichen/); + }); + + it("wirft auch beim Lesen bei zu kurzem APP_SECRET", async () => { + // Die eine Ausnahme von "sitzungLesen wirft nicht": ein zu kurzes Geheimnis ist ein + // Konfigurationsfehler und darf nicht als "nicht angemeldet" durchgehen. + const jwt = await sitzungErzeugen(DATEN); + appSecretSetzen("kurz"); + + await expect(sitzungLesen(jwt)).rejects.toThrow(SitzungsFehler); + await expect(sitzungLesen(undefined)).rejects.toThrow(/openssl rand -base64 48/); + }); + + it("nimmt genau 32 Zeichen an", async () => { + appSecretSetzen("b".repeat(32)); + + const sitzung = await sitzungLesen(await sitzungErzeugen(DATEN)); + expect(sitzung?.benutzerId).toBe(DATEN.benutzerId); + }); + + it("stellt den Standardwert aus setup-env wieder her", async () => { + // Haelt fest, dass die Aufraeumroutine oben greift -- sonst wuerden die Tests je nach + // Reihenfolge unterschiedlich ausgehen. + expect(process.env["APP_SECRET"]).toBe(APP_SECRET_VORHER); + expect(await sitzungLesen(await sitzungErzeugen(DATEN))).toBeDefined(); + }); +}); diff --git a/tests/zugang.test.ts b/tests/zugang.test.ts new file mode 100644 index 0000000..e1a4e04 --- /dev/null +++ b/tests/zugang.test.ts @@ -0,0 +1,173 @@ +import { readFileSync, readdirSync } from "node:fs"; +import { join } from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { SignJWT } from "jose"; +import { sicheresZiel } from "@/server/auth/anmeldung"; +import { istOeffentlich } from "@/proxy"; +import { kurzzeitTokenErzeugen, kurzzeitTokenLesen } from "@/lib/kurzzeit-token"; +import { sitzungErzeugen, sitzungLesen } from "@/lib/sitzung"; + +/** + * Die Zugangswege in die Anwendung (#007). + * + * Diese Datei haelt die Zusicherungen fest, die ein unabhaengiger Review als + * Luecken benannt hat: das Ruecksprungziel gegen Steuerzeichen, die Allowlist des + * Proxys, die Trennung der beiden Token-Arten und dass wirklich jede Server + * Action mit einer Rechtepruefung beginnt. + */ + +const UMGEBUNG = { ...process.env }; + +afterEach(() => { + process.env = { ...UMGEBUNG }; +}); + +describe("Ruecksprungziel gegen Steuerzeichen", () => { + // Browser entfernen Tabulator, Zeilenumbruch und Wagenruecklauf beim + // Verarbeiten einer URL. Aus "//fremd.example" wird dabei + // "//fremd.example" – also ein fremder Host. Eine Pruefung auf Praefixe + // erkennt das nicht. + const angriffe = [ + "/\t/fremd.example", + "/\n//fremd.example", + "/\r/fremd.example", + "/\t\t//fremd.example", + "//fremd.example", + "/\\fremd.example", + "/..//fremd.example", + "/../..//fremd.example", + "https://fremd.example", + "//FREMD.example", + "javascript:alert(1)", + ]; + + it.each(angriffe)("weist %j ab", (angriff) => { + const ergebnis = sicheresZiel(angriff); + expect(ergebnis).toBe("/"); + }); + + it("gibt nie etwas zurueck, das als Adresse einen fremden Host ergaebe", () => { + for (const angriff of angriffe) { + const aufgeloest = new URL(sicheresZiel(angriff), "http://laufzettel.example"); + expect(aufgeloest.origin, `bei ${JSON.stringify(angriff)}`).toBe("http://laufzettel.example"); + } + }); + + it("laesst gewoehnliche Ziele unveraendert durch", () => { + expect(sicheresZiel("/t/LZ-7K3F9Q")).toBe("/t/LZ-7K3F9Q"); + expect(sicheresZiel("/laeufe?filter=offen#abschnitt-2")).toBe("/laeufe?filter=offen#abschnitt-2"); + }); + + it("laesst prozentkodierte Steuerzeichen als Pfad stehen, ohne den Host zu wechseln", () => { + // %09 wird beim Aufloesen nicht dekodiert, bleibt also ein eigenartiger Pfad + // auf der eigenen Herkunft – harmlos, im Gegensatz zum echten Tabulator. + const ergebnis = sicheresZiel("/%09/fremd.example"); + expect(new URL(ergebnis, "http://laufzettel.example").origin).toBe("http://laufzettel.example"); + }); +}); + +describe("Allowlist des Proxys", () => { + it("laesst genau die Pfade durch, die ohne Anmeldung gehen muessen", () => { + for (const pfad of [ + "/anmelden", + "/api/auth/oidc/start", + "/api/auth/oidc/rueckruf", + "/api/auth/abmelden", + "/api/gesundheit", + "/manifest.webmanifest", + "/icon.svg", + ]) { + expect(istOeffentlich(pfad), pfad).toBe(true); + } + }); + + it("laesst sich nicht durch einen angehaengten Namen austricksen", () => { + // Ein reiner startsWith-Vergleich haette /anmeldenX durchgelassen. + for (const pfad of [ + "/anmeldenX", + "/anmelden-geheim", + "/api/authX", + "/api/gesundheitlich", + "/admin/benutzer", + "/", + "/laeufe", + "/t/LZ-7K3F9Q", + ]) { + expect(istOeffentlich(pfad), pfad).toBe(false); + } + }); +}); + +describe("Trennung von Sitzung und Kurzzeit-Token", () => { + it("laesst ein Kurzzeit-Token nicht als Sitzung durchgehen", async () => { + const kurz = await kurzzeitTokenErzeugen("oidc-fluss", { ziel: "/" }, 60); + expect(await sitzungLesen(kurz)).toBeUndefined(); + }); + + it("laesst eine Sitzung nicht als Kurzzeit-Token durchgehen", async () => { + const sitzung = await sitzungErzeugen({ + benutzerId: "b1", + email: "a@b.example", + name: "A", + herkunft: "passwort", + }); + expect(await kurzzeitTokenLesen("oidc-fluss", sitzung)).toBeUndefined(); + }); + + it("laesst ein Kurzzeit-Token fuer einen anderen Zweck nicht durchgehen", async () => { + const kurz = await kurzzeitTokenErzeugen("ganz-anderer-zweck", { ziel: "/" }, 60); + expect(await kurzzeitTokenLesen("oidc-fluss", kurz)).toBeUndefined(); + }); + + it("weist ein Token ab, das mit dem rohen APP_SECRET signiert wurde", async () => { + // Das Kurzzeit-Modul leitet seinen Schluessel per scrypt ab. Wer nur das + // Geheimnis kennt, kann damit kein gueltiges Fluss-Token bauen. + const roh = new TextEncoder().encode(process.env["APP_SECRET"] ?? ""); + const gefaelscht = await new SignJWT({ ziel: "/" }) + .setProtectedHeader({ alg: "HS256" }) + .setIssuedAt() + .setIssuer("laufzettel") + .setAudience("oidc-fluss") + .setExpirationTime("60s") + .sign(roh); + expect(await kurzzeitTokenLesen("oidc-fluss", gefaelscht)).toBeUndefined(); + }); +}); + +describe("Rechtepruefung an den Einstiegspunkten", () => { + const verzeichnis = "src/server/actions"; + + /** Aktionen, die absichtlich ohne Anmeldung erreichbar sind. */ + const OEFFENTLICHE_AKTIONEN = new Set(["anmeldenAktion"]); + + it("beginnt jede Server Action mit einer Rechtepruefung", () => { + // Strukturell geprueft, weil eine vergessene Pruefung sonst erst auffiele, + // wenn jemand sie ausnutzt. Die Rechtematrix selbst deckt tests/rollen.test.ts ab. + const befunde: string[] = []; + + for (const name of readdirSync(verzeichnis).filter((n) => n.endsWith(".ts"))) { + const quelle = readFileSync(join(verzeichnis, name), "utf8"); + expect(quelle.startsWith('"use server";'), `${name} fehlt "use server"`).toBe(true); + + for (const treffer of quelle.matchAll(/export async function (\w+)\(([\s\S]*?)\n\}/g)) { + const [, funktion, rumpf] = treffer; + if (!funktion || OEFFENTLICHE_AKTIONEN.has(funktion)) continue; + if (!rumpf?.includes("rechtErforderlich(")) { + befunde.push(`${name}: ${funktion} prueft kein Recht`); + } + } + } + + expect(befunde).toEqual([]); + }); + + it("findet ueberhaupt Aktionen, sonst prueft der Test oben nichts", () => { + const aktionen = readdirSync(verzeichnis) + .filter((n) => n.endsWith(".ts")) + .flatMap((n) => [ + ...readFileSync(join(verzeichnis, n), "utf8").matchAll(/export async function (\w+)/g), + ]) + .map((t) => t[1]); + expect(aktionen.length).toBeGreaterThanOrEqual(4); + }); +}); -- 2.54.0
      +
      + + +
      + +
      +

      Anmelden

      + + {meldung ? ( +

      + {meldung} +

      + ) : null} + + {abgemeldet ? ( +

      + Du bist abgemeldet. +

      + ) : null} + + {mitOidc ? ( +
      + ) : null} + + {mitOidc && mitPasswort ? ( +
      + + oder + +
      + ) : null} + + {mitPasswort ? ( +
      + + + + +
      + ) : null} + + {!mitOidc && !mitPasswort ? ( +

      + Es ist kein Anmeldeweg eingerichtet. Setze AUTH_LOCAL_ENABLED oder + die OIDC_*-Variablen. Siehe{" "} + .env.example. +

      + ) : null} +
      + + {versionText()} +