117 lines
6.9 KiB
PHP
117 lines
6.9 KiB
PHP
<x-slot:breadcrumbParent>Sicherheit</x-slot:breadcrumbParent>
|
|
<x-slot:breadcrumb>SSL/TLS</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">
|
|
<rect x="1.5" y="6" width="13" height="8.5" rx="1.8" stroke="currentColor" stroke-width="1.3"/>
|
|
<path d="M5 6V4.5a3 3 0 0 1 6 0V6" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>
|
|
<circle cx="8" cy="10.5" r="1" fill="currentColor"/>
|
|
</svg>
|
|
SSL/TLS
|
|
@php $realCerts = array_filter($certs, fn($c) => !isset($c['_error'])); @endphp
|
|
<span class="mbx-total-badge">{{ count($realCerts) }}</span>
|
|
</div>
|
|
<div class="mbx-page-actions">
|
|
<button wire:click="refresh" class="mbx-act-btn" title="Aktualisieren">
|
|
<svg width="13" height="13" viewBox="0 0 14 14" fill="none">
|
|
<path d="M12 7A5 5 0 1 1 9 2.5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/>
|
|
<path d="M9 .5l2.5 2L9 4.5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mbx-sections">
|
|
<div class="mbx-section">
|
|
<div class="mbx-domain-head">
|
|
<div class="mbx-domain-info">
|
|
<span class="mbx-badge-mute">Let's Encrypt Zertifikate</span>
|
|
</div>
|
|
</div>
|
|
|
|
@php $unavailable = !empty($certs) && isset($certs[0]['_error']); @endphp
|
|
@if($unavailable)
|
|
<div style="padding:24px 16px;text-align:center">
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" style="color:rgba(239,68,68,.5);margin:0 auto 8px;display:block">
|
|
<rect x="2" y="8" width="20" height="13" rx="2.5" stroke="currentColor" stroke-width="1.4"/>
|
|
<path d="M7 8V6a5 5 0 0 1 10 0v2" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>
|
|
</svg>
|
|
<div style="font-size:12.5px;color:var(--mw-t3)">certbot nicht erreichbar</div>
|
|
<div style="font-size:11px;color:var(--mw-t4);margin-top:4px">sudo-Recht für <code style="font-size:10px">/usr/bin/certbot</code> fehlt oder certbot nicht installiert</div>
|
|
</div>
|
|
@elseif(empty($realCerts))
|
|
<div style="padding:28px 16px;text-align:center">
|
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" style="color:var(--mw-t4);margin:0 auto 10px;display:block">
|
|
<rect x="2" y="8" width="20" height="13" rx="2.5" stroke="currentColor" stroke-width="1.4"/>
|
|
<path d="M7 8V6a5 5 0 0 1 10 0v2" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>
|
|
</svg>
|
|
<div style="font-size:12.5px;color:var(--mw-t3)">Noch keine Zertifikate ausgestellt</div>
|
|
<div style="font-size:11px;color:var(--mw-t4);margin-top:4px">certbot ist installiert — führe <code style="font-size:10px">certbot certonly</code> aus um ein Zertifikat zu erstellen</div>
|
|
</div>
|
|
@else
|
|
<div class="mbx-table-wrap">
|
|
<table class="mbx-table">
|
|
<thead>
|
|
<tr>
|
|
<th class="mbx-th">Name</th>
|
|
<th class="mbx-th">Domains</th>
|
|
<th class="mbx-th" style="width:110px">Ablauf</th>
|
|
<th class="mbx-th" style="width:90px">Status</th>
|
|
<th class="mbx-th mbx-th-right" style="width:70px">Aktionen</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach($realCerts as $cert)
|
|
<tr class="mbx-tr">
|
|
<td class="mbx-td">
|
|
<span class="dom-name">{{ $cert['name'] }}</span>
|
|
@if($cert['cert_path'])
|
|
<div style="font-size:10px;color:var(--mw-t4);margin-top:2px;font-family:monospace">{{ $cert['cert_path'] }}</div>
|
|
@endif
|
|
</td>
|
|
<td class="mbx-td">
|
|
<div class="ssl-domains">
|
|
@foreach($cert['domains'] as $d)
|
|
<span class="ssl-domain-pill">{{ $d }}</span>
|
|
@endforeach
|
|
</div>
|
|
</td>
|
|
<td class="mbx-td mbx-td-muted">
|
|
@if($cert['days_left'] !== null)
|
|
{{ $cert['days_left'] }} Tage
|
|
@else
|
|
<span style="color:var(--mw-t4)">—</span>
|
|
@endif
|
|
</td>
|
|
<td class="mbx-td">
|
|
@if($cert['expired'])
|
|
<span class="mbx-badge-warn">Abgelaufen</span>
|
|
@elseif($cert['days_left'] !== null && $cert['days_left'] < 14)
|
|
<span class="mbx-badge-warn">Bald fällig</span>
|
|
@else
|
|
<span class="mbx-badge-ok">Gültig</span>
|
|
@endif
|
|
</td>
|
|
<td class="mbx-td">
|
|
<div class="mbx-actions">
|
|
<button wire:click="renew('{{ $cert['name'] }}')"
|
|
class="mbx-act-btn" title="Zertifikat erneuern"
|
|
wire:confirm="Zertifikat {{ $cert['name'] }} jetzt erneuern?">
|
|
<svg width="13" height="13" viewBox="0 0 14 14" fill="none"><path d="M12 7A5 5 0 1 1 9 2.5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"/><path d="M9 .5l2.5 2L9 4.5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
|
</button>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|