domain = $domain; // aktiver Selector aus DB, sonst Default aus config $this->selector = $selector ?: optional( $domain->dkimKeys()->where('is_active', true)->latest()->first() )->selector ?: (string) config('mailpool.defaults.dkim_selector', 'mwl1'); } /** * Minimalcheck: ist das Keyfile vorhanden & >0 Bytes? * Nutzt sudo /usr/bin/test, damit www-data auch bei 0600/0750 prüfen kann. */ protected function isDkimReady(string $domain, string $selector): bool { $key = "/etc/opendkim/keys/{$domain}/{$selector}.private"; // -s => existiert und Größe > 0 $res = Process::run(['sudo','-n','/usr/bin/test','-s',$key]); return $res->successful(); } /** Button: (Re)generieren → Service kümmert sich um Helper & Reload */ public function regenerate(?string $selector = null): void { $selector = $selector ?: ($this->selector ?: (string) config('mailpool.defaults.dkim_selector', 'mwl1')); try { /** @var DkimService $svc */ $svc = app(DkimService::class); $svc->generateForDomain($this->domain, 2048, $selector); // Status nach der Erzeugung erneut prüfen $ok = $this->isDkimReady($this->domain->domain, $selector); $this->dispatch('toast', type: $ok ? 'success' : 'warning', message: $ok ? 'DKIM ist aktiv.' : 'DKIM generiert – OpenDKIM prüfen.' ); } catch (\Throwable $e) { $this->dispatch('toast', type: 'error', message: 'DKIM Fehler: '.$e->getMessage()); } $this->selector = $selector; } public function render(): View { $sel = $this->selector ?: (string) config('mailpool.defaults.dkim_selector', 'mwl1'); $dkimOk = $this->isDkimReady($this->domain->domain, $sel); return view('livewire.ui.domain.dkim-status', compact('dkimOk')); } }