Commit Graph

69 Commits (dbd7848f684593aecf1bec974e91c1ec50e1e023)

Author SHA1 Message Date
boban dbd7848f68 Fix: UpdateCard + CheckUpdates bevorzugen git-Tag über veraltete Version-Datei
Dev-Server zeigte v1.0.137 weil /var/lib/mailwolt/version nie aktualisiert
wurde. git describe --tags liefert immer die korrekte aktuelle Version.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:03:09 +02:00
boban 7f56926b70 Refactor: SSL-Verwaltung nach Security/SSL verschoben
- Zertifikate einrichten/erneuern nur noch unter Sicherheit → SSL/TLS
- SSL-Seite: Provisioning mit Fortschritt, Ablaufdatum + Tage in Tabelle
- Einstellungen: nur noch read-only Status + Link zu SSL-Seite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:01:58 +02:00
boban 904d60ed2b Fix: 503 fetch-Interceptor + Auto-Update-Polling + SSL-Banner prüft echte Certs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:26:20 +02:00
boban 240c672198 Fix: Update-UI zeigt alte Version / schließt sofort ab (Race Condition)
Problem: state-Datei vom letzten Update zeigte noch 'done'. pollUpdate()
las das direkt nach runUpdate() als "Update fertig" — bevor der neue
Prozess überhaupt startete. displayCurrent war dann noch die alte Version.

Fix:
- runUpdate() setzt state='starting' und löscht rc VOR dem Shell-Aufruf
- runUpdate() setzt rc=null, lowState='starting', postActionsDone=false zurück
- refreshLowLevelState(): Kommentar klärt dass 'starting' als running gilt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:50:44 +02:00
boban bd7bb50a52 Fix: SSL-Cert-Status robuster + Provisioning-State nach Reload erhalten
- loadSslStatus(): clearstatcache() + renewal-Conf als primärer Existenzcheck
  (renewal/ ist immer 755, zuverlässiger als is_dir auf live/ das 750 sein kann)
  + /usr/bin/openssl (voller Pfad für sudoers-Matching)
- restoreSslProvisioningState(): stellt letzten Provisioning-Zustand aus
  State-Dateien wieder her, so dass Status nach Page-Reload sichtbar bleibt
- Button zeigt nach Abschluss "Erneut einrichten" statt disabled zu bleiben

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:44:08 +02:00
boban 096e983313 Fix: SSL-Cert-Status zeigt 'Fehlt' obwohl Cert vorhanden
Problem: /etc/letsencrypt/archive/ ist chmod 700 (root only).
file_exists() auf Symlinks in live/ schlägt fehl weil Symlink-Ziel
in archive/ nicht lesbar ist. is_dir() auf live/domain/ funktioniert
da das Verzeichnis selbst 755 ist.

- SettingsForm: file_exists() → is_dir() für Existenzcheck
- SettingsForm: openssl-Aufruf via sudo -n (archive/ ist root-only)
- installer.sh + update.sh: sudoers-Regel für openssl auf LE-Cert-Pfade
  (www-data darf nur exakt diesen openssl-Aufruf, keine anderen Pfade)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:27:49 +02:00
boban f740ffc753 Feature: Dedizierter SSL-Abschnitt in Einstellungen mit Echtzeit-Fortschritt
- Neuer Abschnitt "SSL-Zertifikate" in den Einstellungen:
  · Zeigt pro Domain (UI, Webmail, Mailserver) ob LE-Cert vorhanden ist,
    Ablaufdatum und Status (OK / fehlt / läuft ab / abgelaufen)
  · Button "Let's Encrypt Zertifikate einrichten" startet Provisioning
    im Hintergrund (nohup, non-blocking)
  · Live-Fortschrittsanzeige per wire:poll.2s mit Status-Icons pro Domain
    (pending → running → done/error/skip)
- saveDomains() ruft apply-domains jetzt ohne certbot auf (--ssl-auto 0) —
  Domains speichern und SSL einrichten sind damit getrennte Aktionen
- loadSslStatus() liest Certbot-Zertifikat-Info direkt aus openssl
- spin-Keyframe für Spinner-Animation in app.css

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 08:04:58 +02:00
boban c4a2f33293 Fix: Update-Check via mailwolt-fetch-tags + Fehlerdetails in Settings-Toast
- Neu: scripts/mailwolt-fetch-tags ruft git ls-remote als App-User auf (hat Credentials),
  schreibt neuesten Tag nach /var/lib/mailwolt/version_remote
- CheckUpdates.php nutzt jetzt sudo mailwolt-fetch-tags statt direktem git fetch als www-data
  (www-data hat keine Git-Credentials für private Repos)
- SettingsForm.php zeigt tatsächliche Fehlerzeilen ([!], error, failed) im Toast statt
  generischer "fehlgeschlagen"-Meldung
- installer.sh + update.sh installieren mailwolt-fetch-tags nach /usr/local/sbin/
- update.sh trägt mailwolt-fetch-tags automatisch in sudoers nach (Upgrade-Pfad)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 07:46:18 +02:00
boban 01e7db589a Fix: Installer + Wizard Step 5 robuster gegen IPv6/SSL-Fehler
- installer.sh: mailwolt-apply-domains mit 3-Phasen certbot (HTTP → LE → SSL),
  IPv6-Check vor certbot, Zertifikat-Ablauf-Check (10 Tage), Version-Datei schreiben
