# Changelog Alle nennenswerten Änderungen an Clusev. Format nach [Keep a Changelog](https://keepachangelog.com), Versionierung nach [SemVer](https://semver.org). **Release-Prozess:** Feature-Commits sammeln sich auf dem Branch. Ist ein Stand reif, wird er nach `main` gemerged, als `vX.Y.Z` getaggt und hier unter einer eigenen Versionsüberschrift dokumentiert. Nutzer beziehen ausschließlich getaggte Releases (Kanal `stable`, optional `beta`) — niemals Entwicklungs-Builds. ## [Unreleased] _Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._ ## [0.1.1] - 2026-06-13 Wartungs-Release: vollständige Code-Auditierung, Entfernung von totem Code und ein behobenes Open-Redirect. Keine funktionalen Änderungen für Nutzer. ### Behoben - Open-Redirect im Server-Switcher: ein manipulierter `Referer` konnte die Weiterleitung nach dem Server-Wechsel auf eine fremde Adresse lenken. Die Weiterleitung wird jetzt auf einen **gleich-origin** relativen Pfad reduziert (fremde Schemata wie `javascript:`/`data:`, andere Hosts/Ports sowie protokoll-relative Tricks `//host` / `/\host` werden abgewiesen). - SSH-Zugang: eine Passphrase wurde unabhängig vom Auth-Typ gespeichert; sie wird jetzt nur noch bei Schlüssel-Authentifizierung hinterlegt. ### Geändert - Datei-Manager + Editor verwenden ein eigenes `file`-Symbol statt des Audit-Symbols (semantisch korrekt). - Code-Hygiene: toten Code entfernt (ungenutzte `FirewallService`-Methoden `status/allow/deny`, `Server::auditEvents()`, `SshCredential::scopeActive()`, ungenutztes `bell`-Icon), veraltete Doc-Blöcke/Kommentare korrigiert, Exceptions sauber importiert, base64-Argument im Sudo-Pfad defensiv gequotet, Null-sichere Nutzerabfrage in den Einstellungen. Pint + Codex-Review sauber. ## [0.1.0] - 2026-06-13 Erste geschnittene Version — die komplette v1-Basis inklusive Server- und Panel-Härtung als ein Release. ### Hinzugefügt - Dashboard mit Live-Sparklines und poll-getriebenem Dual-Chart (KPIs + Tabelle). - Server-Index + Detailseite, Dienste (systemd: Start/Stop/Restart + Journal), Datei-Manager (SFTP: Up-/Download, Editor), Audit-Log. - SSH-Schicht über phpseclib (exec + SFTP) mit Host-Key-Pinning (TOFU) und Multi-Server-Switcher samt Fleet-Kontext. - Echte Metriken (CPU/RAM/Disk/Load) inkl. Absolutwerten über Reverb. - Authentifizierung + 2FA (TOTP) mit erzwungenem Onboarding. - R5-Bestätigungsmodals (wire-elements/modal) für destruktive Aktionen. - System-Seite mit Domain & TLS (Caddy Auto-TLS) und Release-Kanal. - Echte Versions-Seite, die Version, Build-Hash und dieses Änderungsprotokoll liest. - Deploy: `install.sh` + Caddy (Auto-TLS) + Produktions-Härtung. - Selbst-gehostete Fonts (kein CDN), Split-Brand Login/2FA. ### Geändert - Dienst-Steuerung läuft über das hinterlegte Sudo-Passwort (`sudo -S`) statt nur passwortlosem sudo — Start/Stop/Restart + Journal funktionieren live. - Lazy-Loading der Seiten (Skeletons), normalisierte Buttons + Spinner, Detailseiten- und Einstellungs-Redesign, Schlüsselerzeugung. - Vollständige Regel-Auditierung (R1–R14), neue Regel R14 (lokale Fonts). ### Behoben - Datei-Editor: Klick löste einen Alpine-Fehler aus (`@js()` kompiliert nicht in Komponenten-Attributen) — auf Index-Lookups umgestellt. - Adversarial Review der SSH-Schicht (Escaping, Parser, Host-Key-Pinning). - 500 durch `@disabled` auf ``; Modal über dem Backdrop; poll-getriebene Metriken (Chart + Gauges) statt fiktiver Fleet-Daten; 2FA-Setup-QR als ``. - fail2ban/apt-Härtung schlug fehl, weil der 12s-SSH-Timeout den Paket-Install abbrach — langer Timeout für apt-Aktionen. ### Sicherheit - Server-Härtung aus dem Dashboard (Root-/Passwort-Login, fail2ban, UFW, Auto-Updates) mit Befehls-Vorschau, Bestätigung und Aussperr-Schutz. - Verwaltung hinterlegter SSH-Zugänge (Name, Sperren, Löschen); der Vault verweigert gesperrte Zugänge. Dienst-Steuerung über hinterlegtes Sudo-Passwort. - Panel-Selbst-Härtung: Security-Header + umgebungsbewusste CSP, 2FA-Brute-Force- Drossel, Session-Cookie-Härtung. - Release-/Versionierungsmodell: echte semantische Versionen + Git-Tags, Changelog pro Version, Kanäle `stable`/`beta` (kein nutzer-seitiges `dev`). [Unreleased]: https://git.bave.dev/boban/clusev/compare/v0.1.1...HEAD [0.1.1]: https://git.bave.dev/boban/clusev/compare/v0.1.0...v0.1.1 [0.1.0]: https://git.bave.dev/boban/clusev/releases/tag/v0.1.0