From d1958bdc49cd10277ca2e27bb2eea499c5994954 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 6 Oct 2017 13:58:23 -0400 Subject: Do not require server restart when enabling/disabling plugins (#7592) --- app/plugins.go | 10 ++++++++-- cmd/platform/server.go | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/plugins.go b/app/plugins.go index 2c87cee19..9826674f1 100644 --- a/app/plugins.go +++ b/app/plugins.go @@ -394,12 +394,14 @@ func (a *App) RemovePlugin(id string) *model.AppError { } func (a *App) InitPlugins(pluginPath, webappPath string) { - a.InitBuiltInPlugins() - if !utils.IsLicensed() || !*utils.License().Features.FutureFeatures || !*utils.Cfg.PluginSettings.Enable { return } + if a.PluginEnv != nil { + return + } + l4g.Info("Starting up plugins") err := os.Mkdir(pluginPath, 0744) @@ -485,9 +487,13 @@ func (a *App) ShutDownPlugins() { if a.PluginEnv == nil { return } + + l4g.Info("Shutting down plugins") + for _, err := range a.PluginEnv.Shutdown() { l4g.Error(err.Error()) } utils.RemoveConfigListener(a.PluginConfigListenerId) a.PluginConfigListenerId = "" + a.PluginEnv = nil } diff --git a/cmd/platform/server.go b/cmd/platform/server.go index 7ee7097e7..ac3f645c2 100644 --- a/cmd/platform/server.go +++ b/cmd/platform/server.go @@ -76,8 +76,18 @@ func runServer(configFileLocation string) { a.LoadLicense() } + a.InitBuiltInPlugins() + if webappDir, ok := utils.FindDir(model.CLIENT_DIR); ok { a.InitPlugins("plugins", webappDir+"/plugins") + + utils.AddConfigListener(func(prevCfg *model.Config, cfg *model.Config) { + if !*prevCfg.PluginSettings.Enable && *cfg.PluginSettings.Enable { + a.InitPlugins("plugins", webappDir+"/plugins") + } else if *prevCfg.PluginSettings.Enable && !*cfg.PluginSettings.Enable { + a.ShutDownPlugins() + } + }) } else { l4g.Error("Unable to find webapp directory, could not initialize plugins") } -- cgit v1.2.3-1-g7c22