From 3d36d93e322a16c878b52070878cf56122725727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Sibiril?= <81782+aureliensibiril@users.noreply.github.com> Date: Mon, 13 Apr 2026 19:14:21 +0200 Subject: [PATCH] Replace panic with error handling in connector handlers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The connector initiate and complete HTTP handlers used panic for operational errors (network, DB, provider failures). No recovery middleware exists on the console chi router, so these panics produced incomplete responses instead of proper HTTP 500 errors. Use the same log-and-render pattern already established in loadExistingConnector error handling. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com> --- pkg/server/api/console/v1/connector_initiate.go | 5 +++-- pkg/server/api/console/v1/resolver.go | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/pkg/server/api/console/v1/connector_initiate.go b/pkg/server/api/console/v1/connector_initiate.go index 87ddd356f..b783380ac 100644 --- a/pkg/server/api/console/v1/connector_initiate.go +++ b/pkg/server/api/console/v1/connector_initiate.go @@ -116,7 +116,9 @@ func handleConnectorInitiate( redirectURL, err := connectorRegistry.Initiate(r.Context(), provider, organizationID, opts, r) if err != nil { - panic(fmt.Errorf("cannot initiate connector: %w", err)) + logger.ErrorCtx(r.Context(), "cannot initiate connector", log.Error(err)) + httpserver.RenderError(w, http.StatusInternalServerError, fmt.Errorf("internal error")) + return } http.Redirect(w, r, redirectURL, http.StatusSeeOther) @@ -158,4 +160,3 @@ func loadExistingConnector( } return found, err } - diff --git a/pkg/server/api/console/v1/resolver.go b/pkg/server/api/console/v1/resolver.go index a1cf60cbe..746e319e6 100644 --- a/pkg/server/api/console/v1/resolver.go +++ b/pkg/server/api/console/v1/resolver.go @@ -152,7 +152,9 @@ func handleConnectorComplete( connection, state, err := connectorRegistry.CompleteWithState(r.Context(), provider, r) if err != nil { - panic(fmt.Errorf("cannot complete connector: %w", err)) + logger.ErrorCtx(r.Context(), "cannot complete connector", log.Error(err)) + httpserver.RenderError(w, http.StatusInternalServerError, fmt.Errorf("internal error")) + return } organizationID, err := gid.ParseGID(state.OrganizationID) @@ -184,7 +186,9 @@ func handleConnectorComplete( }, ) if err != nil { - panic(fmt.Errorf("cannot reconnect connector: %w", err)) + logger.ErrorCtx(r.Context(), "cannot reconnect connector", log.Error(err)) + httpserver.RenderError(w, http.StatusInternalServerError, fmt.Errorf("internal error")) + return } } else { cnnctr, err = svc.Connectors.Create( @@ -197,7 +201,9 @@ func handleConnectorComplete( }, ) if err != nil { - panic(fmt.Errorf("cannot create connector: %w", err)) + logger.ErrorCtx(r.Context(), "cannot create connector", log.Error(err)) + httpserver.RenderError(w, http.StatusInternalServerError, fmt.Errorf("internal error")) + return } }