Adding ability for plugin system to respect the defaults listed in the plugin manifest. (#9066)

Этот коммит содержится в:
Christopher Speller
2018-07-09 07:25:57 -07:00
коммит произвёл GitHub
родитель b78b216a3c
Коммит e3c26a0e89
4 изменённых файлов: 28 добавлений и 20 удалений

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

@@ -4,7 +4,6 @@
package app package app
import ( import (
"encoding/json"
"runtime" "runtime"
"github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/mlog"
@@ -98,13 +97,7 @@ func pluginSetting(pluginSettings *model.PluginSettings, plugin, key string, def
if !ok { if !ok {
return defaultValue return defaultValue
} }
var m map[string]interface{} if value, ok := settings[key]; ok {
if b, err := json.Marshal(settings); err != nil {
return defaultValue
} else {
json.Unmarshal(b, &m)
}
if value, ok := m[key]; ok {
return value return value
} }
return defaultValue return defaultValue

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

@@ -32,8 +32,8 @@ func newTestServer() (chan string, *httptest.Server) {
func TestPluginSetting(t *testing.T) { func TestPluginSetting(t *testing.T) {
settings := &model.PluginSettings{ settings := &model.PluginSettings{
Plugins: map[string]interface{}{ Plugins: map[string]map[string]interface{}{
"test": map[string]string{ "test": map[string]interface{}{
"foo": "bar", "foo": "bar",
}, },
}, },

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

@@ -6,30 +6,45 @@ package app
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"strings"
"github.com/mattermost/mattermost-server/mlog" "github.com/mattermost/mattermost-server/mlog"
"github.com/mattermost/mattermost-server/model" "github.com/mattermost/mattermost-server/model"
) )
type PluginAPI struct { type PluginAPI struct {
id string id string
app *App app *App
logger *mlog.SugarLogger logger *mlog.SugarLogger
manifest *model.Manifest
} }
func NewPluginAPI(a *App, manifest *model.Manifest) *PluginAPI { func NewPluginAPI(a *App, manifest *model.Manifest) *PluginAPI {
return &PluginAPI{ return &PluginAPI{
id: manifest.Id, id: manifest.Id,
app: a, manifest: manifest,
logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(), app: a,
logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(),
} }
} }
func (api *PluginAPI) LoadPluginConfiguration(dest interface{}) error { 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 return err
} else { } else {
return json.Unmarshal(b, dest) return json.Unmarshal(pluginSettingsJsonBytes, dest)
} }
} }

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

@@ -1717,7 +1717,7 @@ type PluginSettings struct {
EnableUploads *bool EnableUploads *bool
Directory *string Directory *string
ClientDirectory *string ClientDirectory *string
Plugins map[string]interface{} Plugins map[string]map[string]interface{}
PluginStates map[string]*PluginState PluginStates map[string]*PluginState
} }
@@ -1747,7 +1747,7 @@ func (s *PluginSettings) SetDefaults() {
} }
if s.Plugins == nil { if s.Plugins == nil {
s.Plugins = make(map[string]interface{}) s.Plugins = make(map[string]map[string]interface{})
} }
if s.PluginStates == nil { if s.PluginStates == nil {