Admin-Panel (/admin): Auth, Spieler-Tracking, Live-Tuning, Bild-Verwaltung

- Passwortgeschütztes Panel unter /admin (Auto-Passwort 20 Zeichen, per CLI abrufbar:
  `node server/admin.js password` / `password reset`), In-Memory-Sessions + Cookie,
  Login-Rate-Limit.
- Spieler-Tracking: pro Score IP (CF/XFF/req.ip), Gerät/Browser (ua-parser-js),
  grober Ort (geoip-lite, offline) -> data/players.json; Aggregation pro Name.
- Live-Tuning: configStore (data/config.json) für Timer + Schwierigkeitskurve; Server
  (makeRound) und Client (/api/config) lesen daraus -> Änderungen ohne Neustart.
- Bild-Verwaltung: Upload/Löschen von Füßen & Deko (multer) + rescanLibrary().
- Panel-Aktionen: Spieler bannen/entbannen, Rangliste heute/alles leeren.
- Fix: .item object-fit:contain -> nicht-quadratische Bilder werden nicht mehr verzerrt.
- trust proxy für korrekte Client-IP hinter Reverse-Proxy/Cloudflare.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-05 22:19:52 +02:00
parent 51909deb9f
commit 5018ab753a
12 changed files with 1357 additions and 92 deletions

View File

@@ -82,6 +82,10 @@ node server/admin.js bans # gebannte Namen anzeigen
node server/admin.js mode # aktuellen Modus anzeigen
node server/admin.js mode public # Spiel öffentlich unter "/"
node server/admin.js mode private geheim # "/" gesperrt, Spiel nur unter "/geheim"
# Admin-Panel-Passwort
node server/admin.js password # Passwort anzeigen (Login unter /admin)
node server/admin.js password reset # neues Passwort erzeugen
```
(Kurzform via npm: `npm run lb -- <befehl>`.)
@@ -90,6 +94,24 @@ node server/admin.js mode private geheim # "/" gesperrt, Spiel nur unter "/geh
- **private**: `/` zeigt „You are not allowed to play", das Spiel läuft nur unter dem
gewählten Pfad (`/<pfad>`) — praktisch zum Testen im Live-Betrieb.
## Admin-Panel (`/admin`)
Passwortgeschütztes Web-Panel. Passwort wird beim ersten Start automatisch generiert
(20 Zeichen) und liegt in `data/admin.json` — anzeigen mit `node server/admin.js password`.
Funktionen:
- **Spieler**: approximative Zuordnung (IP, grober Ort via `geoip-lite` offline, Gerät, Browser)
aus den Spiel-Logs; einzelne Spieler direkt **bannen/entbannen**.
- **Einstellungen**: Timer (Start/Max/Bonus/Strafe) **und** Schwierigkeitskurve (Objekt-Anzahl,
Stufen, Tempo) **live** einstellen — wirkt sofort beim nächsten Spielstart.
- **Bilder**: Füße & Deko **hochladen/löschen** (kein Neustart). Empfehlung: **quadratische**
Bilder, 256×256 oder 512×512 PNG (transparent) bzw. SVG mit quadratischem `viewBox`;
nicht-quadratische werden per `object-fit: contain` eingepasst statt verzerrt.
- **Rangliste**: heute/alles zurücksetzen.
> Datenschutz: IP + grober Ort + Gerät/Browser sind personenbezogen (nur für Moderation).
> Für den öffentlichen Betrieb einen kurzen Datenschutz-Hinweis ergänzen.
## Deployment (Ausblick)
Normaler Node-Server. Auf einen Node-Host bringen (VPS/LXC/Railway/Render), `./install.sh`,