S1 (hoch): Die OIDC-Rueckkehr verknuepft eine Identitaet mit einem bestehenden Konto nur bei bestaetigter E-Mail — geprueft wurde das auch, nur war die Bestaetigung als `email_verified !== false` berechnet. Damit galt auch ein fehlender Claim als bestaetigt, und genau den schicken manche Anbieter gar nicht. Jetzt zaehlt allein ein ausdrueckliches `true`. S2 (hoch): `isAuthEnabled()` verlangte den Wert "true"; alles andere hiess "aus". Eine vergessene Variable ergab eine Anwendung, in der jeder Besucher alles darf, und nichts sah danach aus. Umgedreht: Abgeschaltet wird nur, wer ausdruecklich "false" setzt. Die Vorgaben in Compose und .env.example stehen auf true, und der Container warnt beim Start mehrzeilig, solange die Anmeldung aus ist. S5 (mittel): Der OIDC-Bootstrap las `user.count()` und legte danach an — zwei gleichzeitige erste Anmeldungen konnten beide Administrator werden. Jetzt in einer serialisierbaren Transaktion, wie die lokale Ersteinrichtung es laengst tut. S6 (niedrig): Die Herkunftspruefung verglich nur den Host, nicht das Schema. Das Schema kommt jetzt aus BASE_URL — die eine Angabe zum Ursprung, ueber die der Aufrufer nicht mitbestimmt. S3, S4 und S7 bleiben offen und stehen begruendet in docs/sicherheit.md. Bei S3 wurde der naheliegende Ausweg geprueft und verworfen: Waehrend der Sperre weiter Passwoerter zu pruefen kostet 128 MiB je Versuch und tauschte eine Sperre gegen ein Konto gegen eine gegen alle. Refs #20
81 lines
3.4 KiB
Bash
81 lines
3.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.
|
|
# true — Anmeldung erforderlich. Beim ersten Aufruf legst du den ersten
|
|
# Administrator an. Das ist die Vorgabe, auch wenn die Zeile fehlt.
|
|
# false — jeder, der die App erreicht, darf alles: Verwaltung, Uploads,
|
|
# saemtliche Codes. Nur fuer Einzelplatz- oder LAN-Betrieb, und
|
|
# nur, wenn niemand Fremdes an den Rechner kommt. Der Container
|
|
# warnt beim Start deutlich, solange das so steht.
|
|
# Bewusst hier und nicht in der Oberfläche: so kann man sich nicht aussperren.
|
|
# Wer den Zugang verliert, setzt den Wert auf false und startet neu.
|
|
AUTH_ENABLED=true
|
|
|
|
# Groesste erlaubte Datei fuer die Typen "PDF" und "Bild", in Megabyte.
|
|
# Die Dateien liegen in der Datenbank — wer die sichert, hat alles. Sehr
|
|
# grosse Werte machen die Sicherung entsprechend schwer.
|
|
MAX_UPLOAD_MB=10
|
|
|
|
# Sitzungsdauer in Tagen.
|
|
# SESSION_IDLE_DAYS — ohne Aktivitaet laeuft die Sitzung ab.
|
|
# SESSION_MAX_DAYS — harte Obergrenze ab dem Anmelden, unabhaengig davon,
|
|
# wie oft sie benutzt wurde.
|
|
# OWASP empfiehlt fuer oeffentliche Anwendungen deutlich kuerzere Werte
|
|
# (Minuten bzw. Stunden); siehe docs/sicherheit.md.
|
|
SESSION_IDLE_DAYS=30
|
|
SESSION_MAX_DAYS=90
|
|
|
|
# --- Anmeldung ueber Authentik oder einen anderen OIDC-Anbieter -------------
|
|
# Setzt AUTH_ENABLED=true voraus. Einrichtung siehe docs/authentik.md.
|
|
OIDC_ENABLED=false
|
|
|
|
# Basis-URL des Anbieters, unter der /.well-known/openid-configuration liegt.
|
|
# Bei Authentik: https://auth.example.com/application/o/<slug>/
|
|
OIDC_ISSUER=
|
|
OIDC_CLIENT_ID=
|
|
OIDC_CLIENT_SECRET=
|
|
|
|
# Beschriftung des Knopfs auf der Anmeldeseite.
|
|
OIDC_BUTTON_LABEL=Mit Authentik anmelden
|
|
|
|
# Angeforderte Bereiche. "openid" ist Pflicht, "email" wird gebraucht.
|
|
OIDC_SCOPES=openid email profile
|
|
|
|
# Nur noch ueber den Anbieter anmelden? Dann verschwindet das Passwortfeld.
|
|
# Vorsicht: Faellt der Anbieter aus, kommt niemand mehr hinein — zum Loesen
|
|
# hier auf false setzen und neu starten.
|
|
OIDC_ONLY=false
|
|
|
|
# Rolle, die neu angelegte Benutzer in der Standardgruppe bekommen.
|
|
# VIEWER (nur lesen), EDITOR (Codes anlegen und aendern) oder ADMIN.
|
|
OIDC_DEFAULT_ROLE=VIEWER
|
|
|
|
# Gruppe beim Anbieter, deren Mitglieder die Verwaltung oeffnen duerfen.
|
|
# Leer lassen, um die Administratorrechte hier in der Anwendung zu pflegen.
|
|
OIDC_ADMIN_GROUP=
|
|
# Name des Anspruchs, in dem die Gruppen stehen (Authentik: groups).
|
|
OIDC_GROUPS_CLAIM=groups
|
|
|
|
# --- 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
|