199 lines
14 KiB
PHP
199 lines
14 KiB
PHP
<x-slot:breadcrumbParent>Sicherheit</x-slot:breadcrumbParent>
|
||
<x-slot:breadcrumb>Virenschutz</x-slot:breadcrumb>
|
||
|
||
<div>
|
||
|
||
<div class="mbx-page-header">
|
||
<div class="mbx-page-title">
|
||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none">
|
||
<path d="M8 1.5C8 1.5 3 3.5 3 7.5v3.5l5 2.5 5-2.5V7.5C13 3.5 8 1.5 8 1.5Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/>
|
||
<path d="M5.5 8l1.5 1.5L10 6" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>
|
||
</svg>
|
||
Virenschutz (ClamAV)
|
||
</div>
|
||
<div class="mbx-page-actions">
|
||
<button wire:click="refresh" wire:loading.attr="disabled" wire:target="refresh" class="mbx-btn-mute">
|
||
<svg width="12" height="12" viewBox="0 0 14 14" fill="none" wire:loading.class="animate-spin" wire:target="refresh"><path d="M12 7A5 5 0 1 1 7 2" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/><path d="M7 2l2-2v4H5" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
Aktualisieren
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
@if($lastSuccess)
|
||
<div style="margin-bottom:16px;padding:10px 14px;background:rgba(52,211,153,.08);border:1px solid rgba(52,211,153,.25);border-radius:8px;display:flex;align-items:center;gap:8px">
|
||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" style="color:#34d399;flex-shrink:0"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.3"/><path d="M4.5 7l2 2 3-3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
<span style="font-size:12.5px;color:#6ee7b7;font-weight:500">{{ $lastSuccess }}</span>
|
||
</div>
|
||
@endif
|
||
@if($lastError)
|
||
<div style="margin-bottom:16px;padding:10px 14px;background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.25);border-radius:8px;display:flex;align-items:center;gap:8px">
|
||
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" style="color:#ef4444;flex-shrink:0"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.3"/><path d="M7 4v3.5" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/><circle cx="7" cy="10" r=".6" fill="currentColor"/></svg>
|
||
<span style="font-size:12.5px;color:#fca5a5;white-space:pre-wrap">{{ $lastError }}</span>
|
||
</div>
|
||
@endif
|
||
|
||
<div class="sec-layout">
|
||
|
||
{{-- ═══ Main ═══ --}}
|
||
<div style="min-width:0;display:flex;flex-direction:column;gap:16px">
|
||
|
||
{{-- Status-Karte --}}
|
||
<div class="mbx-section">
|
||
|
||
<div class="mbx-domain-head">
|
||
<div class="mbx-domain-info">
|
||
<span class="mbx-badge-mute">Status</span>
|
||
</div>
|
||
</div>
|
||
<div style="padding:16px 18px">
|
||
|
||
@if(!$installed)
|
||
<div style="display:flex;flex-direction:column;gap:14px">
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:12px 14px;background:var(--mw-bg4);border:1px solid var(--mw-b2);border-radius:8px">
|
||
<div style="display:flex;align-items:center;gap:10px">
|
||
<div style="width:8px;height:8px;border-radius:50%;background:#6b7280;flex-shrink:0"></div>
|
||
<div>
|
||
<div style="font-size:13px;font-weight:500;color:var(--mw-t2)">ClamAV nicht installiert</div>
|
||
<div style="font-size:11.5px;color:var(--mw-t4);margin-top:2px">Paket <code style="font-size:11px;background:var(--mw-bg3);padding:1px 5px;border-radius:4px">clamav clamav-daemon</code> fehlt.</div>
|
||
</div>
|
||
</div>
|
||
<button wire:click="install" wire:loading.attr="disabled" wire:target="install"
|
||
class="mbx-btn-primary">
|
||
<svg width="12" height="12" viewBox="0 0 14 14" fill="none" wire:loading.class="animate-spin" wire:target="install"><path d="M7 1v8M4 6l3 3 3-3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 11h10" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/></svg>
|
||
<span wire:loading.remove wire:target="install">Installieren</span>
|
||
<span wire:loading wire:target="install">Installiert… (ca. 1 Min.)</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
@else
|
||
<div style="display:flex;flex-direction:column;gap:16px">
|
||
|
||
{{-- Status-Zeile --}}
|
||
<div style="display:flex;align-items:center;justify-content:space-between;padding:12px 14px;background:var(--mw-bg4);border:1px solid var(--mw-b2);border-radius:8px">
|
||
<div style="display:flex;align-items:center;gap:10px">
|
||
@if($running)
|
||
<div style="width:8px;height:8px;border-radius:50%;background:#34d399;box-shadow:0 0 6px rgba(52,211,153,.4);flex-shrink:0"></div>
|
||
<div>
|
||
<div style="font-size:13px;font-weight:500;color:var(--mw-t1)">ClamAV läuft</div>
|
||
<div style="font-size:11.5px;color:var(--mw-t4);margin-top:1px">
|
||
Aktiv{{ $enabled ? ', Autostart ein' : '' }}
|
||
@if($ramMb) · {{ $ramMb }} MB RAM @endif
|
||
</div>
|
||
</div>
|
||
@else
|
||
<div style="width:8px;height:8px;border-radius:50%;background:#6b7280;flex-shrink:0"></div>
|
||
<div>
|
||
<div style="font-size:13px;font-weight:500;color:var(--mw-t2)">ClamAV inaktiv</div>
|
||
<div style="font-size:11.5px;color:var(--mw-t4);margin-top:1px">Installiert, aber nicht aktiv{{ $enabled ? '' : ' · Autostart aus' }}</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
|
||
<div style="display:flex;gap:8px;align-items:center">
|
||
@if($starting)
|
||
<div wire:poll.3s.keep-alive="pollStatus" style="display:flex;align-items:center;gap:8px;padding:6px 12px;background:rgba(167,139,250,.08);border:1px solid rgba(167,139,250,.25);border-radius:8px">
|
||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" style="color:#a78bfa;animation:spin 1s linear infinite;flex-shrink:0"><path d="M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
|
||
<span style="font-size:12px;color:#c4b5fd;font-weight:500">Wird gestartet…</span>
|
||
<span style="font-size:11px;color:rgba(196,181,253,.5)">{{ $startSecs }}s</span>
|
||
</div>
|
||
@elseif($running)
|
||
<button wire:click="disable" wire:loading.attr="disabled" wire:target="disable"
|
||
class="mbx-btn-danger"
|
||
onclick="return confirm('ClamAV wirklich stoppen und deaktivieren?')">
|
||
<svg width="12" height="12" viewBox="0 0 14 14" fill="none"><rect x="2" y="2" width="10" height="10" rx="2" stroke="currentColor" stroke-width="1.3"/></svg>
|
||
<span wire:loading.remove wire:target="disable">Deaktivieren</span>
|
||
<span wire:loading wire:target="disable">Bitte warten…</span>
|
||
</button>
|
||
@else
|
||
<button wire:click="enable" wire:loading.attr="disabled" wire:target="enable"
|
||
class="mbx-btn-primary">
|
||
<svg width="12" height="12" viewBox="0 0 14 14" fill="none"><path d="M7 2v10M2 7h10" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/></svg>
|
||
<span wire:loading.remove wire:target="enable">Aktivieren & starten</span>
|
||
<span wire:loading wire:target="enable">Startet…</span>
|
||
</button>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
|
||
{{-- Signaturen --}}
|
||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px">
|
||
<div style="padding:10px 14px;background:var(--mw-bg4);border:1px solid var(--mw-b2);border-radius:8px">
|
||
<div style="font-size:11px;color:var(--mw-t4);margin-bottom:3px">Signatur-Datenbank</div>
|
||
<div style="font-size:13px;font-weight:500;color:var(--mw-t1)">{{ $dbDate }}</div>
|
||
@if($dbVersion !== '—')<div style="font-size:11.5px;color:var(--mw-t4);margin-top:1px">Version {{ $dbVersion }}</div>@endif
|
||
</div>
|
||
<div style="padding:10px 14px;background:var(--mw-bg4);border:1px solid var(--mw-b2);border-radius:8px;display:flex;align-items:center;justify-content:space-between">
|
||
<div>
|
||
<div style="font-size:11px;color:var(--mw-t4);margin-bottom:3px">Signaturen aktualisieren</div>
|
||
<div style="font-size:12px;color:var(--mw-t3)">Läuft automatisch täglich</div>
|
||
</div>
|
||
<button wire:click="updateDb" wire:loading.attr="disabled" wire:target="updateDb" class="mbx-btn-mute" style="flex-shrink:0">
|
||
<svg width="11" height="11" viewBox="0 0 14 14" fill="none" wire:loading.class="animate-spin" wire:target="updateDb"><path d="M12 7A5 5 0 1 1 7 2" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/><path d="M7 2l2-2v4H5" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||
<span wire:loading.remove wire:target="updateDb">Jetzt</span>
|
||
<span wire:loading wire:target="updateDb">…</span>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
@endif
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
{{-- ═══ Sidebar ═══ --}}
|
||
<div style="display:flex;flex-direction:column;gap:12px">
|
||
|
||
{{-- RAM-Hinweis --}}
|
||
<div style="padding:12px 14px;background:rgba(245,158,11,.07);border:1px solid rgba(245,158,11,.25);border-radius:10px;display:flex;gap:10px;align-items:flex-start">
|
||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" style="color:#f59e0b;flex-shrink:0;margin-top:1px"><path d="M8 1.5L13.5 12H2.5L8 1.5Z" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round"/><path d="M8 6v3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/><circle cx="8" cy="10.5" r=".6" fill="currentColor"/></svg>
|
||
<div>
|
||
<div style="font-size:12px;font-weight:600;color:#fcd34d;margin-bottom:3px">Hoher RAM-Verbrauch</div>
|
||
<div style="font-size:11.5px;color:rgba(253,230,138,.7);line-height:1.5">
|
||
ClamAV lädt die komplette Viren-Datenbank (~500 MB) in den Arbeitsspeicher.
|
||
Empfohlen auf Servern mit mindestens 2 GB RAM.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
{{-- Info --}}
|
||
<div class="mbx-section">
|
||
<div class="mbx-domain-head">
|
||
<div class="mbx-domain-info">
|
||
<span class="mbx-badge-mute">Info</span>
|
||
</div>
|
||
</div>
|
||
<div style="padding:14px 16px;display:flex;flex-direction:column;gap:8px">
|
||
<div style="font-size:12px;color:var(--mw-t3);line-height:1.6">
|
||
ClamAV prüft in Kombination mit Rspamd eingehende E-Mails auf Schadsoftware.
|
||
Infizierte Anhänge werden abgewiesen oder in Quarantäne verschoben.
|
||
</div>
|
||
<div style="display:flex;flex-direction:column;gap:6px;margin-top:2px">
|
||
<div style="display:flex;justify-content:space-between;font-size:12px;padding:6px 0;border-bottom:1px solid var(--mw-b1)">
|
||
<span style="color:var(--mw-t4)">Empfohlen bei</span>
|
||
<span style="color:var(--mw-t2);font-weight:500">≥ 2 GB RAM</span>
|
||
</div>
|
||
<div style="display:flex;justify-content:space-between;font-size:12px;padding:6px 0;border-bottom:1px solid var(--mw-b1)">
|
||
<span style="color:var(--mw-t4)">RAM-Verbrauch</span>
|
||
<span style="color:var(--mw-t2);font-weight:500">~500–700 MB</span>
|
||
</div>
|
||
<div style="display:flex;justify-content:space-between;font-size:12px;padding:6px 0;border-bottom:1px solid var(--mw-b1)">
|
||
<span style="color:var(--mw-t4)">Integration</span>
|
||
<span style="color:var(--mw-t2);font-weight:500">Rspamd → Milter</span>
|
||
</div>
|
||
<div style="display:flex;justify-content:space-between;font-size:12px;padding:6px 0">
|
||
<span style="color:var(--mw-t4)">Signaturen</span>
|
||
<span style="color:var(--mw-t2);font-weight:500">Täglich automatisch</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|