package httpapi import ( "net/http" "strings" ) func parseCORSOrigins(spec string) []string { spec = strings.TrimSpace(spec) if spec == "" { return nil } var out []string for _, p := range strings.Split(spec, ",") { p = strings.TrimSpace(p) if p != "" { out = append(out, p) } } return out } func (s *Server) withCORS(h http.Handler) http.Handler { if len(s.corsOrigins) == 0 { return h } allowed := make(map[string]struct{}, len(s.corsOrigins)) for _, o := range s.corsOrigins { allowed[o] = struct{}{} } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { origin := r.Header.Get("Origin") if origin != "" { if _, ok := allowed[origin]; ok { w.Header().Set("Access-Control-Allow-Origin", origin) w.Header().Set("Access-Control-Allow-Credentials", "true") w.Header().Add("Vary", "Origin") } } w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Type, Idempotency-Key, Accept, X-Tenant-Id") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, DELETE, OPTIONS") if r.Method == http.MethodOptions { w.WriteHeader(http.StatusNoContent) return } h.ServeHTTP(w, r) }) }