package api import ( "net/http" ) // secureHeaders adds strict, privacy-preserving headers to static responses. func (s *Server) secureHeaders(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Referrer-Policy", "no-referrer") w.Header().Set("Cross-Origin-Opener-Policy", "same-origin") w.Header().Set("Cross-Origin-Resource-Policy", "same-site") w.Header().Set("Permissions-Policy", "camera=(), microphone=(), geolocation=(), interest-cohort=(), browsing-topics=()") w.Header().Set("X-Frame-Options", "DENY") w.Header().Set("X-Content-Type-Options", "nosniff") w.Header().Set("Strict-Transport-Security", "max-age=15552000; includeSubDomains; preload") next.ServeHTTP(w, r) }) } // MountStatic mounts a static file server under a prefix onto the provided mux. // Usage (from main): s.MountStatic(mux, "/", http.Dir(staticDir)) func (s *Server) MountStatic(mux *http.ServeMux, prefix string, fs http.FileSystem) { if prefix == "" { prefix = "/" } h := http.StripPrefix(prefix, http.FileServer(fs)) mux.Handle(prefix, s.secureHeaders(h)) }