From 87ef8f454abb569098c0c072e05a1a9bcddeb3e9 Mon Sep 17 00:00:00 2001 From: Livio Amstutz Date: Tue, 13 Jul 2021 15:42:41 +0200 Subject: [PATCH] fix: grpc status in sentry and validation interceptors (#2012) --- .../grpc/server/middleware/sentry_interceptor.go | 16 ++++++++++++---- .../server/middleware/validation_interceptor.go | 4 +++- internal/api/grpc/server/server.go | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/internal/api/grpc/server/middleware/sentry_interceptor.go b/internal/api/grpc/server/middleware/sentry_interceptor.go index fd4ba66d1..c4f83a304 100644 --- a/internal/api/grpc/server/middleware/sentry_interceptor.go +++ b/internal/api/grpc/server/middleware/sentry_interceptor.go @@ -6,8 +6,7 @@ import ( "github.com/getsentry/sentry-go" "google.golang.org/grpc" "google.golang.org/grpc/codes" - - "github.com/caos/zitadel/internal/api/grpc/errors" + "google.golang.org/grpc/status" ) func SentryHandler() grpc.UnaryServerInterceptor { @@ -18,8 +17,17 @@ func SentryHandler() grpc.UnaryServerInterceptor { func sendErrToSentry(ctx context.Context, req interface{}, handler grpc.UnaryHandler) (interface{}, error) { resp, err := handler(ctx, req) - code, _, _, _ := errors.ExtractCaosError(err) - if code == codes.Unknown || code == codes.Internal { + code := status.Code(err) + switch code { + case codes.Canceled, + codes.Unknown, + codes.DeadlineExceeded, + codes.ResourceExhausted, + codes.Aborted, + codes.Unimplemented, + codes.Internal, + codes.Unavailable, + codes.DataLoss: sentry.CaptureException(err) } return resp, err diff --git a/internal/api/grpc/server/middleware/validation_interceptor.go b/internal/api/grpc/server/middleware/validation_interceptor.go index 074ac2154..9e339f00b 100644 --- a/internal/api/grpc/server/middleware/validation_interceptor.go +++ b/internal/api/grpc/server/middleware/validation_interceptor.go @@ -4,6 +4,8 @@ import ( "context" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" _ "github.com/caos/zitadel/internal/statik" ) @@ -25,7 +27,7 @@ func validate(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, } err := validate.Validate() if err != nil { - return nil, err + return nil, status.Error(codes.InvalidArgument, err.Error()) } return handler(ctx, req) } diff --git a/internal/api/grpc/server/server.go b/internal/api/grpc/server/server.go index 5f291220c..17ae7bf8d 100644 --- a/internal/api/grpc/server/server.go +++ b/internal/api/grpc/server/server.go @@ -35,9 +35,9 @@ func CreateServer(verifier *authz.TokenVerifier, authConfig authz.Config, lang l grpc_middleware.ChainUnaryServer( middleware.DefaultTracingServer(), middleware.MetricsHandler(metricTypes, grpc_api.Probes...), + middleware.SentryHandler(), middleware.ErrorHandler(), middleware.AuthorizationInterceptor(verifier, authConfig), - middleware.SentryHandler(), middleware.TranslationHandler(lang), middleware.ValidationHandler(), middleware.ServiceHandler(),