Commit Graph

87 Commits (ff6002ca0b079987c832b5dc5ac863d72c8a4c3f)

Author SHA1 Message Date
boban ff6002ca0b Feat: Einstellungen mit URL-Tabs (Allgemein, Domains & SSL, Backup, Benachrichtigungen) 2026-04-27 03:35:59 +02:00
boban 14901a40e3 Fix: displayLatest nur anzeigen wenn tatsächlich Update verfügbar (kein Stale-Cache-Anzeige) 2026-04-27 02:30:46 +02:00
boban 5dc55a9d1c Fix: Update-Erkennung via Gitea-API + Fallback-Kette verbessert
- CheckUpdates: Gitea REST-API als neuen Fallback (funktioniert ohne Auth
  bei öffentlichem Repo), git ls-remote als weiterer Fallback
- $remoteFile vor dem Fallback-Block deklariert (undefined variable fix)
- UpdateCard + UpdatePage: latNorm aus Cache normalisieren → kein doppeltes "v"
- UpdateCard: openLogs()-Methode hinzugefügt (Logs-Button im Dashboard)
- Setup-Wizard: Zeitzone automatisch aus Browser-Intl erkannt (@script)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 02:21:42 +02:00
boban d3012792bc Fix: Artisan-Aufrufe von mailwolt:* auf clubird:* umgestellt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 01:04:09 +02:00
boban bbc7cc6c34 refactor: config/mailwolt.php → config/clubird.php + Artisan Commands umbenennen
- config/mailwolt.php → config/clubird.php (Datei umbenannt)
- Alle config('mailwolt.*') → config('clubird.*') ersetzt (15 PHP + 3 Blade)
- Artisan-Signaturen: mailwolt:* → clubird:* (5 Commands)
- Artisan-Aufrufe in Jobs + Scheduler aktualisiert
- Config-Cache neu aufgebaut

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 01:00:46 +02:00
boban f375ea0215 Fix: Ein Toast mit Fehlerzusammenfassung statt kein Feedback bei Fehlern
applyDomains + syncSysmailDomain geben Fehler zurück statt Toasts zu dispatchen.
saveDomains zeigt am Ende einen Toast: grün wenn alles ok, orange mit Details bei Problemen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:14:44 +02:00
boban fa8e9e7e88 Fix: DKIM-Fehler blockiert nicht mehr Domain-Erstellung + nur 1 Toast beim Speichern
- DomainObserver: DKIM-install-Fehler wird geloggt statt Domain-Create zu blockieren
- saveDomains: nur noch 1 Toast, alle Zwischen-Toasts (Nginx, DNS, Sysmail) entfernt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:02:12 +02:00
boban 742c39f91a Fix: BASE_DOMAIN wird beim Speichern der Domains aus mail_domain abgeleitet
War auf Live-Server noch 'example.com' weshalb sysmail nie angelegt wurde.
mx.pxo.at → BASE_DOMAIN=pxo.at, MTA_SUB=mx automatisch gesetzt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:53:05 +02:00
boban 2ec10a8a81 Fix: syncSysmailDomain mit Fallback für fehlende BASE_DOMAIN + Toast bei Fehler
Leitet BASE_DOMAIN aus config → env → mail_domain-Setting ab.
Gibt Toast-Meldung aus wenn Seeder fehlschlägt, statt still zu scheitern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:51:16 +02:00
boban fb6573598d Feat: syncSysmailDomain bei saveDomains – anlegen, umbenennen oder überspringen
Beim Speichern der Domains wird geprüft ob sysmail.<BASE_DOMAIN> bereits stimmt.
Falls nicht vorhanden: anlegen. Falls Domain geändert: alte löschen + neu erstellen.
Falls bereits korrekt: nichts tun.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:46:17 +02:00
boban 6bb2d09621 Fix: system_notify_email Accessor statt nicht-existenter notifyEmail()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:41:37 +02:00
boban cdfdcc0756 Fix: Benachrichtigungs-Defaults – User-Email + sinnvoller Absendername
Absendername-Default: '{Instanzname} Benachrichtigung'.
Admin-Email-Default: Login-Email des eingeloggten Users (notifyEmail()).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:40:45 +02:00
boban c6d6798898 Feat: Benachrichtigungs-Einstellungen + sysmail.BASE_DOMAIN zurückgesetzt
- Absendername und Admin-E-Mail konfigurierbar in Einstellungen
- MAIL_FROM_NAME wird automatisch in .env synchronisiert
- Sysmail-Domain wieder sysmail.<BASE_DOMAIN> (nicht MTA-FQDN)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:37:55 +02:00
boban 2c82555235 Fix: SystemDomainSeeder läuft beim Installer-Abschluss, nicht in den Settings
sysmail.<MTA_FQDN> wird jetzt automatisch beim Ende einer erfolgreichen Installation
angelegt – nicht nachträglich beim Speichern der Domain-Einstellungen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:27:52 +02:00
boban eb17d056b7 Fix: Sysmail-Domain basiert auf Mail-Domain (sysmail.<MTA_FQDN>)
Statt sysmail.<BASE_DOMAIN> wird jetzt sysmail.<MTA_SUB>.<BASE_DOMAIN> angelegt
(z.B. sysmail.mx.pxo.at statt sysmail.pxo.at) – Base-Domain des Users bleibt unangetastet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:25:35 +02:00
boban 96477ede1c Feat: SystemDomainSeeder wird bei saveDomains ausgeführt wenn sysmail fehlt
Beim Speichern der Server-Domains in den Einstellungen wird automatisch die
sysmail-Domain (sysmail.<BASE_DOMAIN>) mit DKIM, SPF, DMARC und no-reply Postfach
angelegt, sofern sie noch nicht existiert. Seeder nutzt updateOrCreate für Postfach.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:20:44 +02:00
boban fd8d81fecb Fix: Update-Modal öffnet immer nach Update + optimize nach Post-Actions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:41:37 +02:00
boban 9673e717d1 Fix: UpdateCard-Status korrekt + Dashboard-Card zeigt neue Version an
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:24:39 +02:00
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