// Package httpx holds the door's HTTP helpers: the session cookie, the client // IP resolution (trusted proxies, A6), the security headers, log redaction, and // the CSRF token (SPEC-003 §6/§8). // // It imports only net/http + the standard library — the door owns HTTP; the // pure routing model (internal/core/routing) must never import this. package httpx import "net/http" // SessionCookieName is the name of the session cookie (SPEC-003 §6). The value // is an opaque random id; the server-side session row is authoritative. const SessionCookieName = "myday_session" // SetSessionCookie writes the hardened session cookie (SPEC-003 §6): // HttpOnly · Secure · SameSite=Lax · Path=/. The lifetime is server-side, so // no Max-Age is set (a browser-session cookie). func SetSessionCookie(w http.ResponseWriter, name, value string, secure bool) { http.SetCookie(w, &http.Cookie{ Name: name, Value: value, Path: "/", HttpOnly: true, Secure: secure, SameSite: http.SameSiteLaxMode, }) } // ClearSessionCookie expires the session cookie (logout, or an invalid session). func ClearSessionCookie(w http.ResponseWriter, name string, secure bool) { http.SetCookie(w, &http.Cookie{ Name: name, Value: "", Path: "/", HttpOnly: true, Secure: secure, SameSite: http.SameSiteLaxMode, MaxAge: -1, }) }