MM-60679 - Validate playbook plugin version, based on license (#28366)

Automatic Merge
Этот коммит содержится в:
Scott Bishel
2024-10-02 12:14:32 -06:00
коммит произвёл GitHub
родитель 1ea854438a
Коммит 0048723ccd
2 изменённых файлов: 89 добавлений и 0 удалений

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

@@ -1316,6 +1316,78 @@ func TestGetPrepackagedPluginInMarketplace(t *testing.T) {
})
}
func TestGetPrepackagedPlaybooksPluginIn(t *testing.T) {
th := Setup(t)
defer th.TearDown()
testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
res.WriteHeader(http.StatusOK)
json, err := json.Marshal([]*model.MarketplacePlugin{})
require.NoError(t, err)
res.Write(json)
}))
defer testServer.Close()
prepackagePlugins := []*plugin.PrepackagedPlugin{
{
Manifest: &model.Manifest{
Version: "1.40.0",
Id: "playbooks",
},
},
{
Manifest: &model.Manifest{
Version: "2.0.1",
Id: "playbooks",
},
},
}
env := th.App.GetPluginsEnvironment()
env.SetPrepackagedPlugins(prepackagePlugins, nil)
th.App.UpdateConfig(func(cfg *model.Config) {
*cfg.PluginSettings.Enable = true
*cfg.PluginSettings.EnableMarketplace = true
*cfg.PluginSettings.MarketplaceURL = testServer.URL
})
t.Run("playbooks v1 is returned if not licensed", func(t *testing.T) {
plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{})
require.NoError(t, err)
expectedPlugins := prepackagePlugins[0]
require.Equal(t, expectedPlugins.Manifest.Version, plugins[0].Manifest.Version)
require.Len(t, plugins, 1)
})
t.Run("playbooks v2 is returned if Enterprise licensed", func(t *testing.T) {
lic := th.App.Srv().License()
th.App.Srv().SetLicense(model.NewTestLicenseSKU("enterprise"))
defer th.App.Srv().SetLicense(lic)
plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{})
require.NoError(t, err)
expectedPlugins := prepackagePlugins[1]
require.Equal(t, expectedPlugins.Manifest.Version, plugins[0].Manifest.Version)
require.Len(t, plugins, 1)
})
t.Run("playbooks v1 is returned if professional licensed", func(t *testing.T) {
lic := th.App.Srv().License()
th.App.Srv().SetLicense(model.NewTestLicenseSKU("professional"))
defer th.App.Srv().SetLicense(lic)
plugins, _, err := th.SystemAdminClient.GetMarketplacePlugins(context.Background(), &model.MarketplacePluginFilter{})
require.NoError(t, err)
expectedPlugins := prepackagePlugins[0]
require.Equal(t, expectedPlugins.Manifest.Version, plugins[0].Manifest.Version)
require.Len(t, plugins, 1)
})
}
func TestInstallMarketplacePlugin(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()

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

@@ -670,6 +670,7 @@ func (a *App) mergePrepackagedPlugins(remoteMarketplacePlugins map[string]*model
return model.NewAppError("mergePrepackagedPlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError)
}
isEnterpriseLicense := a.License() != nil && a.License().IsE20OrEnterprise()
for _, prepackaged := range pluginsEnvironment.PrepackagedPlugins() {
if prepackaged.Manifest == nil {
continue
@@ -684,6 +685,22 @@ func (a *App) mergePrepackagedPlugins(remoteMarketplacePlugins map[string]*model
},
}
// If not enterprise, check version.
// Playbooks is not listed in the marketplace, this only handles prepackaged.
if !isEnterpriseLicense {
if prepackaged.Manifest.Id == model.PluginIdPlaybooks {
version, err := semver.Parse(prepackaged.Manifest.Version)
if err != nil {
mlog.Error("Unable to verify prepackaged playbooks version", mlog.Err(err))
continue
}
// Do not show playbooks >=v2 if we do not have an enterprise license
if version.GTE(SemVerV2) {
continue
}
}
}
// If not available in marketplace, add the prepackaged
if remoteMarketplacePlugins[prepackaged.Manifest.Id] == nil {
remoteMarketplacePlugins[prepackaged.Manifest.Id] = prepackagedMarketplace