- WizardDomains: noipv6-Status aus Helper-Output erkennen
- Wizard: retryDomains()-Methode für Wiederholung ohne neuen Wizard-Durchlauf
- Step 5 Blade: Hints pro Fehlerstatus, Retry-Button, "Trotzdem zum Login"
- UpdatePage: Version aus Datei, Fallback auf git describe (kein "dev" mehr)
- UpdatePage: refreshLowLevelState behandelt fehlende State-Datei als idle

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 13:16:42 +02:00
boban 38d22c85ed Feature: API-Key/Webhook responsive div-grid, Sandbox-Icon in Domains, Search-fix
- API-Key-Tabelle: unified CSS-Grid div-layout (kein separates mobile/desktop HTML mehr),
  Scopes auf max. 2 Badges + +N Modal, Lösch-Bestätigung via Livewire-Modal
- Webhook-Tabelle: selbes div-grid Pattern, Status/HTTP inline auf Mobile
- Globale Suche: go()-Methode fixed (forceClose + setTimeout 350ms gegen resetState-Race)
- Domains: Sandbox-Icon ersetzt Globus durch gelbes Warndreieck wenn Sandbox aktiv
- Sandbox: SandboxRoute-Model, SandboxService, Migration, Routen-Verwaltung
- CSS: mw-kl-*/mw-whl-* Grid-Klassen, minmax(0,1fr) Fix für Text-Truncation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 19:48:06 +02:00
boban 627ef668e5 Feature: Domain Auto-fill, SSL-Skip, Dashboard SSL-Banner
- Wizard Schritt 2: leere Domain-Felder werden beim Tippen auto-gefüllt
  (wer nur eine Domain nutzt muss sie nur einmal eingeben)
- Wizard Schritt 4: Checkbox "SSL jetzt überspringen" mit Hinweistext
- Wizard Schritt 5: skip-Status wird pro Domain angezeigt
- WizardDomains schreibt ssl_configured=0/1 in Settings
- SettingsForm: setzt ssl_configured=1 nach erfolgreichem applyDomains
- Dashboard: gelber Banner wenn ssl_configured != 1, Link zu Einstellungen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:36:11 +02:00
boban b52ea46f22 Fix: Lokal immer git describe als installierte Version verwenden
Auf APP_ENV=local wird die aktuelle Version direkt aus git describe
gelesen statt aus /var/lib/mailwolt/version — verhindert falschen
"Update verfügbar" Hinweis auf der Entwicklungsmaschine.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:02:57 +02:00
boban 291f13c034 Fix: Updates-Seite — Prüfung synchron, Log-Abstände, Checkbox-Stil
- checkForUpdates() läuft jetzt synchron (nicht im Hintergrund), damit
  das Ergebnis sofort angezeigt wird ohne Seite neu laden zu müssen
- Log-Viewer: white-space:pre-wrap + <br> entfernt durch display:block
  pro Span — kein doppelter Zeilenabstand mehr
- Auto-Scroll Checkbox nutzt jetzt mw-modal-check Klassen (passend zum Design)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 01:55:41 +02:00
boban 7bb922191f Feature: Update-System, Backup-Cron, SSL-Workflow, UI-Verbesserungen
- Update-Seite (/system/update) mit Log-Viewer, Fortschrittsbalken und goldenem Nav-Badge
- /usr/local/sbin/mailwolt-update Wrapper + backup:scheduled Cron-Command
- SSL: Checkbox entfernt, immer automatisch in Prod; local-Modus überspringt certbot mit manuellem Erzwingen-Modal
- Domain-Felder: live Validierung via updatedUiDomain/updatedMailDomain/updatedWebmailDomain
- DNS-Check in applyDomains() wiederhergestellt
- Backup-Cron: BackupScheduled Command + Laravel-Scheduler Eintrag in console.php
- /etc/cron.d/mailwolt-scheduler angelegt für schedule:run
- mailwolt-installer als regulärer Ordner (kein Submodule)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 01:23:43 +02:00
boban 8e68051fde Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-11-04 18:40:39 +01:00
boban 385b67c3c5 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-29 19:13:10 +01:00
boban 0cb7212d4b Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-29 03:54:39 +01:00
boban 659f3cb7ae Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-29 02:45:40 +01:00
boban 2ef27b5e8f Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 22:26:47 +01:00
boban d200e3e73f Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 22:22:23 +01:00
boban e23713a5c6 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 22:11:12 +01:00
boban 56e7453f8d Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 21:55:38 +01:00
boban 8790cffeb4 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 21:34:06 +01:00
boban 2ed1d1cd36 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 21:31:18 +01:00
boban 10b4872a04 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 21:28:43 +01:00
boban 3152dc94e2 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 19:51:33 +01:00
boban a5d3ac08c6 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 19:27:52 +01:00
boban 4197b61905 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 19:05:01 +01:00
boban dd645aed68 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 18:53:11 +01:00
boban 3108d521a5 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 18:07:37 +01:00
boban dd3f413e6a Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-28 17:25:02 +01:00
boban 09117fe1e9 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 19:57:15 +01:00
boban ddd96eb9f2 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 19:37:30 +01:00
boban da30b80056 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 19:05:11 +01:00
boban d76ea0b703 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 18:00:20 +01:00
boban adea3c5275 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 02:18:35 +01:00
boban 9d3ca94b87 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-27 01:50:34 +01:00
boban 520617d9b3 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 20:59:59 +01:00
boban d6f0c5d7cb Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 20:54:57 +01:00
boban 3b816e2198 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 20:44:12 +01:00
boban 8e35c617b8 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 20:33:53 +01:00
boban d65aaf9a5d Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 20:03:50 +01:00
boban a5e745ca4a Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 19:43:47 +01:00
boban cdb16fc4a5 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 19:31:52 +01:00
boban 3bf7db585a Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 19:25:52 +01:00
boban a943b42fec Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 18:19:02 +01:00
boban 7a636fb496 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 17:34:03 +01:00
boban f99790b1a5 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 17:13:25 +01:00
boban 1bf41063ae Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 17:08:35 +01:00
boban ea12b97497 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-10-26 16:46:16 +01:00