Umschaltbar ueber AUTH_ENABLED in der .env. Steht sie auf false, verhaelt
sich alles wie bisher - geprueft mit den 200 bestehenden Pruefungen.
Kern ist eine Actor- und Policy-Schicht: getActor() liefert bei
ausgeschalteter Anmeldung einen system-Actor mit Vollzugriff, sonst den
angemeldeten Benutzer. Dadurch braucht keine einzige Route ein
'if (anmeldungAktiv)' - sie fragen alle nur can() bzw. requirePermission().
- Datenmodell: User, Session, Group, Membership; Codes bekommen Gruppe und
Ersteller. Die Migration legt eine Standardgruppe an und ordnet ihr
bestehende Codes zu, bevor die Spalte verpflichtend wird - sonst
scheiterte sie auf jeder bereits benutzten Installation.
- Passwoerter mit scrypt aus der Node-Standardbibliothek. Bewusst kein
Argon2: das braeuchte ein natives Modul passend zur Container-Plattform.
- Sitzungen in der Datenbank, im Cookie nur ein Zufallstoken; gespeichert
wird dessen SHA-256. Deaktivieren oder ein neues Passwort beendet alle
offenen Sitzungen sofort.
- Aussperrschutz: der letzte aktive Administrator kann sich nicht selbst
entmachten, deaktivieren oder loeschen. Der Schalter liegt in der .env,
nicht in der Oberflaeche - so bleibt der Weg zurueck immer offen.
- Ersteinrichtung legt den ersten Administrator an und schliesst sich danach.
- Die Weiterleitung /r/{slug} bleibt oeffentlich, sonst liesse sich kein
gedruckter Code mehr scannen.
Zwei Fehler dabei gefunden und behoben:
- 'return handleLogin(...)' innerhalb eines try-Blocks gibt das Promise
zurueck, bevor es sich aufloest. Die Ablehnung kam nie im catch an und
wurde zu einem nackten 500er statt einer 401. Jetzt mit await.
- Die Fehlerklassen wurden ueber instanceof erkannt. type-module.ts landet
aber sowohl im Server- als auch im Client-Buendel, es gibt also zwei
Klassenidentitaeten - saubere 400er wurden dadurch still zu 500ern. Die
Erkennung laeuft jetzt ueber eine Eigenschaft.
Geprueft: 51 neue Pruefungen fuer Anmeldung und die vollstaendige
Rollenmatrix, dazu die 200 bestehenden bei ausgeschalteter Anmeldung.
33 lines
1.4 KiB
Bash
33 lines
1.4 KiB
Bash
# ---------------------------------------------------------------------------
|
|
# QR-Code-Generator — Konfiguration
|
|
# Diese Datei nach ".env" kopieren und anpassen:
|
|
# cp .env.example .env
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Öffentliche Adresse, unter der die App erreichbar ist. Sie wird in
|
|
# dynamische QR-Codes einkodiert ({BASE_URL}/r/{slug}) und muss deshalb von
|
|
# den Geräten erreichbar sein, die den Code scannen.
|
|
# Im LAN z. B.: http://192.168.1.50:3000
|
|
BASE_URL=http://localhost:3000
|
|
|
|
# Host-Port, unter dem die App veröffentlicht wird (Port-Mapping APP_PORT:3000).
|
|
APP_PORT=3000
|
|
|
|
# Anmeldung mit Benutzern, Gruppen und Rollen.
|
|
# false — jeder, der die App erreicht, darf alles (Einzelplatz/LAN).
|
|
# true — Anmeldung erforderlich. Beim ersten Aufruf legst du den ersten
|
|
# Administrator an.
|
|
# Bewusst hier und nicht in der Oberfläche: so kann man sich nicht aussperren.
|
|
# Wer den Zugang verliert, setzt den Wert zurück auf false und startet neu.
|
|
AUTH_ENABLED=false
|
|
|
|
# --- PostgreSQL ------------------------------------------------------------
|
|
POSTGRES_USER=qrcode
|
|
POSTGRES_PASSWORD=bitte-aendern
|
|
POSTGRES_DB=qrcode
|
|
|
|
# Verbindungsstring der App zur Datenbank.
|
|
# "db" ist der Servicename aus docker-compose.yml — innerhalb des Compose-
|
|
# Netzwerks wird darüber die Datenbank aufgelöst.
|
|
DATABASE_URL=postgresql://qrcode:bitte-aendern@db:5432/qrcode?schema=public
|