/* * E9 (Umsetzungsauftrag Teil E): der gleitende Idle-Timeout des Session- * Cookies (siehe app/auth/deps.py::get_current_user, refresh_session_token) * wird nur bei regulaeren HTTP-Anfragen verlaengert. Ein WebSocket-Handshake * kann das nicht (WebSockets erlauben nach dem Handshake kein Set-Cookie * mehr, siehe get_current_user_ws()) -- ein Benutzer, der eine Stunde * ausschliesslich in einem offenen Terminal- oder RDP-Tab arbeitet, haette * sonst ein abgelaufenes Cookie: die laufende Sitzung selbst laeuft zwar * weiter, aber jede WEITERE Aktion (zweite Sitzung oeffnen, Dateitransfer, * Katalog neu laden) scheitert mit "Session abgelaufen". * * Fix: waehrend ein Sitzungstab (Terminal/RDP) offen ist, periodisch einen * billigen, bereits authentifizierten HTTP-Endpunkt aufrufen (GET /auth/me, * siehe app/auth/routes.py) -- das durchlaeuft dieselbe get_current_user()- * Dependency wie jede andere Anfrage und verlaengert den Cookie ganz * regulaer, ohne einen eigenen Endpunkt oder Serveraenderungen zu brauchen. * * Intervall: deutlich unter dem serverseitig konfigurierten * session_idle_timeout_s (Standard 900s/15min, app/config.py) -- 3 Minuten * Sicherheitsmarge reichen fuer jede sinnvolle Konfiguration. */ (() => { "use strict"; const KEEPALIVE_INTERVAL_MS = 3 * 60 * 1000; function ping() { fetch("/auth/me", { method: "GET", credentials: "same-origin" }).catch(() => { // Absichtlich stumm: ein einzelner fehlgeschlagener Keepalive-Ping // (z.B. kurzer Netzwerkaussetzer) soll die laufende Sitzung nicht // stoeren -- schlaegt die Session tatsaechlich fehl, faellt das beim // naechsten regulaeren Request (Dateitransfer, Reload, ...) ohnehin auf. }); } window.setInterval(ping, KEEPALIVE_INTERVAL_MS); })();