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.
`;
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.`,
};
}