summaryrefslogtreecommitdiffstats
path: root/app/plugin_install.go
diff options
context:
space:
mode:
authorJesse Hallam <jesse.hallam@gmail.com>2018-07-26 08:45:26 -0400
committerJoram Wilander <jwawilander@gmail.com>2018-07-26 08:45:26 -0400
commit8948b91d7a80169b12907e16581cfdd53bbb73f1 (patch)
treedd84c35a664c7787b8080920692dc943b58f5d31 /app/plugin_install.go
parentf8f80d80df1e27e2ed4dcc91518bf504ab7f3e34 (diff)
downloadchat-8948b91d7a80169b12907e16581cfdd53bbb73f1.tar.gz
chat-8948b91d7a80169b12907e16581cfdd53bbb73f1.tar.bz2
chat-8948b91d7a80169b12907e16581cfdd53bbb73f1.zip
unpack prepacked plugins on plugins initialization (#9149)
* unpack prepackaged plugins on plugins initialization * leverage utils.FindDir
Diffstat (limited to 'app/plugin_install.go')
-rw-r--r--app/plugin_install.go14
1 files changed, 10 insertions, 4 deletions
diff --git a/app/plugin_install.go b/app/plugin_install.go
index f96c75f06..b97fbc5d5 100644
--- a/app/plugin_install.go
+++ b/app/plugin_install.go
@@ -17,11 +17,11 @@ import (
)
// InstallPlugin unpacks and installs a plugin but does not enable or activate it.
-func (a *App) InstallPlugin(pluginFile io.Reader) (*model.Manifest, *model.AppError) {
- return a.installPlugin(pluginFile)
+func (a *App) InstallPlugin(pluginFile io.Reader, replace bool) (*model.Manifest, *model.AppError) {
+ return a.installPlugin(pluginFile, replace)
}
-func (a *App) installPlugin(pluginFile io.Reader) (*model.Manifest, *model.AppError) {
+func (a *App) installPlugin(pluginFile io.Reader, replace bool) (*model.Manifest, *model.AppError) {
if a.Plugins == nil || !*a.Config().PluginSettings.Enable {
return nil, model.NewAppError("installPlugin", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented)
}
@@ -63,7 +63,13 @@ func (a *App) installPlugin(pluginFile io.Reader) (*model.Manifest, *model.AppEr
// Check that there is no plugin with the same ID
for _, bundle := range bundles {
if bundle.Manifest != nil && bundle.Manifest.Id == manifest.Id {
- return nil, model.NewAppError("installPlugin", "app.plugin.install_id.app_error", nil, "", http.StatusBadRequest)
+ if !replace {
+ return nil, model.NewAppError("installPlugin", "app.plugin.install_id.app_error", nil, "", http.StatusBadRequest)
+ }
+
+ if err := a.RemovePlugin(manifest.Id); err != nil {
+ return nil, model.NewAppError("installPlugin", "app.plugin.install_id_failed_remove.app_error", nil, "", http.StatusBadRequest)
+ }
}
}