Block a user
[Perf/UX] Review-Liste: Lazy-Loading der Thumbnails via IntersectionObserver
[Perf] Thumbnail-Endpoint + pHash/EXIF-Cache
[Perf] Thumbnail-Endpoint + pHash/EXIF-Cache
Fix (a) und (b) umgesetzt:
(a) /thumb-Endpoint
- Neuer Endpoint
GET /thumb?path=...&w=200(min 32, max 800) - Disk-Cache unter `/of-thumbs/<md5(path
[Perf] pHash- und EXIF-Disk-Cache zwischen Runs
[Perf] Bilder werden 2-3x pro Bild dekodiert in analyze_folder
[Perf] Bilder werden 2-3x pro Bild dekodiert in analyze_folder
Fix umgesetzt in analyzer.py:analyze_folder:
- Phase 1 lädt jedes Bild einmal mit
Image.open(path)und berechnet daraus alles:gray_arr(numpy L-Konvertierung)blurvia…
[Bug] Silent Failures: AI ohne Key, HEIC ohne pillow-heif, Export-Skips
[Bug] Silent Failures: AI ohne Key, HEIC ohne pillow-heif, Export-Skips
Fix in drei Teilen umgesetzt:
a) AI-Phase
_run_analyze_jobprueft API-Key vor Phase 4 (leer / Platzhalteryour_*/ Laenge < 30)ai_skipped-Feld im Status-Result mit klarer…
[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben
Fix umgesetzt in server.py:download_kept:
- Erwartete Dateiliste vor ZIP-Erstellung gesammelt
- Pro Datei
zf.writein try/except: Fehler werden gesammelt, nicht geschluckt shutil.rmtree…
[Bug] /download loescht Quelle auch bei fehlgeschlagenem ZIP-Schreiben
[Bug] Unbounded _jobs-Dict + Race in /export/download vs Cleanup
Fix umgesetzt in server.py:
(a) Jobs-TTL
- Job-Dict bekommt jetzt
created_atbeim Anlegen (/analyze,/export) - Background-Thread
_cleanup_jobspurged Jobs aelter als `_JOB_TTL =…
[Bug] Unbounded _jobs-Dict + Race in /export/download vs Cleanup
[Bug] Pillow-Resource-Leak: Image.open() ohne with-Statement
[Bug] Pillow-Resource-Leak: Image.open() ohne with-Statement
Fix umgesetzt:
analyzer.py:_mean_brightness->with Image.open(...)analyzer.py:find_duplicates->with Image.open(...) as img: phash(img)processor.py:get_exif_info-> `with…
[Security] CORS, Security-Header, Token-Speicherung
Fix (a) und (b) umgesetzt in server.py:
CORS — statt allow_origins=["*"] jetzt allow_origin_regex fuer localhost, 127.0.0.1 und lxc<id>-<port>.<domain> (VCH Subdomain-Proxy).…
[Security] CORS, Security-Header, Token-Speicherung
[Security] Token in HttpOnly+SameSite-Cookie statt sessionStorage
[Security] /browse und /move ohne Pfad-Sandboxing
[Security] /browse und /move ohne Pfad-Sandboxing
Fix umgesetzt in server.py:
BROWSE_ROOT = "/home/vchuser"als Sandbox/browselehnt Pfade ausserhalb mit 403 ab,parentistNonean der Wurzel/moveprueft jetzt `tempfile.gettemp…
[Security] DOM-XSS via innerHTML mit User-Inputs (Dateinamen, Browse)
Fix umgesetzt in index.html:
- Upload-Liste (Z.1049 alt): row via
createElement+textContent, kein Template-String mit User-Input - Folder-Browser-Item (Z.1139 alt):
textContentstatt…