[MM-28131] Fix desanitization of DataSourceReplicas and DataSourceSearchReplicas (#15389)

* Fix desanitization of DataSourceReplicas and DataSourceSearchReplicas

* Fix test case

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Claudio Costa
2020-09-17 20:16:59 +02:00
коммит произвёл GitHub
родитель 42657fafa1
Коммит 334cf9d84a
5 изменённых файлов: 23 добавлений и 13 удалений

Просмотреть файл

@@ -210,7 +210,7 @@ func patchConfig(c *Context, w http.ResponseWriter, r *http.Request) {
}
appCfg := c.App.Config()
if *appCfg.ServiceSettings.SiteURL != "" && (cfg.ServiceSettings.SiteURL == nil || *cfg.ServiceSettings.SiteURL == "") {
if *appCfg.ServiceSettings.SiteURL != "" && cfg.ServiceSettings.SiteURL != nil && *cfg.ServiceSettings.SiteURL == "" {
c.Err = model.NewAppError("patchConfig", "api.config.update_config.clear_siteurl.app_error", nil, "", http.StatusBadRequest)
return
}

Просмотреть файл

@@ -670,11 +670,9 @@ func TestPatchConfig(t *testing.T) {
CheckNoError(t, resp)
require.Equal(t, nonEmptyURL, *cfg.ServiceSettings.SiteURL)
// Check that sending an empty config returns an error.
// Check that sending an empty config returns no error.
_, resp = th.SystemAdminClient.PatchConfig(&model.Config{})
require.NotNil(t, resp.Error)
CheckBadRequestStatus(t, resp)
assert.Equal(t, "api.config.update_config.clear_siteurl.app_error", resp.Error.Id)
CheckNoError(t, resp)
})
}

Просмотреть файл

@@ -58,6 +58,12 @@ func TestMigrate(t *testing.T) {
files[3],
files[4],
}
cfg.SqlSettings.DataSourceReplicas = []string{
"mysql://mmuser:password@tcp(replicahost:3306)/mattermost",
}
cfg.SqlSettings.DataSourceSearchReplicas = []string{
"mysql://mmuser:password@tcp(searchreplicahost:3306)/mattermost",
}
_, err := source.Set(cfg)
require.NoError(t, err)

Просмотреть файл

@@ -52,14 +52,20 @@ func desanitize(actual, target *model.Config) {
*target.ElasticsearchSettings.Password = *actual.ElasticsearchSettings.Password
}
target.SqlSettings.DataSourceReplicas = make([]string, len(actual.SqlSettings.DataSourceReplicas))
for i := range target.SqlSettings.DataSourceReplicas {
target.SqlSettings.DataSourceReplicas[i] = actual.SqlSettings.DataSourceReplicas[i]
if len(target.SqlSettings.DataSourceReplicas) == len(actual.SqlSettings.DataSourceReplicas) {
for i, value := range target.SqlSettings.DataSourceReplicas {
if value == model.FAKE_SETTING {
target.SqlSettings.DataSourceReplicas[i] = actual.SqlSettings.DataSourceReplicas[i]
}
}
}
target.SqlSettings.DataSourceSearchReplicas = make([]string, len(actual.SqlSettings.DataSourceSearchReplicas))
for i := range target.SqlSettings.DataSourceSearchReplicas {
target.SqlSettings.DataSourceSearchReplicas[i] = actual.SqlSettings.DataSourceSearchReplicas[i]
if len(target.SqlSettings.DataSourceSearchReplicas) == len(actual.SqlSettings.DataSourceSearchReplicas) {
for i, value := range target.SqlSettings.DataSourceSearchReplicas {
if value == model.FAKE_SETTING {
target.SqlSettings.DataSourceSearchReplicas[i] = actual.SqlSettings.DataSourceSearchReplicas[i]
}
}
}
if *target.MessageExportSettings.GlobalRelaySettings.SmtpPassword == model.FAKE_SETTING {

Просмотреть файл

@@ -49,8 +49,8 @@ func TestDesanitize(t *testing.T) {
target.SqlSettings.DataSource = sToP(model.FAKE_SETTING)
target.SqlSettings.AtRestEncryptKey = sToP(model.FAKE_SETTING)
target.ElasticsearchSettings.Password = sToP(model.FAKE_SETTING)
target.SqlSettings.DataSourceReplicas = append(target.SqlSettings.DataSourceReplicas, "old_replica0")
target.SqlSettings.DataSourceSearchReplicas = append(target.SqlSettings.DataSourceReplicas, "old_search_replica0")
target.SqlSettings.DataSourceReplicas = []string{model.FAKE_SETTING, model.FAKE_SETTING}
target.SqlSettings.DataSourceSearchReplicas = []string{model.FAKE_SETTING, model.FAKE_SETTING}
actualClone := actual.Clone()
desanitize(actual, target)