in pkg/filter/cors/cors.go [81:126]
func (f *Filter) Decode(ctx *http.HttpContext) filter.FilterStatus {
writer := ctx.Writer
c := f.cfg
if c == nil {
return filter.Continue
}
if ctx.GetHeader(constant.Origin) == "" {
// not a cors request
return filter.Continue
}
domains := c.AllowOrigin
if len(domains) != 0 {
for _, domain := range domains {
if domain == "*" || ctx.GetHeader("Origin") == domain {
writer.Header().Add(constant.HeaderKeyAccessControlAllowOrigin, domain)
continue
}
}
}
if c.AllowHeaders != "" {
writer.Header().Add(constant.HeaderKeyAccessControlAllowHeaders, c.AllowHeaders)
}
if c.ExposeHeaders != "" {
writer.Header().Add(constant.HeaderKeyAccessControlExposeHeaders, c.ExposeHeaders)
}
if c.AllowMethods != "" {
writer.Header().Add(constant.HeaderKeyAccessControlAllowMethods, c.AllowMethods)
}
if c.MaxAge != "" {
writer.Header().Add(constant.HeaderKeyAccessControlMaxAge, c.MaxAge)
}
if c.AllowCredentials {
writer.Header().Add(constant.HeaderKeyAccessControlAllowCredentials, "true")
}
if ctx.Request.Method == stdHttp.MethodOptions {
ctx.SendLocalReply(stdHttp.StatusOK, nil)
return filter.Stop
}
return filter.Continue
}