From c7e9f06fd107d63ac555a5c45f6001ca1692ae26 Mon Sep 17 00:00:00 2001 From: valankar <31250800+valankar@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:40:58 +0200 Subject: [PATCH] fix(api): add Cache-Control header on dynamic page to prevent caching by services like Cloudflare. (#389) * Disable caching for dynamic page. * Add test for Cache-Control header. --- app/http/routes/strategies.go | 1 + app/http/routes/strategies_test.go | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/http/routes/strategies.go b/app/http/routes/strategies.go index d390de04..b699a383 100644 --- a/app/http/routes/strategies.go +++ b/app/http/routes/strategies.go @@ -90,6 +90,7 @@ func (s *ServeStrategy) ServeDynamic(c *gin.Context) { } writer.Flush() + c.Header("Cache-Control", "no-cache") c.Header("Content-Type", "text/html") c.Header("Content-Length", strconv.Itoa(buf.Len())) c.Writer.Write(buf.Bytes()) diff --git a/app/http/routes/strategies_test.go b/app/http/routes/strategies_test.go index 34afa2de..40b5ea7d 100644 --- a/app/http/routes/strategies_test.go +++ b/app/http/routes/strategies_test.go @@ -73,6 +73,24 @@ func TestServeStrategy_ServeDynamic(t *testing.T) { expectedHeaderKey: "X-Sablier-Session-Status", expectedHeaderValue: "not-ready", }, + { + name: "header requests no caching", + arg: arg{ + body: models.DynamicRequest{ + Names: []string{"nginx"}, + DisplayName: "Test", + Theme: "hacker-terminal", + SessionDuration: 1 * time.Minute, + }, + session: sessions.SessionState{ + Instances: createMap([]*instance.State{ + {Name: "nginx", Status: instance.NotReady}, + }), + }, + }, + expectedHeaderKey: "Cache-Control", + expectedHeaderValue: "no-cache", + }, { name: "header has ready value when session is ready", arg: arg{ @@ -104,7 +122,7 @@ func TestServeStrategy_ServeDynamic(t *testing.T) { SessionState: tt.arg.session, }, StrategyConfig: config.NewStrategyConfig(), - Theme: theme, + Theme: theme, } recorder := httptest.NewRecorder() c := GetTestGinContext(recorder)