package middleware import ( "strings" "github.com/gofiber/fiber/v3" ) // CORS middleware. func CORS(allowedOrigins string) fiber.Handler { allowlist := parseOrigins(allowedOrigins) return func(c fiber.Ctx) error { origin := c.Get("Origin") if origin != "" && (contains(allowlist, "*") || contains(allowlist, origin)) { c.Set("Access-Control-Allow-Origin", origin) c.Set("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS") c.Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Sub-Store-Token") } return c.Next() } } // HandleOptions handles CORS preflight requests. func HandleOptions() fiber.Handler { return func(c fiber.Ctx) error { if c.Method() == "OPTIONS" { c.Set("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS") c.Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Sub-Store-Token") return c.SendStatus(204) } return c.Next() } } func parseOrigins(s string) []string { parts := strings.Split(s, ",") result := make([]string, 0, len(parts)) for _, p := range parts { p = strings.TrimSpace(p) if p != "" { result = append(result, p) } } return result } func contains(list []string, s string) bool { for _, item := range list { if item == s { return true } } return false }