From 8a654bef890e122cbc1b581e13586df6b3cbd814 Mon Sep 17 00:00:00 2001 From: boban Date: Sat, 25 Apr 2026 18:04:30 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Wizard=20Step=205=20=E2=80=94=20korrekte?= =?UTF-8?q?=20Fehlermeldungen=20bei=20SSL-Fehler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit installer.sh / mailwolt-apply-domains: - State-Dateien jetzt korrekt pro Domain: "done" nur wenn LE-Cert existiert, sonst "error" — verhindert grüne Checkmarks bei fehlgeschlagenem certbot - mail-Domain: "skip" statt fälschlich "done" (certbot läuft nicht für MX im Wizard) - sleep 6 nur wenn Cert ausgestellt wurde (nginx-HTTPS-Switch nötig) WizardDomains.php: - Bei frühem DNS-Abbruch: verbleibende "running"-Domains auf "error" setzen statt ewig als "Wird registriert…" hängen zu bleiben Co-Authored-By: Claude Sonnet 4.6 --- app/Console/Commands/WizardDomains.php | 7 ++++++ installer.sh | 31 ++++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/Console/Commands/WizardDomains.php b/app/Console/Commands/WizardDomains.php index 7ac4775..6e6b496 100644 --- a/app/Console/Commands/WizardDomains.php +++ b/app/Console/Commands/WizardDomains.php @@ -50,6 +50,13 @@ class WizardDomains extends Command } if (!$allOk) { + // Domains die noch auf "running" stehen wurden nie verarbeitet → error + foreach (['ui', 'mail', 'webmail'] as $key) { + $status = trim((string) @file_get_contents(self::STATE_DIR . "/{$key}")); + if ($status === 'running') { + file_put_contents(self::STATE_DIR . "/{$key}", 'error'); + } + } file_put_contents(self::STATE_DIR . '/done', '0'); Setting::set('ssl_configured', '0'); return self::SUCCESS; diff --git a/installer.sh b/installer.sh index 06cba95..d0c40a7 100644 --- a/installer.sh +++ b/installer.sh @@ -778,20 +778,37 @@ CONF fi ) > "${NGINX_SITE}" -# State-Dateien VOR dem nginx-Switch schreiben: -# Browser-Poll (alle 2s) liest done=1 → Polling stoppt → "Zum Login" erscheint. -# Danach 6s sleep → nginx switchet auf HTTPS → User klickt Link → funktioniert. +# State-Dateien schreiben — korrekt pro Domain, nicht pauschal "done" STATE_DIR="/var/lib/mailwolt/wizard" if [ -d "${STATE_DIR}" ]; then - for k in ui mail webmail; do - [ -f "${STATE_DIR}/${k}" ] && printf "done" > "${STATE_DIR}/${k}" - done + # UI: done nur wenn LE-Cert tatsächlich vorhanden, sonst error + if [ -f "${STATE_DIR}/ui" ]; then + if [ "${UI_HAS_CERT}" = "1" ]; then + printf "done" > "${STATE_DIR}/ui" + else + printf "error" > "${STATE_DIR}/ui" + fi + fi + # Webmail: done nur wenn LE-Cert tatsächlich vorhanden, sonst error + if [ -f "${STATE_DIR}/webmail" ]; then + if [ "${WM_HAS_CERT}" = "1" ]; then + printf "done" > "${STATE_DIR}/webmail" + else + printf "error" > "${STATE_DIR}/webmail" + fi + fi + # Mail-Domain: kein certbot im Wizard für MX → skip (kein Fehler, nur nicht zutreffend) + [ -f "${STATE_DIR}/mail" ] && printf "skip" > "${STATE_DIR}/mail" + + # done-Signal: immer schreiben damit der 2s-Poll stoppt if [ "${UI_HAS_CERT}" = "1" ] || [ "${WM_HAS_CERT}" = "1" ]; then + # Erst done schreiben, dann 6s warten bevor nginx auf HTTPS wechselt — + # so hat der Browser Zeit den "Zum Login"-Button zu rendern bevor der Switch passiert printf "1" > "${STATE_DIR}/done" + sleep 6 else printf "0" > "${STATE_DIR}/done" fi - sleep 6 fi nginx -t && systemctl reload nginx