[MM-45296] Fix installation of pre-packaged plugins that are not in the Marketplace (#21895)
Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
a52a6d9abd
Коммит
e8915b3182
@@ -1722,14 +1722,26 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
appErr := th.App.AddPublicKey("pub_key", key)
|
appErr := th.App.AddPublicKey("pub_key", key)
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
appErr = th.App.DeletePublicKey("pub_key")
|
||||||
|
require.Nil(t, appErr)
|
||||||
|
})
|
||||||
|
|
||||||
testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
||||||
serverVersion := req.URL.Query().Get("server_version")
|
serverVersion := req.URL.Query().Get("server_version")
|
||||||
require.NotEmpty(t, serverVersion)
|
require.NotEmpty(t, serverVersion)
|
||||||
require.Equal(t, model.CurrentVersion, serverVersion)
|
require.Equal(t, model.CurrentVersion, serverVersion)
|
||||||
res.WriteHeader(http.StatusOK)
|
res.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
var out []byte
|
var out []byte
|
||||||
|
|
||||||
|
// Return something if testplugin2 or no specific plugin is requested
|
||||||
|
pluginID := req.URL.Query().Get("plugin_id")
|
||||||
|
if pluginID == "" || pluginID == samplePlugins[1].Manifest.Id {
|
||||||
out, err = json.Marshal([]*model.MarketplacePlugin{samplePlugins[1]})
|
out, err = json.Marshal([]*model.MarketplacePlugin{samplePlugins[1]})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
res.Write(out)
|
res.Write(out)
|
||||||
}))
|
}))
|
||||||
defer testServer.Close()
|
defer testServer.Close()
|
||||||
@@ -1748,7 +1760,7 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
require.Len(t, pluginsResp.Active, 0)
|
require.Len(t, pluginsResp.Active, 0)
|
||||||
require.Len(t, pluginsResp.Inactive, 0)
|
require.Len(t, pluginsResp.Inactive, 0)
|
||||||
|
|
||||||
// Should fail to install unknown prepackaged plugin
|
t.Run("Should fail to install unknown prepackaged plugin", func(t *testing.T) {
|
||||||
pRequest := &model.InstallMarketplacePluginRequest{Id: "testpluginXX"}
|
pRequest := &model.InstallMarketplacePluginRequest{Id: "testpluginXX"}
|
||||||
manifest, resp, err := client.InstallMarketplacePlugin(pRequest)
|
manifest, resp, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
@@ -1764,27 +1776,36 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, pluginsResp.Active, 0)
|
require.Len(t, pluginsResp.Active, 0)
|
||||||
require.Len(t, pluginsResp.Inactive, 0)
|
require.Len(t, pluginsResp.Inactive, 0)
|
||||||
|
})
|
||||||
|
|
||||||
pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin"}
|
t.Run("Install prepackaged plugin with Marketplace disabled", func(t *testing.T) {
|
||||||
manifest1, _, err := client.InstallMarketplacePlugin(pRequest)
|
pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin"}
|
||||||
|
manifest, _, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, manifest1)
|
require.NotNil(t, manifest)
|
||||||
require.Equal(t, "testplugin", manifest1.Id)
|
require.Equal(t, "testplugin", manifest.Id)
|
||||||
require.Equal(t, "0.0.1", manifest1.Version)
|
require.Equal(t, "0.0.1", manifest.Version)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
_, err = client.RemovePlugin(manifest.Id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
pluginsResp, _, err = client.GetPlugins()
|
pluginsResp, _, err = client.GetPlugins()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, pluginsResp.Active, 0)
|
require.Len(t, pluginsResp.Active, 0)
|
||||||
require.Equal(t, pluginsResp.Inactive, []*model.PluginInfo{{
|
require.Equal(t, pluginsResp.Inactive, []*model.PluginInfo{{
|
||||||
Manifest: *manifest1,
|
Manifest: *manifest,
|
||||||
}})
|
}})
|
||||||
|
})
|
||||||
|
|
||||||
// Try to install remote marketplace plugin
|
t.Run("Try to install remote marketplace plugin while Marketplace is disabled", func(t *testing.T) {
|
||||||
pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2"}
|
pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin2"}
|
||||||
manifest, resp, err = client.InstallMarketplacePlugin(pRequest)
|
manifest, resp, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
CheckInternalErrorStatus(t, resp)
|
CheckInternalErrorStatus(t, resp)
|
||||||
require.Nil(t, manifest)
|
require.Nil(t, manifest)
|
||||||
|
})
|
||||||
|
|
||||||
// Enable remote marketplace
|
// Enable remote marketplace
|
||||||
th.App.UpdateConfig(func(cfg *model.Config) {
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
||||||
@@ -1794,6 +1815,34 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
*cfg.PluginSettings.AllowInsecureDownloadURL = true
|
*cfg.PluginSettings.AllowInsecureDownloadURL = true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("Install prepackaged, not listed plugin with Marketplace enabled", func(t *testing.T) {
|
||||||
|
pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin"}
|
||||||
|
manifest, _, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
_, err = client.RemovePlugin(manifest.Id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
require.NotNil(t, manifest)
|
||||||
|
assert.Equal(t, "testplugin", manifest.Id)
|
||||||
|
assert.Equal(t, "0.0.1", manifest.Version)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Install both a prepacked and a Marketplace plugin", func(t *testing.T) {
|
||||||
|
pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin"}
|
||||||
|
manifest1, _, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, manifest1)
|
||||||
|
assert.Equal(t, "testplugin", manifest1.Id)
|
||||||
|
assert.Equal(t, "0.0.1", manifest1.Version)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
_, err = client.RemovePlugin(manifest1.Id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2"}
|
pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2"}
|
||||||
manifest2, _, err := client.InstallMarketplacePlugin(pRequest)
|
manifest2, _, err := client.InstallMarketplacePlugin(pRequest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -1801,6 +1850,11 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
require.Equal(t, "testplugin2", manifest2.Id)
|
require.Equal(t, "testplugin2", manifest2.Id)
|
||||||
require.Equal(t, "1.2.3", manifest2.Version)
|
require.Equal(t, "1.2.3", manifest2.Version)
|
||||||
|
|
||||||
|
t.Cleanup(func() {
|
||||||
|
_, err = client.RemovePlugin(manifest2.Id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
pluginsResp, _, err = client.GetPlugins()
|
pluginsResp, _, err = client.GetPlugins()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, pluginsResp.Active, 0)
|
require.Len(t, pluginsResp.Active, 0)
|
||||||
@@ -1812,13 +1866,7 @@ func TestInstallMarketplacePluginPrepackagedDisabled(t *testing.T) {
|
|||||||
Manifest: *manifest2,
|
Manifest: *manifest2,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
})
|
||||||
// Clean up
|
|
||||||
_, err = client.RemovePlugin(manifest1.Id)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
_, err = client.RemovePlugin(manifest2.Id)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
appErr = th.App.DeletePublicKey("pub_key")
|
appErr = th.App.DeletePublicKey("pub_key")
|
||||||
require.Nil(t, appErr)
|
require.Nil(t, appErr)
|
||||||
|
|||||||
@@ -203,10 +203,12 @@ func (ch *Channels) InstallMarketplacePlugin(request *model.InstallMarketplacePl
|
|||||||
if *ch.cfgSvc.Config().PluginSettings.EnableRemoteMarketplace {
|
if *ch.cfgSvc.Config().PluginSettings.EnableRemoteMarketplace {
|
||||||
var plugin *model.BaseMarketplacePlugin
|
var plugin *model.BaseMarketplacePlugin
|
||||||
plugin, appErr = ch.getRemoteMarketplacePlugin(request.Id, request.Version)
|
plugin, appErr = ch.getRemoteMarketplacePlugin(request.Id, request.Version)
|
||||||
if appErr != nil {
|
// The plugin might only be prepackaged and not on the Marketplace.
|
||||||
return nil, appErr
|
if appErr != nil && appErr.Id != "app.plugin.marketplace_plugins.not_found.app_error" {
|
||||||
|
mlog.Warn("Failed to reach Marketplace to install plugin", mlog.String("plugin_id", request.Id), mlog.Err(appErr))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if plugin != nil {
|
||||||
var prepackagedVersion semver.Version
|
var prepackagedVersion semver.Version
|
||||||
if prepackagedPlugin != nil {
|
if prepackagedPlugin != nil {
|
||||||
var err error
|
var err error
|
||||||
@@ -234,6 +236,7 @@ func (ch *Channels) InstallMarketplacePlugin(request *model.InstallMarketplacePl
|
|||||||
signatureFile = signature
|
signatureFile = signature
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if pluginFile == nil {
|
if pluginFile == nil {
|
||||||
return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, "", http.StatusInternalServerError)
|
return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, "", http.StatusInternalServerError)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user