Commit Graph

119 Commits (2fb66df19ef1a4f7d3ec150c9c22547c2a644029)

Author SHA1 Message Date
boban 2fb66df19e Fix: Update-Modal – nur Ping-Animation und Slider entfernt, Basis v406 2026-04-27 03:25:57 +02:00
boban f756789cc4 Fix: Update-Modal ohne Slider und Ping-Dots, Spinner im Header 2026-04-27 03:18:22 +02:00
boban 32cf27bcd2 Fix: Update-Modal ohne Alpine.js – verhindert leeres Modal bei laufendem Update 2026-04-27 03:17:47 +02:00
boban 74600185ba Redesign: Update-Modal mit CluBird-Icon, Progress-Bar und besserem Log-Bereich 2026-04-27 03:14:28 +02:00
boban 93bcb56605 Rename: WoltGuard → CluGuard in UI-Labels 2026-04-27 02:48:48 +02:00
boban 20c9100226 Fix: doppeltes "v" in Dashboard-Versions-Anzeige
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 02:22:14 +02:00
boban 23d6d9cb46 Design: Update-Card mit CluBird Logo + mw-* Farbsystem
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 01:04:40 +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 597773123f feat: Rebranding Mailwolt → CluBird
- SVG-Dateien erstellt: icon, icon-sm, favicon, logo-dark, logo-sidebar
- Sidebar: CluBird-Vogellogo + Wordmark mit Indigo-Akzent
- Alle sichtbaren "Mailwolt"-Texte in Blade-Dateien auf CluBird geändert
- Favicon-Link in dvx.blade.php ergänzt
- CSS-Klassen (.mw-*), config/mailwolt.php und Sudo-Scripts bleiben unverändert

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:44:42 +02:00
boban afad3c3471 Fix: Gap zwischen System-Domain und leerem Domains-State
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 00:35:57 +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 496912f5ca Fix: Webmail-Icon bei System-Domain entfernt
System-Domain ist nur zum Versenden (no-reply), Webmail-Zugriff macht dort keinen Sinn.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 23:31:55 +02:00
boban a2ba9a7c03 UI: Update-Seite überarbeitet – sauberes mbx-Design, eine Karte
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:52:34 +02:00
boban ea37abacf8 Fix: Livewire multiple root elements – style-Tag in Root-div verschoben
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:50:42 +02:00
boban 32a3b51b2a UI: Update-Seite im korrekten mw-Design – 2-spaltig, responsiv
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:50:06 +02:00
boban 0375aed2ce UI: Update-Seite komplett neu gestaltet – responsiv, mobile-first
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 22:46:53 +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 ce66a84c8d Fix: ClamAV wird beim Update automatisch installiert, UI nur Ein/Aus
ensure_system() installiert clamav-daemon falls nicht vorhanden,
deaktiviert aber den Dienst. User sieht nur noch Ein/Ausschalten.
Install-Button, $installed-Property und install()-Methode entfernt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:19:26 +02:00
boban 5f627dcb0e Fix: ClamAV enable mit --no-block + kein Queue-Job nötig
systemctl start --no-block kehrt sofort zurück, systemd startet ClamAV
im Hintergrund. runCmd('enable') direkt aufrufen statt Queue-Job.
wire:poll.keep-alive verhindert payload-Fehler in der Browser-Console.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:15:18 +02:00
boban 2331ef74f6 Feat: ClamAV Aktivieren mit Spinner + Sekundentimer bis ClamAV läuft
wire:poll.3s prüft serviceActive() nach Klick. Zeigt laufenden Spinner
mit Sekundenanzeige (0s, 3s, 6s…) bis ClamAV aktiv ist, dann Erfolgsmeldung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:08:46 +02:00
boban d0e1d5613c Fix: ClamAV – kein blockierendes Overlay mehr, Spinner nur auf Klick
Vollflächiges wire:loading-Overlay entfernt das beim Seitenaufruf
blockierte. wire:loading.class animate-spin nur noch auf wire:target=refresh
beschränkt damit kein Spinner beim Laden erscheint.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:56:59 +02:00
boban 673e9ec1df Fix: ClamAV enable() – kein Spinner mehr, einfache Textmeldung
$starting-Property, pollStatus() und wire:poll entfernt.
enable() startet ClamAV im Hintergrund und zeigt nur eine
Info-Meldung an – kein dauerhafter Spinner.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:53:35 +02:00
boban 0fc6ee81d6 Fix: wire:poll nur innerhalb @if($starting) – kein dauerhafter Poll
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:49:06 +02:00
boban 79b1eeb93c Fix: ClamAV enable non-blocking – Hintergrund-Start + Poll alle 3s
- enable() startet Dienst via nohup im Hintergrund (kein Request-Timeout)
- $starting=true → wire:poll.3s ruft pollStatus() auf
- Overlay zeigt "ClamAV wird gestartet… lädt Viren-DB / bis 60s"
- pollStatus() erkennt wenn Dienst läuft → Overlay weg, Erfolg-Banner

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:44:56 +02:00
boban dc5d8582e1 Fix: ClamAV Feedback – Loading-Overlay + Erfolg/Fehler-Banner inline
- Loading-Overlay über Status-Karte beim Aktivieren/Deaktivieren/Installieren
- $lastSuccess Property für grünen Erfolg-Banner (kein Toast nötig)
- runCmd() helper mit Log für Debugging
- Fehler-Text white-space:pre-wrap für mehrzeilige Ausgaben

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:42:45 +02:00
boban 6fa77f9f9b Feature: ClamAV Installation direkt aus der UI + install-Befehl im Wrapper
- mailwolt-clamav: install) apt-get install clamav clamav-daemon clamav-freshclam
- ClamavManager: install() Methode + $installing State
- Blade: Installieren-Button wenn nicht installiert (statt nur Text-Hinweis)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:32:30 +02:00
boban 7b1274f349 Fix: ClamAV Button-Styles korrigiert + mbx-btn-danger CSS-Klasse
- Aktualisieren + Jetzt: mbx-act-btn (icon-only 28px) → mbx-btn-mute (text+icon)
- Deaktivieren: mbx-act-danger (kein base-style) → mbx-btn-danger (neue Klasse)
- mbx-btn-danger: transparent mit rotem Border/Text, flex align-items:center

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 20:03:10 +02:00
boban cbdab12c19 UI: ClamAV-Seite Layout verbessert – Sidebar mit RAM-Hinweis + Info
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:59:14 +02:00
boban b107e9a580 Feature: ClamAV-Verwaltung in Sicherheit-Sidebar
- Neue Seite /security/clamav: Status, Aktivieren/Deaktivieren,
  Signatur-Update, RAM-Hinweis, Info-Box
