Merge dev into Feature 10 branch before the SearXNG sidecar
CI / ci (push) Successful in 1m55s

This commit is contained in:
2026-10-06 06:54:39 -04:00
54 changed files with 8642 additions and 42 deletions
+5
View File
@@ -327,8 +327,13 @@ func (a *Auth) callback(w http.ResponseWriter, r *http.Request) {
// logout ends the session, clears the cookie and sends the browser to the
// provider's end_session_endpoint to end the provider session as well.
// Clear-Site-Data wipes this origin's storage and caches — the PWA's
// verified-session marker in localStorage and the service worker's cached API
// and media responses — so an offline visit after logout cannot reopen
// household data.
func (a *Auth) logout(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Cache-Control", "no-store")
w.Header().Set("Clear-Site-Data", `"storage", "cache"`)
if err := a.sessions.EndSession(w, r); err != nil {
a.logger.ErrorContext(r.Context(), "end session", "error", err)
http.Error(w, "internal error", http.StatusInternalServerError)
+6
View File
@@ -440,6 +440,9 @@ func TestLogout(t *testing.T) {
if !strings.HasPrefix(raw, SessionCookieName+"=;") || !strings.Contains(raw, "Max-Age=0") {
t.Errorf("logout Set-Cookie = %q, want the cookie cleared", raw)
}
if got := resp.Header.Get("Clear-Site-Data"); got != `"storage", "cache"` {
t.Errorf("logout Clear-Site-Data = %q, want the PWA's storage and caches cleared", got)
}
rows := h.rows(t)
if len(rows) != 1 || rows[0].idHash != sha256Hex(other.Value) {
@@ -461,6 +464,9 @@ func TestLogoutWithoutSession(t *testing.T) {
t.Errorf("logout = %d to %q, want 303 to the end session endpoint", resp.StatusCode, resp.Header.Get("Location"))
}
assertSessionCookieAttributes(t, sessionSetCookie(t, resp))
if got := resp.Header.Get("Clear-Site-Data"); got != `"storage", "cache"` {
t.Errorf("logout Clear-Site-Data = %q, want the PWA's storage and caches cleared", got)
}
}
func TestLogoutIsPostOnly(t *testing.T) {