From c847912a9f5745c5dd807fdecb7be97b77592655 Mon Sep 17 00:00:00 2001 From: Ping-Lin Chang Date: Sun, 22 May 2022 01:52:05 +0100 Subject: [PATCH] feat: add cors support --- cmd/main/main.go | 27 +++++++++++++++++---------- config/config.go | 9 ++++++--- go.mod | 1 + go.sum | 2 ++ 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/cmd/main/main.go b/cmd/main/main.go index 6f4fb532e..2b60f0347 100644 --- a/cmd/main/main.go +++ b/cmd/main/main.go @@ -11,6 +11,7 @@ import ( "syscall" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/rs/cors" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" "google.golang.org/grpc" @@ -35,16 +36,22 @@ import ( pipelinePB "github.com/instill-ai/protogen-go/pipeline/v1alpha" ) -func grpcHandlerFunc(grpcServer *grpc.Server, gwHandler http.Handler) http.Handler { +func grpcHandlerFunc(grpcServer *grpc.Server, gwHandler http.Handler, CORSOrigins []string) http.Handler { return h2c.NewHandler( - http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.ProtoMajor == 2 && strings.Contains(r.Header.Get("Content-Type"), "application/grpc") { - grpcServer.ServeHTTP(w, r) - } else { - gwHandler.ServeHTTP(w, r) - } - }), - &http2.Server{}) + cors.New(cors.Options{ + AllowedOrigins: CORSOrigins, + AllowCredentials: true, + Debug: false, + }).Handler( + http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.ProtoMajor == 2 && strings.Contains(r.Header.Get("Content-Type"), "application/grpc") { + grpcServer.ServeHTTP(w, r) + } else { + gwHandler.ServeHTTP(w, r) + } + })), + &http2.Server{}, + ) } func main() { @@ -154,7 +161,7 @@ func main() { httpServer := &http.Server{ Addr: fmt.Sprintf(":%v", config.Config.Server.Port), - Handler: grpcHandlerFunc(grpcS, gwS), + Handler: grpcHandlerFunc(grpcS, gwS, config.Config.Server.CORSOrigins), } // Wait for interrupt signal to gracefully shutdown the server with a timeout of 5 seconds. diff --git a/config/config.go b/config/config.go index bd58eaec1..7f93b3511 100644 --- a/config/config.go +++ b/config/config.go @@ -116,9 +116,12 @@ func Init() error { logger.Fatal(err.Error()) } - if err := k.Load(env.Provider("CFG_", ".", func(s string) string { - return strings.Replace(strings.ToLower( - strings.TrimPrefix(s, "CFG_")), "_", ".", -1) + if err := k.Load(env.ProviderWithValue("CFG_", ".", func(s string, v string) (string, interface{}) { + key := strings.Replace(strings.ToLower(strings.TrimPrefix(s, "CFG_")), "_", ".", -1) + if strings.Contains(v, ",") { + return key, strings.Split(strings.TrimSpace(v), ",") + } + return key, v }), nil); err != nil { return err } diff --git a/go.mod b/go.mod index 395566239..1684af610 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( github.com/instill-ai/x v0.1.0-alpha.0.20220517204940-5a70916ce425 github.com/knadh/koanf v1.4.0 github.com/mennanov/fieldmask-utils v0.5.0 + github.com/rs/cors v1.8.2 github.com/stretchr/testify v1.7.0 go.temporal.io/sdk v1.13.1 go.uber.org/zap v1.21.0 diff --git a/go.sum b/go.sum index 21862a2c3..93f49962c 100644 --- a/go.sum +++ b/go.sum @@ -921,6 +921,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc=