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; // } // #[On('dkim:regenerate')] public function regenerate(?string $selector = null): void { $selector = $selector ?: ($this->selector ?: (string) config('mailpool.defaults.dkim_selector', 'mwl1')); Log::info('DKIM regenerate() CLICKED', [ 'domain' => $this->domain->domain, 'selector' => $selector, 'user' => auth()->id(), ]); try { /** @var DkimService $svc */ $svc = app(\App\Services\DkimService::class); Log::info('DKIM regenerate() calling service.generateForDomain'); $svc->generateForDomain($this->domain, 2048, $selector); Log::info('DKIM regenerate() service call returned OK'); // sicherheitshalber \Illuminate\Support\Facades\Process::run(['sudo','-n','/usr/bin/systemctl','reload','opendkim']); $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) { Log::error('DKIM regenerate() failed', ['ex' => $e->getMessage(), 'trace' => $e->getTraceAsString()]); $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')); } }