From d37ef8ffee6b24ca07246120d04d0967bfbfab82 Mon Sep 17 00:00:00 2001 From: boban Date: Sun, 19 Oct 2025 22:57:21 +0200 Subject: [PATCH] =?UTF-8?q?Rechtebechebung=20f=C3=BCr=20User=20mit=20Sudor?= =?UTF-8?q?echte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Livewire/Ui/Domain/DkimStatus.php | 55 +++++++++++++++++++-------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/app/Livewire/Ui/Domain/DkimStatus.php b/app/Livewire/Ui/Domain/DkimStatus.php index b1c2c92..07e8552 100644 --- a/app/Livewire/Ui/Domain/DkimStatus.php +++ b/app/Livewire/Ui/Domain/DkimStatus.php @@ -42,32 +42,40 @@ class DkimStatus extends Component } /** Button: (Re)generieren → Service kümmert sich um Helper & Reload */ +// #[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(DkimService::class); +// $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']); // -// // 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.' -// ); +// $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; // } - -// #[On('dkim:regenerate')] public function regenerate(?string $selector = null): void { $selector = $selector @@ -80,21 +88,36 @@ class DkimStatus extends Component ]); try { - /** @var DkimService $svc */ + /** @var \App\Services\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'); + // 1) Keymaterial in storage erzeugen/aktualisieren + $res = $svc->generateForDomain($this->domain, 2048, $selector); + $priv = $res['priv_path'] + ?? storage_path("app/private/dkim/{$this->domain->domain}/{$selector}.private"); + $txt = storage_path("app/private/dkim/{$this->domain->domain}/{$selector}.txt"); - // sicherheitshalber - \Illuminate\Support\Facades\Process::run(['sudo','-n','/usr/bin/systemctl','reload','opendkim']); + if (!is_readable($txt) && !empty($res['dns_txt'])) { + file_put_contents($txt, $res['dns_txt']); + } + + // 2) In OpenDKIM installieren (Key kopieren + Tabellen pflegen) + $proc = Process::run([ + 'sudo','-n','/usr/local/sbin/mailwolt-install-dkim', + $this->domain->domain, $selector, $priv, $txt + ]); + if (!$proc->successful()) { + throw new \RuntimeException("install-dkim failed: ".$proc->errorOutput()); + } + + // 3) OpenDKIM neu laden + 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()]); + Log::error('DKIM regenerate() failed', ['ex'=>$e->getMessage()]); $this->dispatch('toast', type: 'error', message: 'DKIM Fehler: '.$e->getMessage()); }