55 lines
1.4 KiB
Go
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
|
|
}
|