- Optionale Dienste (ClamAV) im Dashboard nur sichtbar wenn aktiv
- mailwolt-clamav sbin-Wrapper + sudoers-Regel in ensure_system

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 19:21:37 +02:00
boban 1b79454df5 Fix: Blade-Syntaxfehler in SSL-Seite (@if/@elseif/@endif inline)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:22:44 +02:00
boban 38d6fdba6f Fix: SSL-Seite zweispaltig (Tabelle links, Einrichten rechts) + Settings kompakt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:20:28 +02:00
boban 871d69cc2d Fix: Korrekte Route-Namen ui.security.ssl + ui.system.settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:09:25 +02:00
boban f12c412bbe Fix: Route-Name security.ssl + SSL-Seite zweispaltig
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:07:11 +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 d60d228012 Fix: mx-Domain bekommt LE-Zertifikat + Postfix/Dovecot werden konfiguriert
- mailwolt-apply-domains: MAIL_HOST wird in ACME-Challenge-Block aufgenommen,
  certbot wird auch für die Mail-Domain ausgeführt, Postfix + Dovecot erhalten
  danach automatisch das neue Zertifikat
- SslCertificatesTable: certbot-Ausgabe korrekt geparst (Einrückung mit Leerzeichen)
- settings-form: "kein Zertifikat nötig" entfernt (Mail-Domain braucht Zertifikat)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:04:02 +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 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 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 5158d7b3b3 Fix: SVG-Pfade (fehlendes M) + Vite-HMR-Proxy in nginx UI-Vhost
SVG paths in domain-list und installer-page hatten kein führendes 'M' im
d-Attribut — Browser-Fehler behoben. Nginx UI-Vhost bekommt Proxy-Locations
für /@vite/, /node_modules/, /resources/ und WebSocket /vite-hmr (Port 5173)
damit npm run dev durch nginx funktioniert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 03:12:08 +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 35fe7c2c6f Feature: perPage als URL-Parameter + kompaktes Pagination-Fenster
- perPage (#[Url as:'limit']) bleibt nach Reload erhalten (25/50/100)
- Pagination zeigt max 5 Seiten (±2 um aktuelle) + 1/letzte mit ...
- Per-Seite-Select in Quarantäne und Queue eingefügt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:16:17 +02:00
boban 8699b9d991 Refactor: Pagination mit Livewire WithPagination + LengthAwarePaginator
- WithPagination Trait + LengthAwarePaginator für Array-Daten
- $messages->links() statt manueller Pagination-Blöcke
- Livewire tailwind.blade.php überschrieben mit mq-pagination/mq-pag-btn Klassen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:09:58 +02:00
boban bc66870681 Feature: Pagination für Quarantäne und Mail-Queue (25 pro Seite)
- Quarantäne und Queue zeigen je 25 Einträge pro Seite
- Pagination-Bar mit Seitenanzeige (X-Y von Z) und Blätter-Buttons
- Seite wird bei Filter- oder Suchwechsel auf 1 zurückgesetzt
- Quarantäne: rows-Select entfernt (API holt intern 500, UI paginiert)
- CSS-Klassen mq-pagination, mq-pag-btn passend zum Dark-Design

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:06:14 +02:00
boban ad60bd61fe Fix: Update-Prüfung als www-data (git safe.directory), Toggle-Switch statt Checkbox
- CheckUpdates: git safe.directory vor fetch setzen damit www-data-Ausführung funktioniert
- Auto-Scroll: nativen Checkbox durch CSS Toggle-Switch ersetzt (passt zum Dark-Design)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 02:00:35 +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 af369acbf6 Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-11-08 12:57:05 +01:00
boban 8e68051fde Fix: Mailbox Stats über Dovecot mit config/mailpool.php 2025-11-04 18:40:39 +01:00