Rechtebechebung für User mit Sudorechte

main
boban 2025-10-19 18:35:39 +02:00
parent 450247d163
commit 98ccb68a34
3 changed files with 54 additions and 18 deletions

View File

@ -5,7 +5,9 @@ namespace App\Livewire\Ui\Domain;
use App\Models\Domain;
use App\Services\DkimService;
use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Process;
use Livewire\Attributes\On;
use Livewire\Component;
class DkimStatus extends Component
@ -40,24 +42,59 @@ class DkimStatus extends Component
}
/** 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(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());
}

View File

@ -6,13 +6,12 @@
</div>
@if(!$dkimOk)
<button wire:click="regenerate"
wire:loading.attr="disabled"
class="inline-flex items-center gap-2 rounded-lg px-3 py-1.5 text-xs font-medium
border border-slate-600/40 bg-slate-800/40 hover:bg-slate-800
disabled:opacity-50">
<i class="ph-bold ph-arrow-clockwise text-base"
wire:loading.class="animate-spin"></i>
<button
wire:click="regenerate('{{ $selector ?? ($domain->dkimKeys()->where('is_active', true)->latest()->value('selector') ?? 'mwl1') }}')"
wire:loading.attr="disabled"
class="inline-flex items-center gap-2 rounded-lg px-3 py-1.5 text-xs font-medium
border border-slate-600/40 bg-slate-800/40 hover:bg-slate-800 disabled:opacity-50">
<i class="ph-bold ph-arrow-clockwise text-sm" wire:loading.class="animate-spin"></i>
<span wire:loading.remove>DKIM reparieren</span>
<span wire:loading>Repariere…</span>
</button>

View File

@ -27,7 +27,7 @@
@if($systemDomain)
<div class="rounded-xl border border-white/10 bg-white/[0.04] px-3 py-3">
<div class="grid grid-cols-1 md:grid-cols-4 items-center gap-3">
<div class="grid grid-cols-1 #md:grid-cols-4 items-center gap-3">
<div class=" flex items-center gap-1 text-white/90 font-medium truncate">
<span class="relative flex size-2.5 mx-1">
@if($systemDomain->is_active)
@ -37,8 +37,8 @@
<span class="relative inline-flex size-2.5 rounded-full bg-amber-400/90 ring-2 ring-amber-200/20"></span>
@endif
</span>
{{ $systemDomain->domain }}
<livewire:ui.domain.dkim-status :domain="$systemDomain" class="ml-2"/>
<div>{{ $systemDomain->domain }} </div>
<div><livewire:ui.domain.dkim-status :domain="$systemDomain" :wire:key="'dkim-'.$systemDomain->id" class="ml-2"/></div>
</div>
@ -106,7 +106,7 @@
</span>
</span>
{{ $d->domain }}
<livewire:ui.domain.dkim-status :domain="$d" class="ml-2"/>
<livewire:ui.domain.dkim-status :domain="$d" :wire:key="'dkim-'.$d->id" class="ml-2"/>
<div class="mt-1 flex items-center gap-1.5">
{{-- Zähler-Badges --}}