mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-11 17:30:00 +02:00
feat: security hardening, streaming overhaul, design polish, tests
Security: - Replace unsalted SHA-256 password hashing with bcrypt (lazy rehash on login) - Add authenticated /api/xtream-api gateway: Xtream credentials are injected server-side and never sent to the frontend; /api/playlists no longer returns passwords - Redact credentials from all logs (login body, proxy/FFmpeg/scheduler URLs) - Add auth to recordings, EPG, season-passes and streaming routes (HttpOnly session cookie for hls.js; loopback bypass for local FFmpeg) - Lock player postMessage to same-origin in both directions - Vendor and pin hls.js 1.6.7 / mpegts.js 1.7.3 (drop CDN @latest) - Fix rate limiter (client IP was never resolved), add login rate limit, restrict CORS, add CSP Report-Only, block private-IP SSRF targets, fix path traversal in recording log retrieval, chmod 777 -> 770 - Remove dead HiveService (seeded admin/admin into IndexedDB with SHA-256) - Fix authMiddleware not populating 'user' context (getPlaylist ignored the logged-in user; admin purge always returned 403) Streaming: - New FfmpegSessionManager: process registry, idle reaper (4 min live / 15 min VOD), orphan cleanup at startup, clean SIGTERM shutdown, fast-fail with stderr instead of 30 s timeout - Quality selection (source/high/medium/low) for live and VOD; source mode streams with -c:v copy (zero transcoding); selector wired into the player - Concurrent recordings (MAX_CONCURRENT_RECORDINGS, default 2); conflicts retry on the next tick instead of silently failing - Lower live latency (HLS window 20 -> 10 segments, liveSync 10 -> 3) - Fix recording log lookup (.mp4 vs .mkv mismatch) Design: - Replace hardcoded colors with AppColors tokens (12 files) - web/theme.css syncs HTML players with the Flutter palette - DPAD/keyboard navigation (arrow-key focus, player shortcuts) - Tooltips on player icon buttons, Semantics on content cards - Remove 7 dead widgets broken since the Stitch merge Quality: - bin/test/: 21 unit tests (bcrypt, redaction, traversal, SSRF, recording conflicts) plus a quality-selector widget test - GitHub Actions CI (analyze + test + build web) - Archive stale status docs into docs/archive/ Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cb5eca7547
commit
60d3f42901
107 files changed
+4525
-3815
No files matched your search
@@ -1,5 +1,39 @@
|
||||
# 📝 Changelog - XtremFlow Optimisations
|
||||
|
||||
## Version 1.2 - Security, Streaming & Design Overhaul (10 Juin 2026)
|
||||
|
||||
### 🔐 Sécurité
|
||||
- Hachage des mots de passe en **bcrypt** (migration lazy depuis SHA-256 au login)
|
||||
- Les credentials Xtream ne quittent plus jamais le serveur : nouvelle passerelle authentifiée `/api/xtream-api` (injection côté serveur), `/api/playlists` ne renvoie plus les mots de passe
|
||||
- Redaction des credentials dans tous les logs (proxy, FFmpeg, scheduler, login)
|
||||
- Cookie de session HttpOnly + auth sur les routes de streaming, recordings, EPG, season-passes
|
||||
- postMessage des players verrouillé sur same-origin (plus de wildcard `*`)
|
||||
- hls.js 1.6.7 / mpegts.js 1.7.3 vendorisés et figés (`web/vendor/`, plus de CDN `@latest`)
|
||||
- Rate limiter réparé (IP réelle via X-Forwarded-For) + limite login 10/min/IP
|
||||
- CORS restreint (plus de wildcard), CSP en Report-Only, anti-SSRF (IP privées bloquées), fix path-traversal sur les logs d'enregistrement, `chmod 770` sur /app/recordings
|
||||
- Suppression du code mort HiveService (seed admin SHA-256 en IndexedDB)
|
||||
|
||||
### 📺 Streaming
|
||||
- **FfmpegSessionManager** : registre des process FFmpeg, reaper d'inactivité (4 min live / 15 min VOD), purge des orphelins au démarrage, arrêt propre SIGTERM, échec rapide avec stderr (fini le timeout 30 s)
|
||||
- **Sélection de qualité** : `source | high | medium | low` (live + VOD), `source` = `-c:v copy` zéro transcodage ; sélecteur dans le player
|
||||
- **Enregistrements simultanés** (MAX_CONCURRENT_RECORDINGS, défaut 2) : les conflits réessaient au lieu d'échouer
|
||||
- Latence live réduite : fenêtre HLS 20→10 segments, `liveSyncDurationCount` 10→3
|
||||
- Fix : récupération des logs d'enregistrement (cherchait `.mp4`, fichiers en `.mkv`)
|
||||
- Fix : `authMiddleware` ne peuplait pas `user` → getPlaylist retombait toujours sur le 1er utilisateur, purge admin toujours 403
|
||||
|
||||
### 🎨 Design
|
||||
- Sweep des couleurs hardcodées → tokens `AppColors` (24 occurrences, 12 fichiers)
|
||||
- `web/theme.css` : variables CSS synchronisées avec le thème Flutter pour les 3 players HTML
|
||||
- Navigation DPAD/clavier : flèches = focus, raccourcis player (espace, ←/→ seek/zap, M mute, Échap)
|
||||
- Tooltips sur tous les boutons icône du player, `Semantics` sur les cartes chaînes/films/séries
|
||||
- Suppression de 7 widgets morts cassés depuis la fusion Stitch
|
||||
|
||||
### 🧪 Qualité
|
||||
- Tests backend (`bin/test/`) : bcrypt, redaction, path-traversal, SSRF, logique de conflit d'enregistrement — 21 tests
|
||||
- Test widget du sélecteur de qualité
|
||||
- CI GitHub Actions (analyze + test + build web)
|
||||
- Docs périmées archivées dans `docs/archive/`
|
||||
|
||||
## Version 1.1 - Optimizations Release (26 Mars 2026)
|
||||
|
||||
### 🆕 New Features
|
||||
|
||||
Reference in new issue
Block a user