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");