fixup cors handling
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
542d4cec00
commit
db423dff58
36
http.go
36
http.go
@ -85,10 +85,6 @@ func (h *Server) Init(opts ...server.Option) error {
|
|||||||
h.registerRPC = v
|
h.registerRPC = v
|
||||||
}
|
}
|
||||||
|
|
||||||
if v, ok := h.opts.Context.Value(registerCORSHandlerKey{}).(bool); ok {
|
|
||||||
h.registerCORS = v
|
|
||||||
}
|
|
||||||
|
|
||||||
if phs, ok := h.opts.Context.Value(pathHandlerKey{}).(*pathHandlerVal); ok && phs.h != nil {
|
if phs, ok := h.opts.Context.Value(pathHandlerKey{}).(*pathHandlerVal); ok && phs.h != nil {
|
||||||
for pm, ps := range phs.h {
|
for pm, ps := range phs.h {
|
||||||
for pp, ph := range ps {
|
for pp, ph := range ps {
|
||||||
@ -196,6 +192,11 @@ func (h *Server) NewHandler(handler interface{}, opts ...server.HandlerOption) s
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
registerCORS := false
|
||||||
|
if v, ok := options.Context.Value(registerCORSHandlerKey{}).(bool); ok && v {
|
||||||
|
registerCORS = true
|
||||||
|
}
|
||||||
|
|
||||||
for hn, md := range options.Metadata {
|
for hn, md := range options.Metadata {
|
||||||
var method reflect.Method
|
var method reflect.Method
|
||||||
mname := hn[strings.Index(hn, ".")+1:]
|
mname := hn[strings.Index(hn, ".")+1:]
|
||||||
@ -229,25 +230,18 @@ func (h *Server) NewHandler(handler interface{}, opts ...server.HandlerOption) s
|
|||||||
hdlr.name = name
|
hdlr.name = name
|
||||||
|
|
||||||
methods := []string{md["Method"]}
|
methods := []string{md["Method"]}
|
||||||
if h.registerCORS {
|
if registerCORS {
|
||||||
logger.Infof(h.opts.Context, "register cors handler for http.MethodOptions %s", md["Path"])
|
|
||||||
methods = append(methods, http.MethodOptions)
|
methods = append(methods, http.MethodOptions)
|
||||||
} else {
|
|
||||||
logger.Infof(h.opts.Context, "not register cors handler for http.MethodOptions %s", md["Path"])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := hdlr.handlers.Insert(methods, md["Path"], pth); err != nil {
|
if err := hdlr.handlers.Insert(methods, md["Path"], pth); err != nil {
|
||||||
logger.Errorf(h.opts.Context, "cant add handler for %v %s", methods, md["Path"])
|
h.opts.Logger.Errorf(h.opts.Context, "cant add handler for %v %s", methods, md["Path"])
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Infof(h.opts.Context, fmt.Sprintf("try to detect rpc handlers usage %v", h.registerRPC))
|
|
||||||
if h.registerRPC {
|
if h.registerRPC {
|
||||||
methods := []string{http.MethodPost}
|
methods := []string{http.MethodPost}
|
||||||
if h.registerCORS {
|
if registerCORS {
|
||||||
logger.Infof(h.opts.Context, "register cors handler for %v %s", methods, "/"+hn)
|
|
||||||
methods = append(methods, http.MethodOptions)
|
methods = append(methods, http.MethodOptions)
|
||||||
} else {
|
|
||||||
logger.Infof(h.opts.Context, "not register cors handler for %v %s", methods, "/"+hn)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := hdlr.handlers.Insert(methods, "/"+hn, pth); err != nil {
|
if err := hdlr.handlers.Insert(methods, "/"+hn, pth); err != nil {
|
||||||
@ -294,13 +288,23 @@ func (h *Server) NewHandler(handler interface{}, opts ...server.HandlerOption) s
|
|||||||
pth := &patHandler{mtype: mtype, name: name, rcvr: rcvr}
|
pth := &patHandler{mtype: mtype, name: name, rcvr: rcvr}
|
||||||
hdlr.name = name
|
hdlr.name = name
|
||||||
|
|
||||||
if err := hdlr.handlers.Insert([]string{md.Method}, md.Path, pth); err != nil {
|
methods := []string{md.Method}
|
||||||
|
if registerCORS {
|
||||||
|
methods = append(methods, http.MethodOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := hdlr.handlers.Insert(methods, md.Path, pth); err != nil {
|
||||||
h.opts.Logger.Errorf(h.opts.Context, "cant add handler for %s %s", md.Method, md.Path)
|
h.opts.Logger.Errorf(h.opts.Context, "cant add handler for %s %s", md.Method, md.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
if h.registerRPC {
|
if h.registerRPC {
|
||||||
|
methods := []string{http.MethodPost}
|
||||||
|
if registerCORS {
|
||||||
|
methods = append(methods, http.MethodOptions)
|
||||||
|
}
|
||||||
|
|
||||||
h.opts.Logger.Infof(h.opts.Context, "register rpc handler for http.MethodPost %s /%s", hn, hn)
|
h.opts.Logger.Infof(h.opts.Context, "register rpc handler for http.MethodPost %s /%s", hn, hn)
|
||||||
if err := hdlr.handlers.Insert([]string{http.MethodPost}, "/"+hn, pth); err != nil {
|
if err := hdlr.handlers.Insert(methods, "/"+hn, pth); err != nil {
|
||||||
h.opts.Logger.Errorf(h.opts.Context, "cant add rpc handler for http.MethodPost %s /%s", hn, hn)
|
h.opts.Logger.Errorf(h.opts.Context, "cant add rpc handler for http.MethodPost %s /%s", hn, hn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,8 +136,8 @@ func RegisterRPCHandler(b bool) server.Option {
|
|||||||
type registerCORSHandlerKey struct{}
|
type registerCORSHandlerKey struct{}
|
||||||
|
|
||||||
// RegisterCORSHandler registers cors endpoints with /ServiceName.ServiceEndpoint method POPTIONSOST
|
// RegisterCORSHandler registers cors endpoints with /ServiceName.ServiceEndpoint method POPTIONSOST
|
||||||
func RegisterCORSHandler(b bool) server.Option {
|
func RegisterCORSHandler(b bool) server.HandlerOption {
|
||||||
return server.SetOption(registerCORSHandlerKey{}, b)
|
return server.SetHandlerOption(registerCORSHandlerKey{}, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
type handlerEndpointsKey struct{}
|
type handlerEndpointsKey struct{}
|
||||||
|
Loading…
Reference in New Issue
Block a user