diff --git a/.env.example b/.env.example index 78a90d3..537d761 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,8 @@ # ── Pflicht ─────────────────────────────────────────────────────────────────── # Datenbank: Postgres (docker-compose setzt sie selbst) oder SQLite für lokale Entwicklung DATABASE_URL=sqlite:///./.data/onyscribe-admin.db -# Master-Key für Secrets in der DB UND Session-Cookies (Fernet-Key). SICHERN – ohne ihn sind Secrets unlesbar. +# Master-Key für Secrets in der DB UND Session-Cookies (Fernet-Key, 44 Zeichen). SICHERN – ohne ihn sind Secrets unlesbar. +# python3 -c "import base64,os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())" # python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" SECRET_KEY= diff --git a/app/services/crypto.py b/app/services/crypto.py index d988ccb..3510ead 100644 --- a/app/services/crypto.py +++ b/app/services/crypto.py @@ -4,7 +4,14 @@ from cryptography.fernet import Fernet from app.settings import SECRET_KEY -_f = Fernet(SECRET_KEY.encode()) +try: + _f = Fernet(SECRET_KEY.encode()) +except ValueError as exc: + raise RuntimeError( + "SECRET_KEY ist kein gültiger Fernet-Schlüssel (erwartet: 32 Zufallsbytes in URL-sicherem Base64, 44 Zeichen, endet meist mit „=“). " + "Erzeugen mit: python3 -c \"import base64,os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())\" " + "– und in Coolify als SECRET_KEY setzen (außerhalb von Coolify sichern; ohne ihn sind die Secrets in der Datenbank nicht entschlüsselbar)." + ) from exc def encrypt(v: str) -> str: