package middleware import ( "github.com/gin-gonic/gin" "streambox/config" ) func Cors(cfg config.CorsConfig) gin.HandlerFunc { return func(c *gin.Context) { origin := c.GetHeader("Origin") allowed := false for _, o := range cfg.AllowOrigins { if o == "*" || o == origin { allowed = true break } } if allowed { if len(cfg.AllowOrigins) == 1 && cfg.AllowOrigins[0] == "*" { c.Header("Access-Control-Allow-Origin", "*") } else if origin != "" { c.Header("Access-Control-Allow-Origin", origin) } c.Header("Vary", "Origin") } c.Header("Access-Control-Allow-Credentials", "true") if len(cfg.AllowMethods) > 0 { c.Header("Access-Control-Allow-Methods", join(cfg.AllowMethods)) } if len(cfg.AllowHeaders) > 0 { c.Header("Access-Control-Allow-Headers", join(cfg.AllowHeaders)) } if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() } } func join(a []string) string { s := "" for i, v := range a { if i > 0 { s += ", " } s += v } return s }