const DISMISS_KEY = "overlord_cert_banner_dismissed"; export async function showCertBannerIfNeeded(anchor) { if (sessionStorage.getItem(DISMISS_KEY) === "1") return; if (localStorage.getItem(DISMISS_KEY) === "1") return; let source; try { const res = await fetch("/api/cert/info"); if (!res.ok) return; const data = await res.json(); source = data.source; } catch { return; } if (source !== "self-signed") return; if ("serviceWorker" in navigator && window.isSecureContext) { try { const reg = await navigator.serviceWorker.getRegistration("/"); if (reg && reg.active) { return; } } catch { } } const os = detectOS(); const banner = document.createElement("div"); banner.id = "cert-trust-banner"; banner.className = "mx-4 mt-3 mb-1 flex items-start gap-3 rounded-lg border border-amber-500/30 " + "bg-amber-950/60 px-4 py-3 text-sm text-amber-200 shadow-lg"; banner.innerHTML = ` ⚠️

Untrusted self-signed certificate

This server is using a self-signed TLS certificate. Your browser doesn't trust it, which may block some features (desktop notifications, service workers). Download the certificate and add it to your OS / browser trust store to fix this.

Download Certificate
`; anchor.insertAdjacentElement("afterend", banner); document.getElementById("cert-banner-dismiss")?.addEventListener("click", () => { banner.remove(); localStorage.setItem(DISMISS_KEY, "1"); sessionStorage.setItem(DISMISS_KEY, "1"); }); document.getElementById("cert-banner-how")?.addEventListener("click", () => { const el = document.getElementById("cert-banner-instructions"); if (el) el.classList.toggle("hidden"); }); } function detectOS() { const ua = navigator.userAgent.toLowerCase(); if (ua.includes("win")) { return { label: "Windows", instructions: `1. Double-click the downloaded overlord-ca.crt file. 2. Click Install Certificate... 3. Choose Current User or Local Machine. 4. Select "Place all certificates in the following store". 5. Click Browse → choose Trusted Root Certification Authorities. 6. Click Next → Finish. 7. Restart your browser for the change to take effect.`, }; } if (ua.includes("mac")) { return { label: "macOS", instructions: `1. Double-click the downloaded overlord-ca.crt file — it opens in Keychain Access. 2. If prompted, add it to the login or System keychain. 3. Find the certificate in the list, double-click it. 4. Expand Trust and set "When using this certificate" to Always Trust. 5. Close the dialog (you'll be prompted for your password). 6. Restart your browser.`, }; } return { label: "Linux", instructions: `Debian / Ubuntu: sudo cp overlord-ca.crt /usr/local/share/ca-certificates/overlord-ca.crt sudo update-ca-certificates Fedora / RHEL: sudo cp overlord-ca.crt /etc/pki/ca-trust/source/anchors/overlord-ca.crt sudo update-ca-trust Then restart your browser. For Chrome/Chromium you may also need: Settings → Privacy → Manage Certificates → Authorities → Import.`, }; }