umbau 1.0

This commit is contained in:
2026-09-02 20:30:44 +02:00
parent afe6719f51
commit 5c95b21be7
77 changed files with 10733 additions and 1914 deletions

View File

@ -0,0 +1,37 @@
/*
* 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);
})();