[MM-28692] Include config diffs in audit record for config changing API calls (#17623)
* Replace config generator * Cleanup * Some renaming and docs additions to add clarity * Cleanup logging related methods * Cleanup emitter * Fix TestDefaultsGenerator * Move feature flags synchronization logic out of config package * Remove unnecessary util functions * Simplify load/set logic * Refine semantics and add some test to cover them * Remove unnecessary deep copies * Improve logic further * Fix license header * Review file store tests * Fix test * Fix test * Avoid additional write during initialization * More consistent naming * Update app/feature_flags.go Co-authored-by: Christopher Speller <crspeller@gmail.com> * Update config/store.go Co-authored-by: Christopher Speller <crspeller@gmail.com> * Update config/store.go Co-authored-by: Christopher Speller <crspeller@gmail.com> * Update config/store.go Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> * Make ConfigStore.Set() return both old and new configs * Implement config diff function * Make app.SaveConfig return previous and current configs * Add config diff to audit record * Fix returned configs * Include high level test * Move FF synchronizer to its own package * Remove unidiomatic use of sync.Once * Add some comments * Rename function * More comment * Save config diff in audit record for local endpoints * Enable audit for config set/reset commands * Improve tests output Co-authored-by: Christopher Speller <crspeller@gmail.com> Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
ca9d8ab0a4
Коммит
e1b13c10fc
@@ -420,7 +420,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer ds.Close()
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
if assert.Error(t, err) {
|
||||
assert.EqualError(t, err, "old configuration modified instead of cloning")
|
||||
}
|
||||
@@ -436,7 +436,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
|
||||
newCfg := &model.Config{}
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "", *ds.Get().ServiceSettings.SiteURL)
|
||||
@@ -453,7 +453,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
newCfg := &model.Config{}
|
||||
newCfg.LdapSettings.BindPassword = model.NewString(model.FAKE_SETTING)
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "password", *ds.Get().LdapSettings.BindPassword)
|
||||
@@ -470,7 +470,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
newCfg := &model.Config{}
|
||||
newCfg.ServiceSettings.SiteURL = model.NewString("invalid")
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
if assert.Error(t, err) {
|
||||
assert.EqualError(t, err, "new configuration is invalid: Config.IsValid: model.config.is_valid.site_url.app_error, ")
|
||||
}
|
||||
@@ -486,11 +486,11 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer ds.Close()
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
beforeID, _ := getActualDatabaseConfig(t)
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
afterID, _ := getActualDatabaseConfig(t)
|
||||
@@ -511,7 +511,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "http://new", *ds.Get().ServiceSettings.SiteURL)
|
||||
@@ -531,7 +531,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = ds.Load()
|
||||
@@ -555,7 +555,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
|
||||
newCfg := minimalConfig
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.Error(t, err)
|
||||
assert.True(t, strings.HasPrefix(err.Error(), "failed to persist: failed to query active configuration"), "unexpected error: "+err.Error())
|
||||
|
||||
@@ -577,7 +577,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
newCfg := emptyConfig.Clone()
|
||||
newCfg.ServiceSettings.SiteURL = model.NewString(longSiteURL)
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.Error(t, err)
|
||||
assert.True(t, strings.HasPrefix(err.Error(), "failed to persist: marshalled configuration failed length check: value is too long"), "unexpected error: "+err.Error())
|
||||
})
|
||||
@@ -598,7 +598,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
|
||||
newCfg := minimalConfig
|
||||
|
||||
_, err = ds.Set(newCfg)
|
||||
_, _, err = ds.Set(newCfg)
|
||||
require.NoError(t, err)
|
||||
|
||||
id, _ := getActualDatabaseConfig(t)
|
||||
@@ -616,7 +616,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
defer ds.Close()
|
||||
|
||||
ds.SetReadOnlyFF(true)
|
||||
_, err = ds.Set(minimalConfig)
|
||||
_, _, err = ds.Set(minimalConfig)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "http://minimal", *ds.Get().ServiceSettings.SiteURL)
|
||||
@@ -633,7 +633,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
||||
|
||||
ds.SetReadOnlyFF(false)
|
||||
|
||||
_, err = ds.Set(minimalConfig)
|
||||
_, _, err = ds.Set(minimalConfig)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "http://minimal", *ds.Get().ServiceSettings.SiteURL)
|
||||
@@ -692,7 +692,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer ds.Close()
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "http://overridePersistEnvVariables", *ds.Get().ServiceSettings.SiteURL)
|
||||
@@ -715,7 +715,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
|
||||
assert.Equal(t, true, *ds.Get().PluginSettings.EnableUploads)
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, true, *ds.Get().PluginSettings.EnableUploads)
|
||||
@@ -738,7 +738,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
|
||||
assert.Equal(t, 3000, *ds.Get().TeamSettings.MaxUsersPerTeam)
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, 3000, *ds.Get().TeamSettings.MaxUsersPerTeam)
|
||||
@@ -761,7 +761,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
|
||||
assert.Equal(t, int64(123456), *ds.Get().ServiceSettings.TLSStrictTransportMaxAge)
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, int64(123456), *ds.Get().ServiceSettings.TLSStrictTransportMaxAge)
|
||||
@@ -784,7 +784,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
|
||||
assert.Equal(t, []string{"user:pwd@db:5432/test-db"}, ds.Get().SqlSettings.DataSourceReplicas)
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, []string{"user:pwd@db:5432/test-db"}, ds.Get().SqlSettings.DataSourceReplicas)
|
||||
@@ -809,7 +809,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
||||
|
||||
assert.Equal(t, []string{"user:pwd@db:5432/test-db"}, ds.Get().SqlSettings.DataSourceReplicas)
|
||||
|
||||
_, err = ds.Set(ds.Get())
|
||||
_, _, err = ds.Set(ds.Get())
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, []string{"user:pwd@db:5432/test-db"}, ds.Get().SqlSettings.DataSourceReplicas)
|
||||
|
||||
Ссылка в новой задаче
Block a user