jagd-apps/nachsuche/backend/controllers
thomas d0e48f3385 fix(deploy): Backend startet wieder — JWT-Secret kam leer im Container an
Startblocker aus d9fecb6: die Compose-Dateien lesen seither
${NACHSUCHE_JWT_SECRET} (bzw. DROHNENFUEHRER_/STOEBERHUNDE_), die .env-Dateien
definieren aber weiterhin JWT_SECRET. Compose ersetzte die unbekannte Variable
still durch einen Leerstring, config/env.js beendete den Prozess daraufhin mit
Exit-Code 1 — mit restart: unless-stopped ein Crash-Loop. Nachgewiesen mit
`docker compose config` (JWT_SECRET: "") und einem Startversuch.

- Compose nutzt jetzt ${..._JWT_SECRET:?...}: fehlt der Wert, bricht compose
  mit einer Meldung ab, statt ihn stillschweigend zu leeren.
- Die .env-Dateien (nicht versioniert) tragen die korrekten Namen und je App
  ein EIGENES 32-Byte-Secret. Vorher stand in allen drei derselbe 16-Zeichen-
  Wert, wodurch die App-Trennung aus d9fecb6 wirkungslos war.
  FOLGE: alle laufenden Admin-Sitzungen und Fuehrer-Tokens sind ungueltig,
  alle muessen sich einmal neu anmelden.
- Fuehrer-Tokens tragen jetzt app: config.appName, und handlerAuth.js sowie
  die umbenannten Varianten pruefen den Claim. Vorher trugen sie nur
  { id, role } — die app-Pruefung in middleware/auth.js lief bei ihnen ins
  Leere, weil sie an `decoded.app &&` haengt.
  Geprueft: Fuehrer-Token aus App A gegen /me von App B -> 403, gegen die
  eigene -> 200.
- APP_URL steht in Compose wieder auf ${APP_URL:-}. Der Default aus der
  letzten Runde hat die Warnung aus config/env.js unterdrueckt, die auf eine
  fehlende Konfiguration hinweisen sollte.
- .env.example dokumentiert die neuen Namen, den openssl-Aufruf und dass
  CORS_ORIGIN/APP_URL produktiv nicht auf localhost stehen duerfen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 20:47:02 +02:00
..
__tests__
auditController.js
authController.js
configController.js
handlerController.js fix(deploy): Backend startet wieder — JWT-Secret kam leer im Container an 2026-08-30 20:47:02 +02:00
userController.js