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