From fb6573598d18644b13cb8c7b2e607c011f7b29df Mon Sep 17 00:00:00 2001 From: boban Date: Sun, 26 Apr 2026 23:46:17 +0200 Subject: [PATCH] =?UTF-8?q?Feat:=20syncSysmailDomain=20bei=20saveDomains?= =?UTF-8?q?=20=E2=80=93=20anlegen,=20umbenennen=20oder=20=C3=BCberspringen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim Speichern der Domains wird geprüft ob sysmail. 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 --- app/Livewire/Ui/System/SettingsForm.php | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/app/Livewire/Ui/System/SettingsForm.php b/app/Livewire/Ui/System/SettingsForm.php index 8fd461c..d54b5cc 100644 --- a/app/Livewire/Ui/System/SettingsForm.php +++ b/app/Livewire/Ui/System/SettingsForm.php @@ -216,6 +216,8 @@ class SettingsForm extends Component $this->applyDomains(false); } + $this->syncSysmailDomain(); + $this->loadSslStatus(); $this->dispatch('toast', type: 'done', badge: 'Domains', @@ -223,6 +225,39 @@ class SettingsForm extends Component text: 'Konfiguration wurde übernommen.', duration: 4000); } + private function syncSysmailDomain(): void + { + $platformBase = strtolower(config('mailpool.platform_zone', env('BASE_DOMAIN', ''))); + if (!$platformBase || $platformBase === 'example.com') return; + + $systemSub = strtolower(config('mailpool.platform_system_zone', 'sysmail')); + $expectedFqdn = "{$systemSub}.{$platformBase}"; + + // Bestehende System-Domain suchen (is_system=true, nicht is_server) + $existing = \App\Models\Domain::where('is_system', true) + ->where(fn($q) => $q->whereNull('is_server')->orWhere('is_server', false)) + ->first(); + + // Alles passt → nichts tun + if ($existing && $existing->domain === $expectedFqdn) return; + + // Alte System-Domain + Postfächer löschen falls Domain geändert + if ($existing && $existing->domain !== $expectedFqdn) { + \App\Models\MailUser::where('domain_id', $existing->id)->forceDelete(); + $existing->forceDelete(); + } + + // Neu anlegen via Seeder + try { + Artisan::call('db:seed', [ + '--class' => 'Database\\Seeders\\SystemDomainSeeder', + '--force' => true, + ]); + } catch (\Throwable $e) { + \Illuminate\Support\Facades\Log::error('SystemDomainSeeder failed', ['error' => $e->getMessage()]); + } + } + private function cleanDomain(string $value): string { $value = trim($value);