Add TLS Certificates page to Advanced section of web UI

New page at /advanced/certificates showing:
- Overview card with central domain, cert count, Cloudflare token status
- Auto-provision readiness badge (requires CF token + operator email)
- Table of all domains needing TLS with: domain, source, expiry date,
  issuer, and status badges (days left / covered by wildcard / missing)
- Per-domain "Provision" button for missing certs when auto-provision ready
- "Provision" and "Renew All" action buttons
- Guidance alert when prerequisites are missing

Also fixes pre-existing type errors:
- AppSidebar: guard daemon index access when undefined
- DomainsComponent: fix circular type reference in filter state
- DomainTopology: remove unused isWildcard variable
This commit is contained in:
2026-07-14 12:08:43 +00:00
parent a85bfbfe9e
commit 947991da7f
8 changed files with 247 additions and 5 deletions

View File

@@ -0,0 +1,10 @@
import { ErrorBoundary } from '../../../components';
import { CertificatesSubsystem } from '../../../components/advanced';
export function CertificatesPage() {
return (
<ErrorBoundary>
<CertificatesSubsystem />
</ErrorBoundary>
);
}

View File

@@ -5,3 +5,4 @@ export { WireguardPage } from './WireguardPage';
export { CrowdsecPage } from './CrowdsecPage';
export { AutheliaAdvancedPage } from './AutheliaPage';
export { DdnsPage } from './DdnsPage';
export { CertificatesPage } from './CertificatesPage';

View File

@@ -14,6 +14,7 @@ import {
CrowdsecPage as CrowdsecAdvancedPage,
AutheliaAdvancedPage,
DdnsPage,
CertificatesPage,
} from './pages/advanced';
export const routes: RouteObject[] = [
@@ -36,6 +37,7 @@ export const routes: RouteObject[] = [
{ path: 'advanced/crowdsec', element: <CrowdsecAdvancedPage /> },
{ path: 'advanced/authelia', element: <AutheliaAdvancedPage /> },
{ path: 'advanced/ddns', element: <DdnsPage /> },
{ path: 'advanced/certificates', element: <CertificatesPage /> },
],
},
{