Mindflux: Sicherheit, Datenintegrität und Navigation härten
This commit is contained in:
@@ -4,6 +4,88 @@ Alle nennenswerten Änderungen an **Mindflux** werden hier dokumentiert.
|
||||
Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/),
|
||||
Versionierung [semantisch](https://semver.org/lang/de/).
|
||||
|
||||
## [Unreleased] – 2026-07-12 · Großer Verbesserungs-Sweep (Sicherheit, Daten, Navigation)
|
||||
|
||||
Weitgehende Umsetzung des Verbesserungskatalogs aus `mindfluxfuture.md` (Teil 2;
|
||||
bewusst zurückgestellte Restpunkte sind dort weiterhin als offen markiert):
|
||||
Sicherheit, Datenintegrität, echtes XP/Achievement-System, Navigations-Umbau,
|
||||
Docker/CI-Härtung und erste Tests.
|
||||
|
||||
### Sicherheit
|
||||
- **DB-Passwort aus dem Repo entfernt:** `docker-compose.yml` liest jetzt `${MINDFLUX_DB_PASSWORD}`
|
||||
aus einem Gitea-Secret (wie die Admin-Passwörter).
|
||||
Compose bricht bei einem fehlenden oder leeren Secret jetzt sofort mit einer eindeutigen
|
||||
Fehlermeldung ab, statt einen App-Container mit leerem DB-Passwort zu starten.
|
||||
Der Gitea-Runner gleicht das PostgreSQL-Passwort vor jedem Deployment automatisch mit dem
|
||||
Secret ab; für die Rotation ist daher kein separater SSH-Zugang erforderlich.
|
||||
**Produktionsrotation abgeschlossen am 2026-07-12:** Secret angelegt, DB-Rolle aktualisiert
|
||||
und Mindflux über den erfolgreichen Gitea-Workflow-Lauf 43 neu gestartet (Commit `4f5042d`).
|
||||
- **Unsicherer Legacy-Endpunkt `/users/save` gelöscht** (speicherte User ohne Hashing, mit frei
|
||||
wählbarer Rolle) inkl. `UserViewController`, `user-form.html`, `user-success.html`.
|
||||
- **Logout nur noch per POST** mit CSRF-Token (alle Templates umgestellt).
|
||||
- **Login-Brute-Force-Schutz:** Nach 5 Fehlversuchen wird der Benutzername 15 Minuten gesperrt
|
||||
(`LoginAttemptService`, In-Memory).
|
||||
- **Registrierung gehärtet:** Passwort-Mindestlänge 8, E-Mail-Formatprüfung, case-insensitiver
|
||||
Unique-Index auf `users.username` (Migration V9) schließt das Registrierungs-Race.
|
||||
- **Bootstrap-Admins abgesichert:** Ein Admin wird nur noch angelegt, wenn sein Passwort-Secret
|
||||
tatsächlich gesetzt ist; fehlende optionale Admin-Konfiguration wird protokolliert und sicher
|
||||
übersprungen.
|
||||
- Dockerfile läuft nicht mehr als root (`USER mindflux`), zweistufig mit Dependency-Cache;
|
||||
Tests laufen im Image-Build mit. Compose-Healthcheck auf `/actuator/health` (Actuator neu).
|
||||
|
||||
### Daten & Backend
|
||||
- **Migration V10:** `UNIQUE(lower(email))`, Fremdschlüssel von `game_scores`/`achievements`
|
||||
auf `users(username)` mit `ON DELETE CASCADE ON UPDATE CASCADE`; verwaiste Altdaten werden
|
||||
bereinigt, E-Mail-Dubletten aufgelöst (älteste Zeile behält die Adresse).
|
||||
- **Echte XP/Level/Streak statt Dummy-Daten:** `ProgressService` aggregiert aus `game_scores`
|
||||
(XP = Score-Summe, 1000 XP je Level, Tages-Streak mit 1 Tag Karenz); Dashboard-Sidebar zeigt
|
||||
echte Werte.
|
||||
- **Achievements sind live:** Katalog aus 6 Regeln (Erster Sieg, 1000er-Club, Highscore-Jäger,
|
||||
Dauerbrenner, Punktesammler, Allrounder), Vergabe automatisch bei jedem gespeicherten Score;
|
||||
Dummy-Daten entfernt, gesperrte Karten zeigen den Katalog.
|
||||
- **User-Logik konsolidiert:** Registrierung, REST- und Admin-Anlage laufen über einen
|
||||
`UserService` (eine Stelle für BCrypt, Rollen-Whitelist, Eindeutigkeit);
|
||||
`AdminUserService`/`AdminUserRepository` (Duplikate) entfernt.
|
||||
- **Globales Error-Handling:** eigene Fehlerseite (`error.html`) statt Whitelabel, JSON-Fehler
|
||||
mit korrekten Statuscodes für alle APIs, unbekannte URLs liefern eine echte 404-Seite.
|
||||
- **N+1-Queries behoben:** TechTacular-Board lädt Kategorien/Fragen/Antworten in 2 Queries
|
||||
(Fetch-Join), Admin-Fragenzähler als eine GROUP-BY-Query.
|
||||
- **Logging:** alle `System.out`/`printStackTrace` durch SLF4J ersetzt.
|
||||
- `spring-boot-starter-validation` + `-actuator` ergänzt, redundantes `spring-security-crypto`
|
||||
entfernt, Java auf 21 vereinheitlicht (pom + Dockerfile).
|
||||
|
||||
### Navigation & UI
|
||||
- **Layout-Fragmente eingeführt** (`fragments/layout.html`): App-Sidebar, Profil-Tab-Leiste und
|
||||
Footer sind jetzt gemeinsame Fragmente (erster Schritt gegen die Template-Duplikation).
|
||||
- **Sidebar hat einen „Profil"-Eintrag**; der User-Block verlor den irreführenden Dropdown-Pfeil.
|
||||
- **Profil-Tab-Leiste auf allen Unterseiten** (Profil · Statistiken · Erfolge · Soziales ·
|
||||
Einstellungen) mit einheitlichen Namen; Rück-Links führen einheitlich zum Dashboard.
|
||||
- **Einstellungen aufgeräumt:** Theme-Auswahl funktioniert jetzt wirklich (gekoppelt an
|
||||
`theme.js`/localStorage); funktionslose Sprach-/Benachrichtigungs-Attrappen entfernt;
|
||||
`SettingsController` in den `ProfileController` gemergt; Token-Farbe statt Hardcode.
|
||||
- **Spielnamen vereinheitlicht** (englisch, zusammengeschrieben): DevLab, SyntaxSaga sowie
|
||||
CodeEscape, ServiceClash, BugHunter, NetWorker für die geplanten Spiele (Keys in
|
||||
`KNOWN_GAMES`/`ProgressService` mit umbenannt – noch keine Scores vorhanden).
|
||||
- **DevLab erscheint jetzt auf der Statistik-Seite** (fehlte in `ProgressService.GAMES`).
|
||||
- Tote Templates entfernt: `login.html`, `register.html` (Formular lebt auf der Startseite),
|
||||
`AppStartCheck` u. a. Kleinkram.
|
||||
|
||||
### FinalFlux
|
||||
- **AP2-Gerüst:** neue Sidebar-Blöcke „AP2 Anwendungsentwicklung" und „AP2 Systemintegration"
|
||||
mit den ersten Themenseiten **Entwurfsmuster** (FIAE) und **Hochverfügbarkeit** (FISI) inkl.
|
||||
FluxChecks – FinalFlux deckt damit den Weg zur gesamten Ausbildung ab (AP1 + AP2).
|
||||
|
||||
### Tests (neu – vorher 0)
|
||||
- 33 Tests: Score-Formel, XP/Level/Streak-Berechnung, Registrierungsregeln, Achievement-Vergabe,
|
||||
Login-Sperre sowie `@WebMvcTest` der Security-Regeln (Login-Zwang, Admin-Schutz,
|
||||
gelöschter Legacy-Endpunkt). Die CI baut das Image jetzt inklusive Testlauf.
|
||||
|
||||
### Dokumentation
|
||||
- **`mindfluxfuture.md`:** konsolidierter Verbesserungs- und Ausbaukatalog mit umgesetzten,
|
||||
bewusst zurückgestellten und künftig geplanten Punkten.
|
||||
- **`pw_anleitung.md`:** Betriebsanleitung für DB-Secret, automatische Runner-Rotation,
|
||||
manuellen Notfallweg und Verifikation nach dem Deployment.
|
||||
|
||||
## [Unreleased] – 2026-06-30 · Login, Registrierung & Konten
|
||||
|
||||
Reihe von Fixes und Verbesserungen rund um Anmeldung, Registrierung und
|
||||
|
||||
Reference in New Issue
Block a user