From 05123185e33053e898755ffe6ea453e261c184bf Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Tue, 5 Aug 2025 11:15:42 +0200 Subject: [PATCH] Refacto graphql recovery Signed-off-by: Sacha Al Himdani --- pkg/server/api/console/v1/resolver.go | 10 ++------- pkg/server/api/trust/v1/resolver.go | 11 ++-------- pkg/server/graphql/recovery.go | 31 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 pkg/server/graphql/recovery.go diff --git a/pkg/server/api/console/v1/resolver.go b/pkg/server/api/console/v1/resolver.go index 5d88fa8a6..6502dfe62 100644 --- a/pkg/server/api/console/v1/resolver.go +++ b/pkg/server/api/console/v1/resolver.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "net/http" - "runtime/debug" "strings" "time" @@ -38,11 +37,11 @@ import ( "github.com/getprobo/probo/pkg/saferedirect" "github.com/getprobo/probo/pkg/securecookie" "github.com/getprobo/probo/pkg/server/api/console/v1/schema" + gqlutils "github.com/getprobo/probo/pkg/server/graphql" "github.com/getprobo/probo/pkg/statelesstoken" "github.com/getprobo/probo/pkg/usrmgr" "github.com/go-chi/chi/v5" "github.com/vektah/gqlparser/v2/gqlerror" - "go.gearno.de/kit/httpserver" "go.gearno.de/kit/log" ) @@ -233,12 +232,7 @@ func graphqlHandler(logger *log.Logger, proboSvc *probo.Service, usrmgrSvc *usrm ) srv.Use(extension.Introspection{}) srv.Use(tracingExtension{}) - srv.SetRecoverFunc(func(ctx context.Context, err any) error { - logger := httpserver.LoggerFromContext(ctx) - logger.Error("resolver panic", log.Any("error", err), log.Any("stack", string(debug.Stack()))) - - return errors.New("internal server error") - }) + srv.SetRecoverFunc(gqlutils.RecoverFunc) srv.AroundOperations( func(ctx context.Context, next graphql.OperationHandler) graphql.ResponseHandler { diff --git a/pkg/server/api/trust/v1/resolver.go b/pkg/server/api/trust/v1/resolver.go index 12f596814..59e518d7f 100644 --- a/pkg/server/api/trust/v1/resolver.go +++ b/pkg/server/api/trust/v1/resolver.go @@ -18,10 +18,8 @@ package trust_v1 import ( "context" - "errors" "fmt" "net/http" - "runtime/debug" "time" "github.com/99designs/gqlgen/graphql/handler" @@ -34,11 +32,11 @@ import ( console_v1 "github.com/getprobo/probo/pkg/server/api/console/v1" "github.com/getprobo/probo/pkg/server/api/trust/v1/auth" "github.com/getprobo/probo/pkg/server/api/trust/v1/schema" + gqlutils "github.com/getprobo/probo/pkg/server/graphql" "github.com/getprobo/probo/pkg/statelesstoken" "github.com/getprobo/probo/pkg/trust" "github.com/getprobo/probo/pkg/usrmgr" "github.com/go-chi/chi/v5" - "go.gearno.de/kit/httpserver" "go.gearno.de/kit/log" ) @@ -134,12 +132,7 @@ func graphqlHandler(logger *log.Logger, usrmgrSvc *usrmgr.Service, trustSvc *tru srv.Use(extension.Introspection{}) - srv.SetRecoverFunc(func(ctx context.Context, err any) error { - logger := httpserver.LoggerFromContext(ctx) - logger.Error("resolver panic", log.Any("error", err), log.Any("stack", string(debug.Stack()))) - - return errors.New("internal server error") - }) + srv.SetRecoverFunc(gqlutils.RecoverFunc) return WithSession(usrmgrSvc, trustSvc, authCfg, trustAuthCfg, srv.ServeHTTP) } diff --git a/pkg/server/graphql/recovery.go b/pkg/server/graphql/recovery.go new file mode 100644 index 000000000..462388353 --- /dev/null +++ b/pkg/server/graphql/recovery.go @@ -0,0 +1,31 @@ +// Copyright (c) 2025 Probo Inc . +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +// PERFORMANCE OF THIS SOFTWARE. + +package graphql + +import ( + "context" + "errors" + "runtime/debug" + + "go.gearno.de/kit/httpserver" + "go.gearno.de/kit/log" +) + +func RecoverFunc(ctx context.Context, err any) error { + logger := httpserver.LoggerFromContext(ctx) + logger.Error("resolver panic", log.Any("error", err), log.Any("stack", string(debug.Stack()))) + + return errors.New("internal server error") +}