Adding ability for plugin system to respect the defaults listed in the plugin manifest. (#9066)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
b78b216a3c
Коммит
e3c26a0e89
@@ -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,6 +6,7 @@ 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"
|
||||||
@@ -15,21 +16,35 @@ 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,
|
||||||
|
manifest: manifest,
|
||||||
app: a,
|
app: a,
|
||||||
logger: a.Log.With(mlog.String("plugin_id", manifest.Id)).Sugar(),
|
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 {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user