add cors option
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
		
							
								
								
									
										18
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								go.mod
									
									
									
									
									
								
							| @@ -5,17 +5,19 @@ go 1.18 | ||||
| require ( | ||||
| 	go.unistack.org/micro-codec-yaml/v3 v3.10.0 | ||||
| 	go.unistack.org/micro-proto/v3 v3.3.1 | ||||
| 	go.unistack.org/micro/v3 v3.10.42 | ||||
| 	golang.org/x/net v0.14.0 | ||||
| 	go.unistack.org/micro/v3 v3.10.52 | ||||
| 	golang.org/x/net v0.22.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/golang/protobuf v1.5.3 // indirect | ||||
| 	github.com/google/gnostic v0.6.9 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e // indirect | ||||
| 	google.golang.org/grpc v1.57.0 // indirect | ||||
| 	google.golang.org/protobuf v1.31.0 // indirect | ||||
| 	github.com/golang/protobuf v1.5.4 // indirect | ||||
| 	github.com/google/gnostic v0.7.0 // indirect | ||||
| 	github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 // indirect | ||||
| 	golang.org/x/sys v0.18.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c // indirect | ||||
| 	google.golang.org/grpc v1.62.1 // indirect | ||||
| 	google.golang.org/protobuf v1.33.0 // indirect | ||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||
| 	sigs.k8s.io/yaml v1.3.0 // indirect | ||||
| 	sigs.k8s.io/yaml v1.4.0 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										12
									
								
								http.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								http.go
									
									
									
									
									
								
							| @@ -35,6 +35,7 @@ type Server struct { | ||||
| 	pathHandlers *rhttp.Trie | ||||
| 	opts         server.Options | ||||
| 	registerRPC  bool | ||||
| 	registerCORS bool | ||||
| 	sync.RWMutex | ||||
| 	registered bool | ||||
| 	init       bool | ||||
| @@ -84,6 +85,10 @@ func (h *Server) Init(opts ...server.Option) error { | ||||
| 		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 { | ||||
| 		for pm, ps := range phs.h { | ||||
| 			for pp, ph := range ps { | ||||
| @@ -227,6 +232,13 @@ func (h *Server) NewHandler(handler interface{}, opts ...server.HandlerOption) s | ||||
| 			h.opts.Logger.Errorf(h.opts.Context, "cant add handler for %s %s", md["Method"], md["Path"]) | ||||
| 		} | ||||
|  | ||||
| 		if h.registerCORS { | ||||
| 			h.opts.Logger.Infof(h.opts.Context, "register cors handler for http.MethodOptions %s /%s", hn, hn) | ||||
| 			if err := hdlr.handlers.Insert([]string{http.MethodOptions}, "/"+hn, pth); err != nil { | ||||
| 				h.opts.Logger.Errorf(h.opts.Context, "cant add rpc handler for http.MethodOptions %s /%s", hn, hn) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if h.registerRPC { | ||||
| 			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 { | ||||
|   | ||||
| @@ -133,6 +133,13 @@ func RegisterRPCHandler(b bool) server.Option { | ||||
| 	return server.SetOption(registerRPCHandlerKey{}, b) | ||||
| } | ||||
|  | ||||
| type registerCORSHandlerKey struct{} | ||||
|  | ||||
| // RegisterCORSHandler registers cors endpoints with /ServiceName.ServiceEndpoint method POPTIONSOST | ||||
| func RegisterCORSHandler(b bool) server.Option { | ||||
| 	return server.SetOption(registerCORSHandlerKey{}, b) | ||||
| } | ||||
|  | ||||
| type handlerEndpointsKey struct{} | ||||
|  | ||||
| type EndpointMetadata struct { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user