From 4ad99b5c37b11d5c91f01b811fdba14b3c829758 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Sun, 23 Aug 2026 17:30:23 +0200 Subject: [PATCH] Diagnose: Volltest mit echtem Ausweis Ein 401 ohne Anmeldung beweist nur, dass die Adresse existiert -- nicht, dass die Antwort auch bei ANGEMELDETEM Zugriff kommt. Genau dort blieb die Verwaltung stehen. Die Diagnose geht jetzt denselben Weg wie die Verwaltung: Ausweis von der Zugangswand holen, damit die Einstellungen abrufen, Zeit messen. Mit eigenem Zeitlimit von 12 Sekunden, damit die Diagnose nicht selbst haengt, wenn die Adresse haengt -- ein Pruefwerkzeug, das am selben Problem scheitert, ist wertlos. Damit ist der Befund eindeutig statt vermutet: entweder 'Erfolgreich in X ms', oder eine Statusnummer samt Antworttext, oder 'KEINE Antwort innerhalb von 12 Sekunden'. --- webdesign/diagnose.html | 58 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/webdesign/diagnose.html b/webdesign/diagnose.html index 75d98923..0efa8e67 100644 --- a/webdesign/diagnose.html +++ b/webdesign/diagnose.html @@ -246,6 +246,64 @@ code { background: rgba(127,208,232,.1); padding: .1rem .35rem; border-radius: 5 zeile("bad", "Zahlungen-Bereich", "Nicht erreichbar: " + (e.message || "")); } + /* 4b. DER ENTSCHEIDENDE TEST: derselbe Ablauf wie in der Verwaltung, + mit einem echten Ausweis. + + Ein 401 ohne Anmeldung beweist nur, dass die Adresse existiert. + Es beweist NICHT, dass die Antwort auch dann kommt, wenn man + angemeldet ist -- und genau dort blieb die Verwaltung stehen. + + Deshalb hier der volle Weg: Ausweis holen, damit die Einstellungen + abrufen, Zeit messen. Bricht es ab, steht hier die Ursache. */ + try { + var t1 = Date.now(); + var aw = await fetch("/webdesign/api-ausweis", { cache: "no-store" }); + var awMs = Date.now() - t1; + if (!aw.ok) { + zeile("bad", "Ausweis für die Verwaltung", + "Die Zugangswand gibt keinen aus (Status " + aw.status + "). " + + "Dann fragt die Verwaltung nach dem Code — das ist die Ursache."); + } else { + var awD = await aw.json(); + if (!awD.ausweis) { + zeile("bad", "Ausweis für die Verwaltung", + "Kein Ausweis" + (awD.grund ? " (" + awD.grund + ")" : "") + + ". Ohne ihn kann die Verwaltung keine Daten laden."); + } else { + zeile("gut", "Ausweis für die Verwaltung", "Erhalten in " + awMs + " ms."); + + /* Jetzt der eigentliche Abruf -- mit eigenem Zeitlimit, damit + die Diagnose nicht selbst haengt, wenn die Adresse haengt. */ + var abbruch = new AbortController(); + var wecker = setTimeout(function () { abbruch.abort(); }, 12000); + var t2 = Date.now(); + try { + var ein = await fetch(API + "/webdesign/admin/einstellungen", { + headers: { Authorization: "Bearer " + awD.ausweis }, + cache: "no-store", + signal: abbruch.signal, + }); + var einMs = Date.now() - t2; + var txt = await ein.text(); + if (ein.status === 200) { + zeile("gut", "Einstellungen abrufen", + "Erfolgreich in " + einMs + " ms (" + txt.length + " Zeichen Antwort)."); + } else { + zeile("bad", "Einstellungen abrufen", + "Status " + ein.status + " nach " + einMs + " ms. Antwort: " + txt.slice(0, 160)); + } + } catch (e2) { + zeile("bad", "Einstellungen abrufen", + e2.name === "AbortError" + ? "KEINE Antwort innerhalb von 12 Sekunden — die Anfrage bleibt hängen." + : "Fehlgeschlagen: " + (e2.message || e2.name)); + } finally { clearTimeout(wecker); } + } + } + } catch (e) { + zeile("bad", "Ausweis für die Verwaltung", "Nicht abrufbar: " + (e.message || "")); + } + /* 5. Anmeldung im Browser vorhanden? */ try { var tok = sessionStorage.getItem("wd-vw-token");