diff --git a/api4/plugin_test.go b/api4/plugin_test.go index a3758c2a9b..24e8a16390 100644 --- a/api4/plugin_test.go +++ b/api4/plugin_test.go @@ -1371,6 +1371,111 @@ func TestInstallMarketplacePlugin(t *testing.T) { require.Nil(t, appErr) }) + t.Run("verify EnterprisePlugins is false for TE", func(t *testing.T) { + requestHandled := false + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + licenseType, ok := req.URL.Query()["enterprise_plugins"] + require.True(t, ok) + require.Len(t, licenseType, 1) + require.Equal(t, "false", licenseType[0]) + + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[0]}) + require.NoError(t, err) + _, err = res.Write(json) + require.NoError(t, err) + + requestHandled = true + })) + defer func() { testServer.Close() }() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + }) + + // The content of the request is irrelevant. This test only cares about enterprise_plugins. + pRequest := &model.InstallMarketplacePluginRequest{} + manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + assert.True(t, requestHandled) + }) + + t.Run("verify EnterprisePlugins is false for E10", func(t *testing.T) { + requestHandled := false + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + licenseType, ok := req.URL.Query()["enterprise_plugins"] + require.True(t, ok) + require.Len(t, licenseType, 1) + require.Equal(t, "false", licenseType[0]) + + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{}) + require.NoError(t, err) + _, err = res.Write(json) + require.NoError(t, err) + + requestHandled = true + })) + defer func() { testServer.Close() }() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + }) + + l := model.NewTestLicense() + // model.NewTestLicense generates a E20 license + *l.Features.EnterprisePlugins = false + th.App.Srv().SetLicense(l) + + // The content of the request is irrelevant. This test only cares about enterprise_plugins. + pRequest := &model.InstallMarketplacePluginRequest{} + manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + assert.True(t, requestHandled) + }) + + t.Run("verify EnterprisePlugins is true for E20", func(t *testing.T) { + requestHandled := false + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + licenseType, ok := req.URL.Query()["enterprise_plugins"] + require.True(t, ok) + require.Len(t, licenseType, 1) + require.Equal(t, "true", licenseType[0]) + + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{}) + require.NoError(t, err) + _, err = res.Write(json) + require.NoError(t, err) + + requestHandled = true + })) + defer func() { testServer.Close() }() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + }) + + th.App.Srv().SetLicense(model.NewTestLicense("enterprise_plugins")) + + // The content of the request is irrelevant. This test only cares about enterprise_plugins. + pRequest := &model.InstallMarketplacePluginRequest{} + manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + assert.True(t, requestHandled) + }) + t.Run("install prepackaged and remote plugins through marketplace", func(t *testing.T) { prepackagedPluginsDir := "prepackaged_plugins" diff --git a/app/plugin.go b/app/plugin.go index 07f26cbe08..39242589c2 100644 --- a/app/plugin.go +++ b/app/plugin.go @@ -497,7 +497,9 @@ func (a *App) getRemoteMarketplacePlugin(pluginId, version string) (*model.BaseM return nil, model.NewAppError("GetMarketplacePlugin", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) } - filter := &model.MarketplacePluginFilter{Filter: pluginId, ServerVersion: model.CurrentVersion} + filter := a.getBaseMarketplaceFilter() + filter.Filter = pluginId + plugin, err := marketplaceClient.GetPlugin(filter, version) if err != nil { return nil, model.NewAppError("GetMarketplacePlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, err.Error(), http.StatusInternalServerError) @@ -522,20 +524,9 @@ func (a *App) getRemotePlugins() (map[string]*model.MarketplacePlugin, *model.Ap return nil, model.NewAppError("getRemotePlugins", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) } + filter := a.getBaseMarketplaceFilter() // Fetch all plugins from marketplace. - filter := &model.MarketplacePluginFilter{ - PerPage: -1, - ServerVersion: model.CurrentVersion, - } - - license := a.Srv().License() - if license != nil && *license.Features.EnterprisePlugins { - filter.EnterprisePlugins = true - } - - if model.BuildEnterpriseReady == "true" { - filter.BuildEnterpriseReady = true - } + filter.PerPage = -1 marketplacePlugins, err := marketplaceClient.GetPlugins(filter) if err != nil { @@ -655,6 +646,23 @@ func (a *App) mergeLocalPlugins(remoteMarketplacePlugins map[string]*model.Marke return nil } +func (a *App) getBaseMarketplaceFilter() *model.MarketplacePluginFilter { + filter := &model.MarketplacePluginFilter{ + ServerVersion: model.CurrentVersion, + } + + license := a.Srv().License() + if license != nil && *license.Features.EnterprisePlugins { + filter.EnterprisePlugins = true + } + + if model.BuildEnterpriseReady == "true" { + filter.BuildEnterpriseReady = true + } + + return filter +} + func pluginMatchesFilter(manifest *model.Manifest, filter string) bool { filter = strings.TrimSpace(strings.ToLower(filter))