diff --git a/pkg/admin/api/grpc/gateway.go b/pkg/admin/api/grpc/gateway.go new file mode 100644 index 000000000..311e989fc --- /dev/null +++ b/pkg/admin/api/grpc/gateway.go @@ -0,0 +1,52 @@ +package grpc + +import ( + "github.com/caos/utils/api/grpc/server" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "strings" +) + +type GatewayConfig struct { + Port string + GRPCEndpoint string + CustomHeaders []string +} + +type Gateway struct { + grpcEndpoint string + port string + cutomHeaders []string +} + +func StartGateway(conf GatewayConfig) *Gateway { + return &Gateway{ + grpcEndpoint: conf.GRPCEndpoint, + port: conf.Port, + cutomHeaders: conf.CustomHeaders, + } +} + +func (gw *Gateway) Gateway() server.GatewayFunc { + return RegisterAdminServiceHandlerFromEndpoint +} + +func (gw *Gateway) GRPCEndpoint() string { + return ":" + gw.grpcEndpoint +} + +func (gw *Gateway) GatewayPort() string { + return gw.port +} + +func (gw *Gateway) GatewayServeMuxOptions() []runtime.ServeMuxOption { + return []runtime.ServeMuxOption{ + runtime.WithIncomingHeaderMatcher(func(header string) (string, bool) { + for _, customHeader := range gw.cutomHeaders { + if strings.HasPrefix(strings.ToLower(header), customHeader) { + return header, true + } + } + return header, false + }), + } +} diff --git a/pkg/admin/api/grpc/server.go b/pkg/admin/api/grpc/server.go index d0b8d5b49..7fad14521 100644 --- a/pkg/admin/api/grpc/server.go +++ b/pkg/admin/api/grpc/server.go @@ -1,6 +1,8 @@ package grpc import ( + grpc_utils "github.com/caos/zitadel/internal/api/grpc" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "google.golang.org/grpc" ) @@ -28,7 +30,13 @@ func (s *Server) GRPCPort() string { } func (s *Server) GRPCServer() (*grpc.Server, error) { - gs := grpc.NewServer() + gs := grpc.NewServer( + grpc.UnaryInterceptor( + grpc_middleware.ChainUnaryServer( + grpc_utils.ErrorHandler(), + ), + ), + ) RegisterAdminServiceServer(gs, s) return gs, nil } diff --git a/pkg/auth/api/grpc/gateway.go b/pkg/auth/api/grpc/gateway.go new file mode 100644 index 000000000..8718cd3fc --- /dev/null +++ b/pkg/auth/api/grpc/gateway.go @@ -0,0 +1,52 @@ +package grpc + +import ( + "github.com/caos/utils/api/grpc/server" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "strings" +) + +type GatewayConfig struct { + Port string + GRPCEndpoint string + CustomHeaders []string +} + +type Gateway struct { + grpcEndpoint string + port string + cutomHeaders []string +} + +func StartGateway(conf GatewayConfig) *Gateway { + return &Gateway{ + grpcEndpoint: conf.GRPCEndpoint, + port: conf.Port, + cutomHeaders: conf.CustomHeaders, + } +} + +func (gw *Gateway) Gateway() server.GatewayFunc { + return RegisterAuthServiceHandlerFromEndpoint +} + +func (gw *Gateway) GRPCEndpoint() string { + return ":" + gw.grpcEndpoint +} + +func (gw *Gateway) GatewayPort() string { + return gw.port +} + +func (gw *Gateway) GatewayServeMuxOptions() []runtime.ServeMuxOption { + return []runtime.ServeMuxOption{ + runtime.WithIncomingHeaderMatcher(func(header string) (string, bool) { + for _, customHeader := range gw.cutomHeaders { + if strings.HasPrefix(strings.ToLower(header), customHeader) { + return header, true + } + } + return header, false + }), + } +} diff --git a/pkg/auth/api/grpc/server.go b/pkg/auth/api/grpc/server.go index 6dc995936..51c82892a 100644 --- a/pkg/auth/api/grpc/server.go +++ b/pkg/auth/api/grpc/server.go @@ -1,6 +1,8 @@ package grpc import ( + grpc_utils "github.com/caos/zitadel/internal/api/grpc" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "google.golang.org/grpc" ) @@ -28,7 +30,13 @@ func (s *Server) GRPCPort() string { } func (s *Server) GRPCServer() (*grpc.Server, error) { - gs := grpc.NewServer() + gs := grpc.NewServer( + grpc.UnaryInterceptor( + grpc_middleware.ChainUnaryServer( + grpc_utils.ErrorHandler(), + ), + ), + ) RegisterAuthServiceServer(gs, s) return gs, nil } diff --git a/pkg/management/api/grpc/gateway.go b/pkg/management/api/grpc/gateway.go new file mode 100644 index 000000000..75aa95743 --- /dev/null +++ b/pkg/management/api/grpc/gateway.go @@ -0,0 +1,52 @@ +package grpc + +import ( + "github.com/caos/utils/api/grpc/server" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "strings" +) + +type GatewayConfig struct { + Port string + GRPCEndpoint string + CustomHeaders []string +} + +type Gateway struct { + grpcEndpoint string + port string + cutomHeaders []string +} + +func StartGateway(conf GatewayConfig) *Gateway { + return &Gateway{ + grpcEndpoint: conf.GRPCEndpoint, + port: conf.Port, + cutomHeaders: conf.CustomHeaders, + } +} + +func (gw *Gateway) Gateway() server.GatewayFunc { + return RegisterManagementServiceHandlerFromEndpoint +} + +func (gw *Gateway) GRPCEndpoint() string { + return ":" + gw.grpcEndpoint +} + +func (gw *Gateway) GatewayPort() string { + return gw.port +} + +func (gw *Gateway) GatewayServeMuxOptions() []runtime.ServeMuxOption { + return []runtime.ServeMuxOption{ + runtime.WithIncomingHeaderMatcher(func(header string) (string, bool) { + for _, customHeader := range gw.cutomHeaders { + if strings.HasPrefix(strings.ToLower(header), customHeader) { + return header, true + } + } + return header, false + }), + } +} diff --git a/pkg/management/api/grpc/server.go b/pkg/management/api/grpc/server.go index e3988ada5..13df6492c 100644 --- a/pkg/management/api/grpc/server.go +++ b/pkg/management/api/grpc/server.go @@ -1,6 +1,8 @@ package grpc import ( + grpc_utils "github.com/caos/zitadel/internal/api/grpc" + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "google.golang.org/grpc" ) @@ -28,7 +30,13 @@ func (s *Server) GRPCPort() string { } func (s *Server) GRPCServer() (*grpc.Server, error) { - gs := grpc.NewServer() + gs := grpc.NewServer( + grpc.UnaryInterceptor( + grpc_middleware.ChainUnaryServer( + grpc_utils.ErrorHandler(), + ), + ), + ) RegisterManagementServiceServer(gs, s) return gs, nil }