[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>
Этот коммит содержится в:
Claudio Costa
2021-05-21 09:04:39 +02:00
коммит произвёл GitHub
родитель ca9d8ab0a4
Коммит e1b13c10fc
23 изменённых файлов: 841 добавлений и 136 удалений

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

@@ -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)