diff --git a/src/internal/server/oidc/account.go b/src/internal/server/oidc/account.go
index 2fad330..7036039 100644
--- a/src/internal/server/oidc/account.go
+++ b/src/internal/server/oidc/account.go
@@ -37,13 +37,25 @@ type AccountLogoutHandler struct {
const logoutCSRF = "__Host-keycape-logout"
var accountLogoutPage = template.Must(template.New("logout").Parse(`
-
-
Sign out of NetKingdomSign out of NetKingdom?
+
+
+Sign out of NetKingdom ยท NetKingdom Identity
+Sign out of NetKingdom?
This ends your shared sign-in session in this browser so you can use another account.
Applications that already have their own sessions may remain signed in.
-Back to my account
`))
+Back to my account
+`))
func (h *AccountLogoutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-store")
@@ -53,7 +65,7 @@ func (h *AccountLogoutHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
upstream, _ := url.Parse(h.UpstreamLogoutURL)
portal, _ := url.Parse(h.PortalURL)
destinations := upstream.Scheme + "://" + upstream.Host + " " + portal.Scheme + "://" + portal.Host
- w.Header().Set("Content-Security-Policy", "default-src 'none'; form-action 'self' "+destinations+"; frame-ancestors 'none'; base-uri 'none'")
+ w.Header().Set("Content-Security-Policy", "default-src 'none'; style-src 'unsafe-inline'; form-action 'self' "+destinations+"; frame-ancestors 'none'; base-uri 'none'")
w.Header().Set("X-Content-Type-Options", "nosniff")
switch r.Method {
case http.MethodGet:
diff --git a/src/internal/server/oidc/account_test.go b/src/internal/server/oidc/account_test.go
index 44a09df..1a2d68f 100644
--- a/src/internal/server/oidc/account_test.go
+++ b/src/internal/server/oidc/account_test.go
@@ -31,6 +31,13 @@ func TestSharedLogoutRequiresConfirmationAndFixedReturn(t *testing.T) {
if w.Code != 200 || w.Header().Get("Location") != "" {
t.Fatal("GET must only confirm")
}
+ page := w.Body.String()
+ if !strings.Contains(page, "NetKingdom Identity") || !strings.Contains(page, "Sign out of NetKingdom?
") || !strings.Contains(page, "--paper:#f5f1e8") || !strings.Contains(page, "Georgia,serif") {
+ t.Fatal("logout page left the account-site design")
+ }
+ if !strings.Contains(w.Header().Get("Content-Security-Policy"), "style-src 'unsafe-inline'") {
+ t.Fatal("inline account-site style blocked")
+ }
if w.Header().Get("Referrer-Policy") != "same-origin" {
t.Fatal("browser POST would lose its Origin")
}