From 9fde5aa5e279ca53fc23adb1b74a14c0d7b041ea Mon Sep 17 00:00:00 2001 From: Agniva De Sarker Date: Tue, 30 Nov 2021 14:27:25 +0530 Subject: [PATCH] Do not parse developer flags if empty (#19097) * Do not parse developer flags if empty Attempting to parse an empty flag would result in a spurious log line which would clog up the console. ```release-note NONE ``` * add test ```release-note NONE ``` --- web/handlers.go | 38 ++++++++++++++++++++------------------ web/handlers_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/web/handlers.go b/web/handlers.go index bf6b6ecbd7..bb1040d4fe 100644 --- a/web/handlers.go +++ b/web/handlers.go @@ -100,26 +100,28 @@ func generateDevCSP(c Context) string { } // Add supported flags for debugging during development, even if not on a dev build. - for _, devFlagKVStr := range strings.Split(*c.App.Config().ServiceSettings.DeveloperFlags, ",") { - devFlagKVSplit := strings.SplitN(devFlagKVStr, "=", 2) - if len(devFlagKVSplit) != 2 { - c.Logger.Warn("Unable to parse developer flag", mlog.String("developer_flag", devFlagKVStr)) - continue - } - devFlagKey := devFlagKVSplit[0] - devFlagValue := devFlagKVSplit[1] + if *c.App.Config().ServiceSettings.DeveloperFlags != "" { + for _, devFlagKVStr := range strings.Split(*c.App.Config().ServiceSettings.DeveloperFlags, ",") { + devFlagKVSplit := strings.SplitN(devFlagKVStr, "=", 2) + if len(devFlagKVSplit) != 2 { + c.Logger.Warn("Unable to parse developer flag", mlog.String("developer_flag", devFlagKVStr)) + continue + } + devFlagKey := devFlagKVSplit[0] + devFlagValue := devFlagKVSplit[1] - // Ignore disabled keys - if devFlagValue != "true" { - continue - } + // Ignore disabled keys + if devFlagValue != "true" { + continue + } - // Honour only supported keys - switch devFlagKey { - case "unsafe-eval", "unsafe-inline": - devCSPMap[devFlagKey] = true - default: - c.Logger.Warn("Unrecognized developer flag", mlog.String("developer_flag", devFlagKVStr)) + // Honour only supported keys + switch devFlagKey { + case "unsafe-eval", "unsafe-inline": + devCSPMap[devFlagKey] = true + default: + c.Logger.Warn("Unrecognized developer flag", mlog.String("developer_flag", devFlagKVStr)) + } } } var devCSP string diff --git a/web/handlers_test.go b/web/handlers_test.go index 5a2680451c..2d93dd9db4 100644 --- a/web/handlers_test.go +++ b/web/handlers_test.go @@ -14,6 +14,7 @@ import ( "github.com/mattermost/mattermost-server/v6/app" "github.com/mattermost/mattermost-server/v6/model" "github.com/mattermost/mattermost-server/v6/plugin/plugintest/mock" + "github.com/mattermost/mattermost-server/v6/shared/mlog" "github.com/mattermost/mattermost-server/v6/store/storetest/mocks" ) @@ -485,6 +486,31 @@ func TestGenerateDevCSP(t *testing.T) { assert.Equal(t, " 'unsafe-eval'", devCSP) }) + + t.Run("empty dev flags", func(t *testing.T) { + th := Setup(t) + defer th.TearDown() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.ServiceSettings.DeveloperFlags = "" + }) + + logger := mlog.CreateConsoleTestLogger(false, mlog.LvlWarn) + buf := &mlog.Buffer{} + require.NoError(t, mlog.AddWriterTarget(logger, buf, false, mlog.LvlWarn)) + + c := &Context{ + App: th.App, + AppContext: th.Context, + Logger: logger, + } + + generateDevCSP(*c) + + require.NoError(t, logger.Shutdown()) + + assert.Equal(t, "", buf.String()) + }) } func TestHandlerServeInvalidToken(t *testing.T) {