From e3c26a0e89253fb626515831d8468050e6235d89 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 9 Jul 2018 07:25:57 -0700 Subject: Adding ability for plugin system to respect the defaults listed in the plugin manifest. (#9066) --- app/diagnostics.go | 9 +-------- app/diagnostics_test.go | 4 ++-- app/plugin_api.go | 31 +++++++++++++++++++++++-------- 3 files changed, 26 insertions(+), 18 deletions(-) (limited to 'app') diff --git a/app/diagnostics.go b/app/diagnostics.go index 601cff27f..abaca691b 100644 --- a/app/diagnostics.go +++ b/app/diagnostics.go @@ -4,7 +4,6 @@ package app import ( - "encoding/json" "runtime" "github.com/mattermost/mattermost-server/mlog" @@ -98,13 +97,7 @@ func pluginSetting(pluginSettings *model.PluginSettings, plugin, key string, def if !ok { return defaultValue } - var m map[string]interface{} - if b, err := json.Marshal(settings); err != nil { - return defaultValue - } else { - json.Unmarshal(b, &m) - } - if value, ok := m[key]; ok { + if value, ok := settings[key]; ok { return value } return defaultValue diff --git a/app/diagnostics_test.go b/app/diagnostics_test.go index 2c61fb335..1dfcbecd1 100644 --- a/app/diagnostics_test.go +++ b/app/diagnostics_test.go @@ -32,8 +32,8 @@ func newTestServer() (chan string, *httptest.Server) { func TestPluginSetting(t *testing.T) { settings := &model.PluginSettings{ - Plugins: map[string]interface{}{ - "test": map[string]string{ + Plugins: map[string]map[string]interface{}{ + "test": map[string]interface{}{ "foo": "bar", }, }, diff --git a/app/plugin_api.go b/app/plugin_api.go index d76cb83e3..279694c44 100644 --- a/app/plugin_api.go +++ b/app/plugin_api.go @@ -6,30 +6,45 @@ package app import ( "encoding/json" "fmt" + "strings" "github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/model" ) type PluginAPI struct { - id string - app *App - logger *mlog.SugarLogger + id string + app *App + logger *mlog.SugarLogger + manifest *model.Manifest } func NewPluginAPI(a *App, manifest *model.Manifest) *PluginAPI { return &PluginAPI{ - id: manifest.Id, - app: a, - logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(), + id: manifest.Id, + manifest: manifest, + app: a, + logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(), } } func (api *PluginAPI) LoadPluginConfiguration(dest interface{}) error { - if b, err := json.Marshal(api.app.Config().PluginSettings.Plugins[api.id]); err != nil { + finalConfig := make(map[string]interface{}) + + // First set final config to defaults + for _, setting := range api.manifest.SettingsSchema.Settings { + finalConfig[strings.ToLower(setting.Key)] = setting.Default + } + + // If we have settings given we override the defaults with them + for setting, value := range api.app.Config().PluginSettings.Plugins[api.id] { + finalConfig[strings.ToLower(setting)] = value + } + + if pluginSettingsJsonBytes, err := json.Marshal(finalConfig); err != nil { return err } else { - return json.Unmarshal(b, dest) + return json.Unmarshal(pluginSettingsJsonBytes, dest) } } -- cgit v1.2.3-1-g7c22