@page @model Status.Pages.CertificatesModel @{ ViewData["Title"] = "Certificates"; ViewData["Page"] = "certs"; }
SSL/TLS Certificates @if (Model.IsAdmin) { Manage → }
@if (!Model.Certificates.Any()) {
No certificates tracked
} else {
@{ var now = DateTime.UtcNow; var valid = Model.Certificates.Count(c => c.ExpiresAt.HasValue && (c.ExpiresAt.Value - now).TotalDays > 30); var expiringSoon = Model.Certificates.Count(c => c.ExpiresAt.HasValue && (c.ExpiresAt.Value - now).TotalDays is > 0 and <= 30); var expired = Model.Certificates.Count(c => c.ExpiresAt.HasValue && c.ExpiresAt.Value <= now); }
Valid
@valid
Expiring <30d
@expiringSoon
Expired
@expired
@foreach (var certificate in Model.Certificates) { var days = certificate.ExpiresAt.HasValue ? (int)(certificate.ExpiresAt.Value - now).TotalDays : (int?)null; var cls = days == null ? "" : days <= 0 ? "cert-expiry-expired" : days <= 7 ? "cert-expiry-critical" : days <= 30 ? "cert-expiry-warn" : "cert-expiry-ok"; }
Name Domain Issuer Valid From Expires Days Left Fingerprint Status
@certificate.Name @certificate.Domain @(certificate.Issuer?.Split(',').FirstOrDefault()?.Replace("CN=","") ?? "—") @(certificate.IssuedAt?.ToString("yyyy-MM-dd") ?? "—") @(certificate.ExpiresAt?.ToString("yyyy-MM-dd") ?? "—") @(days.HasValue ? days + "d" : "—") @(certificate.Thumbprint?[..16] ?? "—")… @if (!string.IsNullOrEmpty(certificate.LastError)) { ERROR } else if (days == null) { Unchecked } else if (days <= 0) { EXPIRED } else if (days <= 7) { CRITICAL } else if (days <= 30) { EXPIRING } else { VALID }
}