From 40e95dbe5fe1dcd68d5883c0cfb92e623951ac3c Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Fri, 25 Sep 2026 01:35:02 +0000 Subject: [PATCH] feat(auth): Anmeldung, Rollen und Benutzerverwaltung (#21) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OIDC mit Discovery, PKCE, state und nonce; lokaler Login mit argon2 als Notfallzugang; Rechte in einer Tabelle, Prüfung ausschließlich serverseitig, Rolle und Aktiv-Status pro Anfrage aus der Datenbank. Ein unabhängiger Review fand eine offene Weiterleitung: die Präfix-Prüfung des Rücksprungziels ließ //fremd.example durch, woraus der Browser //fremd.example macht. Das Ziel wird jetzt aufgelöst und die Herkunft verglichen. Dazu acht weitere Befunde, alle behoben. 274 Tests. 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); + }); +});
      +
      + + +
      + +
      +

      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()} +