Files

55 lines
1.4 KiB
Go

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
}