75 lines
2.4 KiB
PHP
75 lines
2.4 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Ui\Domain;
|
||
|
||
use App\Models\Domain;
|
||
use App\Services\DkimService;
|
||
use Illuminate\Contracts\View\View;
|
||
use Illuminate\Support\Facades\Process;
|
||
use Livewire\Component;
|
||
|
||
class DkimStatus extends Component
|
||
{
|
||
public Domain $domain;
|
||
public ?string $selector = null;
|
||
|
||
public function mount(Domain $domain, ?string $selector = null): void
|
||
{
|
||
$this->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'));
|
||
}
|
||
}
|