diff --git a/webdesign/sw.js b/webdesign/sw.js index db26a159..c1169859 100644 --- a/webdesign/sw.js +++ b/webdesign/sw.js @@ -34,7 +34,7 @@ Start alle alten Zwischenspeicher weg. Muss bei jeder Änderung an den Dateien unten hochgezählt werden, sonst hängen Nutzer auf einem alten Stand fest. */ -const CACHE_NAME = "dogfather-webdesign-v23"; +const CACHE_NAME = "dogfather-webdesign-v24"; /* Bausteine, die die Oberfläche zum Anzeigen braucht. Bewusst KEINE HTML-Datei in dieser Liste. */ diff --git a/webdesign/verwaltung.html b/webdesign/verwaltung.html index c012c9f8..2172f2dc 100644 --- a/webdesign/verwaltung.html +++ b/webdesign/verwaltung.html @@ -1104,11 +1104,36 @@ var s = window.WD.sicher; var meldung = document.getElementById("vw-meldung"); + /* Die HERKUNFT wird mitgespeichert, nicht nur der Schluessel. + + Vorher ueberlebte nur der Schluessel selbst ein Neuladen, die + Herkunft nicht. Damit galt eine gueltige Code-Sitzung nach jedem F5 + als "unbekannt": Beim naechsten 401 holte die Seite einen Ausweis, + ueberschrieb damit den funktionierenden Code-Schluessel -- und wenn + der Ausweis abgelehnt wird, landet man in der Anmeldemaske. Der + Schutz "eine Code-Sitzung wird nie ersetzt" war also genau ab dem + ersten Neuladen wirkungslos. + + Gefunden am 23.08.2026 auf die Rueckmeldung hin, dass beim Wechsel + der Kategorie wieder nach dem Code gefragt wird. */ + var QUELLE_SCHLUESSEL = TOKEN_SCHLUESSEL + "-quelle"; + function tokenLesen() { try { return sessionStorage.getItem(TOKEN_SCHLUESSEL); } catch (e) { return null; } } - function tokenSchreiben(t) { - try { if (t) sessionStorage.setItem(TOKEN_SCHLUESSEL, t); else sessionStorage.removeItem(TOKEN_SCHLUESSEL); } catch (e) { /* egal */ } + function quelleLesen() { + try { return sessionStorage.getItem(QUELLE_SCHLUESSEL); } catch (e) { return null; } + } + function tokenSchreiben(t, quelle) { + try { + if (t) { + sessionStorage.setItem(TOKEN_SCHLUESSEL, t); + if (quelle) sessionStorage.setItem(QUELLE_SCHLUESSEL, quelle); + } else { + sessionStorage.removeItem(TOKEN_SCHLUESSEL); + sessionStorage.removeItem(QUELLE_SCHLUESSEL); + } + } catch (e) { /* egal */ } } /* --------------------------------------------------------------------- @@ -1160,7 +1185,7 @@ ausweisLaeuft = ausweisHolen().finally(function () { ausweisLaeuft = null; }); } var neu = await ausweisLaeuft; - if (neu) { token = neu; tokenQuelle = "ausweis"; tokenSchreiben(neu); } + if (neu) { token = neu; tokenQuelle = "ausweis"; tokenSchreiben(neu, "ausweis"); } return neu; } @@ -1249,7 +1274,7 @@ var antwort = await window.WD.api("/auth/login", { method: "POST", body: { code: code } }); token = antwort.token; tokenQuelle = "code"; - tokenSchreiben(token); + tokenSchreiben(token, "code"); document.getElementById("vw-name").textContent = antwort.name || antwort.actor || "angemeldet"; zeigeBereich(); ladeUebersicht(); @@ -3489,11 +3514,22 @@ async function start() { token = tokenLesen(); if (token) { - /* Herkunft nach einem Neuladen unbekannt. Vorsichtshalber als - "code" behandeln: Lieber einmal die Codeeingabe zeigen, als eine - funktionierende Sitzung durch einen untauglichen Ausweis zu - ersetzen. */ - tokenQuelle = "code"; + /* Die Herkunft steht jetzt daneben und ueberlebt ein Neuladen. + + Vorher wurde nach jedem Neuladen "code" ANGENOMMEN. Das war als + Vorsicht gemeint, hatte aber eine unangenehme Kehrseite: Ein + AUSWEIS gilt nur 15 Minuten. Als "code" behandelt wurde er nie + erneuert -- nach einer Viertelstunde kam der erste 401, und man + landete in der Codeeingabe, obwohl alles in Ordnung war. Genau + das war die Rueckmeldung vom 23.08.2026 ("wenn ich von Uebersicht + auf andere Kategorien gehe, werd ich wieder nach dem Code + gefragt"). + + Steht dort nichts -- etwa aus einer aelteren Sitzung, die den + Eintrag noch nicht kannte --, bleibt es bei der vorsichtigen + Annahme "code": Eine funktionierende Sitzung durch einen + untauglichen Ausweis zu ersetzen waere der schlimmere Fehler. */ + tokenQuelle = quelleLesen() || "code"; zeigeBereich(); ladeUebersicht(); zaehlerHolen(); return; } @@ -3502,7 +3538,7 @@ if (ausweis) { token = ausweis; tokenQuelle = "ausweis"; - tokenSchreiben(token); + tokenSchreiben(token, "ausweis"); document.getElementById("vw-name").textContent = (document.cookie.match(/dogiwd_rolle=([^;]+)/) || [])[1] === "vanvan" ? "VanVan" : "Dogfather"; zeigeBereich();