234 lines
10 KiB
PHP
234 lines
10 KiB
PHP
@extends('layouts.app')
|
|||
|
|
|
||
|
|
@section('title', 'SSL Certificate - ' . $site->name)
|
||
|
|
|
||
|
|
@section('content')
|
||
|
|
<div class="container-fluid">
|
||
|
|
<!-- Page Header -->
|
||
|
|
<div class="mb-4">
|
||
|
|
<nav aria-label="breadcrumb">
|
||
|
|
<ol class="breadcrumb">
|
||
|
|
<li class="breadcrumb-item"><a href="{{ route('ssl.index') }}">SSL Certificates</a></li>
|
||
|
|
<li class="breadcrumb-item active">{{ $site->name }}</li>
|
||
|
|
</ol>
|
||
|
|
</nav>
|
||
|
|
|
||
|
|
<div class="d-flex justify-content-between align-items-center">
|
||
|
|
<div>
|
||
|
|
<h1 class="h2 mb-2">{{ $site->name }}</h1>
|
||
|
|
<p class="text-muted">{{ $site->url }}</p>
|
||
|
|
</div>
|
||
|
|
@if($latestCert)
|
||
|
|
@php
|
||
|
|
$daysUntilExpiry = $latestCert->expires_at ? now()->diffInDays($latestCert->expires_at, false) : null;
|
||
|
|
@endphp
|
||
|
|
<div>
|
||
|
|
@if($daysUntilExpiry === null)
|
||
|
|
<span class="badge bg-secondary fs-6 px-3 py-2">Status Unknown</span>
|
||
|
|
@elseif($daysUntilExpiry < 0)
|
||
|
|
<span class="badge bg-danger fs-6 px-3 py-2">
|
||
|
|
<i class="bi bi-shield-x"></i> Certificate Expired
|
||
|
|
</span>
|
||
|
|
@elseif($daysUntilExpiry < 30)
|
||
|
|
<span class="badge bg-warning text-dark fs-6 px-3 py-2">
|
||
|
|
<i class="bi bi-clock-history"></i> Expires in {{ $daysUntilExpiry }} days
|
||
|
|
</span>
|
||
|
|
@else
|
||
|
|
<span class="badge bg-success fs-6 px-3 py-2">
|
||
|
|
<i class="bi bi-shield-check"></i> Valid Certificate
|
||
|
|
</span>
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
@if($latestCert)
|
||
|
|
<!-- Current Certificate Info -->
|
||
|
|
<div class="row g-4 mb-4">
|
||
|
|
<div class="col-md-6">
|
||
|
|
<div class="card border-0 shadow-sm h-100">
|
||
|
|
<div class="card-header bg-white">
|
||
|
|
<h5 class="mb-0">
|
||
|
|
<i class="bi bi-info-circle me-2"></i>
|
||
|
|
Certificate Details
|
||
|
|
</h5>
|
||
|
|
</div>
|
||
|
|
<div class="card-body">
|
||
|
|
<div class="mb-3">
|
||
|
|
<div class="text-muted small mb-1">Issuer</div>
|
||
|
|
<div class="fw-semibold">{{ $latestCert->issuer ?? 'Unknown' }}</div>
|
||
|
|
</div>
|
||
|
|
<div class="mb-3">
|
||
|
|
<div class="text-muted small mb-1">Subject</div>
|
||
|
|
<div class="fw-semibold">{{ $latestCert->subject ?? 'Unknown' }}</div>
|
||
|
|
</div>
|
||
|
|
<div class="row">
|
||
|
|
<div class="col-6">
|
||
|
|
<div class="text-muted small mb-1">Issued Date</div>
|
||
|
|
<div class="fw-semibold">
|
||
|
|
@if($latestCert->issued_at)
|
||
|
|
{{ $latestCert->issued_at->format('M d, Y') }}
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="col-6">
|
||
|
|
<div class="text-muted small mb-1">Expiry Date</div>
|
||
|
|
<div class="fw-semibold">
|
||
|
|
@if($latestCert->expires_at)
|
||
|
|
{{ $latestCert->expires_at->format('M d, Y') }}
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="col-md-6">
|
||
|
|
<div class="card border-0 shadow-sm h-100">
|
||
|
|
<div class="card-header bg-white">
|
||
|
|
<h5 class="mb-0">
|
||
|
|
<i class="bi bi-calendar-check me-2"></i>
|
||
|
|
Validity Information
|
||
|
|
</h5>
|
||
|
|
</div>
|
||
|
|
<div class="card-body">
|
||
|
|
<div class="mb-3">
|
||
|
|
<div class="text-muted small mb-1">Days Remaining</div>
|
||
|
|
<div class="h3 mb-0">
|
||
|
|
@if($daysUntilExpiry !== null)
|
||
|
|
@if($daysUntilExpiry < 0)
|
||
|
|
<span class="text-danger">Expired {{ abs($daysUntilExpiry) }} days ago</span>
|
||
|
|
@else
|
||
|
|
<span class="text-{{ $daysUntilExpiry < 30 ? 'warning' : 'success' }}">{{ $daysUntilExpiry }} days</span>
|
||
|
|
@endif
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="mb-3">
|
||
|
|
<div class="text-muted small mb-1">Validity Period</div>
|
||
|
|
<div class="fw-semibold">
|
||
|
|
@if($latestCert->issued_at && $latestCert->expires_at)
|
||
|
|
{{ $latestCert->issued_at->diffInDays($latestCert->expires_at) }} days
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div>
|
||
|
|
<div class="text-muted small mb-1">Last Checked</div>
|
||
|
|
<div class="fw-semibold">
|
||
|
|
{{ $latestCert->created_at->diffForHumans() }}
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
@else
|
||
|
|
<div class="alert alert-info">
|
||
|
|
<i class="bi bi-info-circle me-2"></i>
|
||
|
|
No SSL certificate information available for this site yet.
|
||
|
|
</div>
|
||
|
|
@endif
|
||
|
|
|
||
|
|
<!-- Certificate History -->
|
||
|
|
<div class="card border-0 shadow-sm">
|
||
|
|
<div class="card-header bg-white">
|
||
|
|
<h5 class="mb-0">
|
||
|
|
<i class="bi bi-clock-history me-2"></i>
|
||
|
|
Certificate History
|
||
|
|
</h5>
|
||
|
|
</div>
|
||
|
|
<div class="card-body p-0">
|
||
|
|
<div class="table-responsive">
|
||
|
|
<table class="table table-hover mb-0">
|
||
|
|
<thead class="bg-light">
|
||
|
|
<tr>
|
||
|
|
<th>Checked At</th>
|
||
|
|
<th>Issuer</th>
|
||
|
|
<th>Issued Date</th>
|
||
|
|
<th>Expiry Date</th>
|
||
|
|
<th>Days Until Expiry</th>
|
||
|
|
<th>Status</th>
|
||
|
|
</tr>
|
||
|
|
</thead>
|
||
|
|
<tbody>
|
||
|
|
@forelse($sslCertificates as $cert)
|
||
|
|
@php
|
||
|
|
$daysUntilExpiry = $cert->expires_at ? now()->diffInDays($cert->expires_at, false) : null;
|
||
|
|
@endphp
|
||
|
|
<tr>
|
||
|
|
<td>{{ $cert->created_at->format('M d, Y H:i:s') }}</td>
|
||
|
|
<td>{{ Str::limit($cert->issuer ?? 'Unknown', 40) }}</td>
|
||
|
|
<td>
|
||
|
|
@if($cert->issued_at)
|
||
|
|
{{ $cert->issued_at->format('M d, Y') }}
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</td>
|
||
|
|
<td>
|
||
|
|
@if($cert->expires_at)
|
||
|
|
{{ $cert->expires_at->format('M d, Y') }}
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</td>
|
||
|
|
<td>
|
||
|
|
@if($daysUntilExpiry !== null)
|
||
|
|
@if($daysUntilExpiry < 0)
|
||
|
|
<span class="text-danger">{{ $daysUntilExpiry }} days</span>
|
||
|
|
@elseif($daysUntilExpiry < 30)
|
||
|
|
<span class="text-warning">{{ $daysUntilExpiry }} days</span>
|
||
|
|
@else
|
||
|
|
<span class="text-success">{{ $daysUntilExpiry }} days</span>
|
||
|
|
@endif
|
||
|
|
@else
|
||
|
|
—
|
||
|
|
@endif
|
||
|
|
</td>
|
||
|
|
<td>
|
||
|
|
@if($daysUntilExpiry === null)
|
||
|
|
<span class="badge bg-secondary">Unknown</span>
|
||
|
|
@elseif($daysUntilExpiry < 0)
|
||
|
|
<span class="badge bg-danger">
|
||
|
|
<i class="bi bi-shield-x"></i> Expired
|
||
|
|
</span>
|
||
|
|
@elseif($daysUntilExpiry < 30)
|
||
|
|
<span class="badge bg-warning text-dark">
|
||
|
|
<i class="bi bi-clock-history"></i> Expiring
|
||
|
|
</span>
|
||
|
|
@else
|
||
|
|
<span class="badge bg-success">
|
||
|
|
<i class="bi bi-shield-check"></i> Valid
|
||
|
|
</span>
|
||
|
|
@endif
|
||
|
|
</td>
|
||
|
|
</tr>
|
||
|
|
@empty
|
||
|
|
<tr>
|
||
|
|
<td colspan="6" class="text-center py-4 text-muted">
|
||
|
|
No SSL certificate checks recorded yet.
|
||
|
|
</td>
|
||
|
|
</tr>
|
||
|
|
@endforelse
|
||
|
|
</tbody>
|
||
|
|
</table>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
@if($sslCertificates->hasPages())
|
||
|
|
<div class="card-footer bg-white">
|
||
|
|
{{ $sslCertificates->links() }}
|
||
|
|
</div>
|
||
|
|
@endif
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
@endsection
|