From bc0e24cb5fb2431c082c394c297a85f64bf27fcb Mon Sep 17 00:00:00 2001 From: sonjungchan Date: Sun, 31 May 2026 14:34:56 +0900 Subject: [PATCH 1/3] fix: stop file handler after error responses Signed-off-by: sonjungchan --- .../server/pkg/handlers/file_handler.go | 26 +++++++++---------- .../server/pkg/handlers/handlers_test.go | 18 +++++++++++++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/chaoscenter/graphql/server/pkg/handlers/file_handler.go b/chaoscenter/graphql/server/pkg/handlers/file_handler.go index 8ccf6f178e5..fb070bfe7f9 100644 --- a/chaoscenter/graphql/server/pkg/handlers/file_handler.go +++ b/chaoscenter/graphql/server/pkg/handlers/file_handler.go @@ -23,46 +23,44 @@ func FileHandler(mongodbOperator mongodb.MongoOperator) gin.HandlerFunc { infraId, err := chaos_infrastructure.InfraValidateJWT(token) if err != nil { logrus.Error(err) - utils.WriteHeaders(&c.Writer, 500) + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) c.Writer.Write([]byte(err.Error())) + return } infra, err := dbChaosInfra.NewInfrastructureOperator(mongodbOperator).GetInfra(infraId) if err != nil { logrus.Error(err) - utils.WriteHeaders(&c.Writer, 500) + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) c.Writer.Write([]byte(err.Error())) + return } - reqHeader, ok := c.Value("request-header").(http.Header) - if !ok { - logrus.Error("unable to parse referer header") - utils.WriteHeaders(&c.Writer, 500) - c.Writer.Write([]byte("unable to parse referer header")) - } - - referrer := reqHeader.Get("Referer") + referrer := c.Request.Header.Get("Referer") if referrer == "" { logrus.Error("unable to parse referer header") - utils.WriteHeaders(&c.Writer, 500) + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) c.Writer.Write([]byte("unable to parse referer header")) + return } referrerURL, err := url.Parse(referrer) if err != nil { logrus.Error(err) - utils.WriteHeaders(&c.Writer, 500) + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) c.Writer.Write([]byte(err.Error())) + return } response, err := chaos_infrastructure.GetK8sInfraYaml(fmt.Sprintf("%s://%s", referrerURL.Scheme, referrerURL.Host), infra) if err != nil { logrus.Error(err) - utils.WriteHeaders(&c.Writer, 500) + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) c.Writer.Write([]byte(err.Error())) + return } - utils.WriteHeaders(&c.Writer, 200) + utils.WriteHeaders(&c.Writer, http.StatusOK) c.Writer.Write(response) } } diff --git a/chaoscenter/graphql/server/pkg/handlers/handlers_test.go b/chaoscenter/graphql/server/pkg/handlers/handlers_test.go index fb46af7beb8..ba4d62ccff7 100644 --- a/chaoscenter/graphql/server/pkg/handlers/handlers_test.go +++ b/chaoscenter/graphql/server/pkg/handlers/handlers_test.go @@ -66,3 +66,21 @@ func TestReadinessHandler_DatabaseUpWithoutLitmus(t *testing.T) { assert.Contains(t, w.Body.String(), `"database":"down"`) mockOp.AssertExpectations(t) } + +func TestFileHandlerInvalidTokenReturnsAfterError(t *testing.T) { + mockOp := new(mocks.MongoOperator) + + w := httptest.NewRecorder() + ctx := GetTestGinContext(w) + ctx.Params = []gin.Param{{Key: "key", Value: "not-a-jwt.yaml"}} + ctx.Request.Header.Set("Referer", "http://localhost:3000/") + + handlers.FileHandler(mockOp)(ctx) + + assert.Equal(t, http.StatusInternalServerError, w.Code) + assert.Contains(t, w.Body.String(), "token contains an invalid number of segments") + assert.NotContains(t, w.Body.String(), "mongo: no documents in result") + assert.NotContains(t, w.Body.String(), "unable to parse referer header") + mockOp.AssertNotCalled(t, "Get", mock.Anything, mock.Anything, mock.Anything) + mockOp.AssertExpectations(t) +} From d2cd5bb06323cd2718165e7f557fb126a935f9fc Mon Sep 17 00:00:00 2001 From: sonjungchan Date: Sun, 31 May 2026 15:02:54 +0900 Subject: [PATCH 2/3] fix: remove header in test Signed-off-by: sonjungchan --- chaoscenter/graphql/server/pkg/handlers/handlers_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/chaoscenter/graphql/server/pkg/handlers/handlers_test.go b/chaoscenter/graphql/server/pkg/handlers/handlers_test.go index ba4d62ccff7..42789d55125 100644 --- a/chaoscenter/graphql/server/pkg/handlers/handlers_test.go +++ b/chaoscenter/graphql/server/pkg/handlers/handlers_test.go @@ -73,7 +73,6 @@ func TestFileHandlerInvalidTokenReturnsAfterError(t *testing.T) { w := httptest.NewRecorder() ctx := GetTestGinContext(w) ctx.Params = []gin.Param{{Key: "key", Value: "not-a-jwt.yaml"}} - ctx.Request.Header.Set("Referer", "http://localhost:3000/") handlers.FileHandler(mockOp)(ctx) From 7ed03a16bab49144a16d5eaa0977649f408391dc Mon Sep 17 00:00:00 2001 From: sonjungchan Date: Sun, 31 May 2026 15:13:54 +0900 Subject: [PATCH 3/3] fix: return from FileHandler when request-header context is missing Signed-off-by: sonjungchan --- chaoscenter/graphql/server/pkg/handlers/file_handler.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/chaoscenter/graphql/server/pkg/handlers/file_handler.go b/chaoscenter/graphql/server/pkg/handlers/file_handler.go index fb070bfe7f9..13dbbf3054d 100644 --- a/chaoscenter/graphql/server/pkg/handlers/file_handler.go +++ b/chaoscenter/graphql/server/pkg/handlers/file_handler.go @@ -36,7 +36,14 @@ func FileHandler(mongodbOperator mongodb.MongoOperator) gin.HandlerFunc { return } - referrer := c.Request.Header.Get("Referer") + reqHeader, ok := c.Value("request-header").(http.Header) + if !ok { + logrus.Error("unable to parse referer header") + utils.WriteHeaders(&c.Writer, http.StatusInternalServerError) + c.Writer.Write([]byte("unable to parse referer header")) + return + } + referrer := reqHeader.Get("Referer") if referrer == "" { logrus.Error("unable to parse referer header") utils.WriteHeaders(&c.Writer, http.StatusInternalServerError)