2 Commits

Author SHA1 Message Date
Adminator a568f81b0a vendor-Fix: PHPMailer (v7.0.2, hand-vendored) im Autoloader wiederhergestellt
Beim Hinzufuegen von firebase/php-jwt + predis war PHPMailer aus composer.json
und dem Autoloader gefallen (Dateien fehlten ganz). Folge: `new PHPMailer` fatalt
-> 500 bei register/reset/2FA/Schueler-Zugang. Auf v3 aufgedeckt und behoben:
composer.json require + installed.json + Autoloader (App/vendor) mit PHPMailer,
firebase, predis. Verifiziert: alle 3 Namespaces laden. KRITISCH fuer Prod-Deploy
(Manifest spiegelt vendor/), sonst waere dort der Mailversand gebrochen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 00:29:03 +02:00
Adminator 5d94572569 Auth-Fundament: JWT + Redis (Phase 1, non-breaking)
Vorbereitung für pod-unabhängige Sessions (k8s-Ziel). Ändert am Live-System
NICHTS: AUTH_BACKEND='session' bleibt Default, die neuen Libs sind noch
nirgends verdrahtet.

- composer eingeführt: firebase/php-jwt ^6.11 + predis/predis ^2.4 (pure PHP,
  keine Redis-Extension nötig → läuft auf XAMPP wie im Prod-Image). vendor/
  committed (kein Composer auf dem Server).
- Jwt.php: HS256-Access-Token (issue/verify), decode() IMMER mit explizitem
  Algorithmus (mitigiert Algorithmus-Confusion). 8/8 Tests grün.
- SessionStore.php: predis-gestützter Session/Refresh-Store (sess:<sid>,
  Sliding-TTL, revoke=DEL) — die widerrufbare Session hinter dem kurzen JWT.
- app.php: vendor/autoload (guarded), Konstanten AUTH_BACKEND (Default session),
  REDIS_URL, JWT_TTL, JWT_REFRESH_TTL. JWT_SECRET bewusst ohne Default.
- docker-compose.dev.yml: Redis (+ redis-commander UI) für lokale Dev-Parität.
- .env.example um Auth-Block ergänzt.

Nächste Phasen: $_SESSION-Zugriffe (293) durch Session:: kanalisieren →
Backend-Umschalter in Session.php → doppelgleisiger Cutover → Reporting auf
student_id-FK ziehen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 16:21:27 +02:00