From 87eb7697f9e57ae8ebb6bb14d95ba82d095183e6 Mon Sep 17 00:00:00 2001 From: Maria A Nunez Date: Wed, 15 Jan 2020 13:38:55 -0500 Subject: [PATCH] MM-19606- Rework Prepackaged Plugins (#13449) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MM-19609 - Add new prepackage configuration settings (#13062) * Add signatures to the prepackaged plugins (#13138) * MM-19612 - Support querying local plugin marketplace when upst… (#13250) * MM-19612 - Support querying local plugin marketplace when upstream unavailable or disabled * Update translations file * Fixed comment * Updated to check EnableRemoteMarketplace setting and LocalOnly to get marketplace plugins * Fixed unit tests * Tests cleanup code * Removed unused error message * Updated tests * MM-19614- Updated Marketplace Service error id (#13388) * [MM-19610] Consume prepackaged plugins (#13005) * consume prepackaged plugins into memory * missing i18n * remove spurious .gitignore changes * return on failure to install prepackged plugins * cleanup * s/plugins/availablePlugins * whitespace * don't return extractDir when not needed * s/plug/plugin * error on icon, cleanup * update armored version of testplugin signature * honour AutomaticPrepackagedPlugins * document getPrepackagedPlugin * MM-19613 - Include prepackaged plugins in marketplace results (#13433) * Added prepackaged plugins to marketplace results * PR Feedback * PR Feedback * Update error where definition * Removing unnecessary var declaration * Updated comments * MM-21263 - Use EnableRemoteMarketplace in marketplace install… (#13438) * MM-21263 - Use EnableRemoteMarketplace in marketplace install endpoint * Call updateConfig before calling NewServer in TestHelper * Added translations * PR feedback * Translations * Feedback * s/helpers.go/download.go * Converging env.PrepackagedPlugins * Initial PR feedback * Ordered imports properly * Updated DownloadURL to return slice of bytes * Fixed method typo * Fixed logging * Added read lock for prepackaged plugins list * PR Feedback * Added condition to only install prepackaged plugin if it was previously enabled * Linting * Updated to check plugin state in config * Closing filereader * Only add local label if remote marketplace is enabled * Updated local tag description * Fixed tests Co-authored-by: Ali Farooq Co-authored-by: Shota Gvinepadze Co-authored-by: Jesse Hallam Co-authored-by: Ben Schumacher --- api4/apitestlib.go | 27 +- api4/plugin.go | 68 +-- api4/plugin_test.go | 543 +++++++++++++++++- app/download.go | 44 ++ app/helper_test.go | 21 +- app/plugin.go | 435 ++++++++++---- app/plugin_install.go | 123 +++- app/plugin_test.go | 371 +++++++++--- build/release.mk | 4 + go.mod | 1 + go.sum | 2 + i18n/en.json | 30 +- model/config.go | 34 +- model/marketplace_plugin.go | 2 + plugin/environment.go | 38 +- tests/testplugin.tar.gz | Bin 71920 -> 71914 bytes tests/testplugin.tar.gz.asc | 27 +- tests/testplugin.tar.gz.sig | Bin 438 -> 438 bytes tests/testplugin2.tar.gz | Bin 0 -> 71921 bytes tests/testplugin2.tar.gz.sig | Bin 0 -> 438 bytes tests/testpluginv2.tar.gz | Bin 71997 -> 0 bytes tests/testpluginv2.tar.gz.sig | Bin 438 -> 0 bytes .../github.com/h2non/go-is-svg/.editorconfig | 12 + vendor/github.com/h2non/go-is-svg/.gitignore | 7 + vendor/github.com/h2non/go-is-svg/.travis.yml | 23 + vendor/github.com/h2non/go-is-svg/LICENSE | 24 + vendor/github.com/h2non/go-is-svg/README.md | 47 ++ vendor/github.com/h2non/go-is-svg/svg.go | 36 ++ vendor/modules.txt | 2 + 29 files changed, 1554 insertions(+), 367 deletions(-) create mode 100644 app/download.go create mode 100644 tests/testplugin2.tar.gz create mode 100644 tests/testplugin2.tar.gz.sig delete mode 100644 tests/testpluginv2.tar.gz delete mode 100644 tests/testpluginv2.tar.gz.sig create mode 100644 vendor/github.com/h2non/go-is-svg/.editorconfig create mode 100644 vendor/github.com/h2non/go-is-svg/.gitignore create mode 100644 vendor/github.com/h2non/go-is-svg/.travis.yml create mode 100644 vendor/github.com/h2non/go-is-svg/LICENSE create mode 100644 vendor/github.com/h2non/go-is-svg/README.md create mode 100644 vendor/github.com/h2non/go-is-svg/svg.go diff --git a/api4/apitestlib.go b/api4/apitestlib.go index 7f794f4bcb..cdcf490a7f 100644 --- a/api4/apitestlib.go +++ b/api4/apitestlib.go @@ -9,6 +9,7 @@ import ( "net" "net/http" "os" + "path/filepath" "strings" "testing" "time" @@ -63,11 +64,24 @@ func UseTestStore(store store.Store) { func setupTestHelper(enterprise bool, updateConfig func(*model.Config)) *TestHelper { testStore.DropAllTables() + tempWorkspace, err := ioutil.TempDir("", "apptest") + if err != nil { + panic(err) + } + memoryStore, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{IgnoreEnvironmentOverrides: true}) if err != nil { panic("failed to initialize memory store: " + err.Error()) } + config := memoryStore.Get() + *config.PluginSettings.Directory = filepath.Join(tempWorkspace, "plugins") + *config.PluginSettings.ClientDirectory = filepath.Join(tempWorkspace, "webapp") + if updateConfig != nil { + updateConfig(config) + } + memoryStore.Set(config) + var options []app.Option options = append(options, app.ConfigStore(memoryStore)) options = append(options, app.StoreOverride(testStore)) @@ -94,9 +108,6 @@ func setupTestHelper(enterprise bool, updateConfig func(*model.Config)) *TestHel }) prevListenAddress := *th.App.Config().ServiceSettings.ListenAddress th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ListenAddress = ":0" }) - if updateConfig != nil { - th.App.UpdateConfig(updateConfig) - } serverErr := th.Server.Start() if serverErr != nil { panic(serverErr) @@ -130,11 +141,7 @@ func setupTestHelper(enterprise bool, updateConfig func(*model.Config)) *TestHel th.SystemAdminClient = th.CreateClient() if th.tempWorkspace == "" { - dir, err := ioutil.TempDir("", "apptest") - if err != nil { - panic(err) - } - th.tempWorkspace = dir + th.tempWorkspace = tempWorkspace } return th @@ -580,9 +587,7 @@ func CheckEtag(t *testing.T, data interface{}, resp *model.Response) { func CheckNoError(t *testing.T, resp *model.Response) { t.Helper() - if resp.Error != nil { - require.FailNow(t, "Expected no error, got %q", resp.Error.Error()) - } + require.Nil(t, resp.Error, "expected no error") } func checkHTTPStatus(t *testing.T, resp *model.Response, expectedStatus int, expectError bool) { diff --git a/api4/plugin.go b/api4/plugin.go index 6e74ec2d1f..74a7c734ec 100644 --- a/api4/plugin.go +++ b/api4/plugin.go @@ -9,10 +9,9 @@ import ( "bytes" "encoding/json" "io" - "io/ioutil" "net/http" "net/url" - "time" + "strconv" "github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/model" @@ -20,9 +19,6 @@ import ( const ( MAXIMUM_PLUGIN_FILE_SIZE = 50 * 1024 * 1024 - // INSTALL_PLUGIN_FROM_URL_HTTP_REQUEST_TIMEOUT defines a high timeout for installing plugins - // from an external URL to avoid slow connections or large plugins from failing to install. - INSTALL_PLUGIN_FROM_URL_HTTP_REQUEST_TIMEOUT = 60 * time.Minute ) func (api *API) InitPlugin() { @@ -100,15 +96,15 @@ func installPluginFromUrl(c *Context, w http.ResponseWriter, r *http.Request) { } force := r.URL.Query().Get("force") == "true" - downloadUrl := r.URL.Query().Get("plugin_download_url") + downloadURL := r.URL.Query().Get("plugin_download_url") - pluginFile, err := downloadFromUrl(c, downloadUrl) + pluginFileBytes, err := c.App.DownloadFromURL(downloadURL) if err != nil { - c.Err = err + c.Err = model.NewAppError("installPluginFromUrl", "api.plugin.install.download_failed.app_error", nil, err.Error(), http.StatusBadRequest) return } - installPlugin(c, w, pluginFile, force) + installPlugin(c, w, bytes.NewReader(pluginFileBytes), force) } func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request) { @@ -132,28 +128,13 @@ func installMarketplacePlugin(c *Context, w http.ResponseWriter, r *http.Request c.Err = model.NewAppError("installMarketplacePlugin", "app.plugin.marketplace_plugin_request.app_error", nil, err.Error(), http.StatusNotImplemented) return } - plugin, appErr := c.App.GetMarketplacePlugin(pluginRequest) + + manifest, appErr := c.App.InstallMarketplacePlugin(pluginRequest) if appErr != nil { c.Err = appErr return } - pluginFile, appErr := downloadFromUrl(c, plugin.DownloadURL) - if appErr != nil { - c.Err = appErr - return - } - signature, err := plugin.DecodeSignature() - if err != nil { - c.Err = model.NewAppError("installMarketplacePlugin", "app.plugin.signature_decode.app_error", nil, err.Error(), http.StatusNotImplemented) - return - } - - manifest, appErr := c.App.InstallPluginWithSignature(pluginFile, signature) - if appErr != nil { - c.Err = appErr - return - } w.WriteHeader(http.StatusCreated) w.Write([]byte(manifest.ToJson())) } @@ -347,45 +328,20 @@ func parseMarketplacePluginFilter(u *url.URL) (*model.MarketplacePluginFilter, e filter := u.Query().Get("filter") serverVersion := u.Query().Get("server_version") + localOnly, err := strconv.ParseBool(u.Query().Get("local_only")) + if err != nil { + localOnly = false + } return &model.MarketplacePluginFilter{ Page: page, PerPage: perPage, Filter: filter, ServerVersion: serverVersion, + LocalOnly: localOnly, }, nil } -func downloadFromUrl(c *Context, downloadUrl string) (io.ReadSeeker, *model.AppError) { - if !model.IsValidHttpUrl(downloadUrl) { - return nil, model.NewAppError("downloadFromUrl", "api.plugin.install.invalid_url.app_error", nil, "", http.StatusBadRequest) - } - - u, err := url.ParseRequestURI(downloadUrl) - if err != nil { - return nil, model.NewAppError("downloadFromUrl", "api.plugin.install.invalid_url.app_error", nil, "", http.StatusBadRequest) - } - if !*c.App.Config().PluginSettings.AllowInsecureDownloadUrl && u.Scheme != "https" { - return nil, model.NewAppError("downloadFromUrl", "api.plugin.install.insecure_url.app_error", nil, "", http.StatusBadRequest) - } - - client := c.App.HTTPService.MakeClient(true) - client.Timeout = INSTALL_PLUGIN_FROM_URL_HTTP_REQUEST_TIMEOUT - - resp, err := client.Get(downloadUrl) - if err != nil { - return nil, model.NewAppError("downloadFromUrl", "api.plugin.install.download_failed.app_error", nil, err.Error(), http.StatusBadRequest) - } - defer resp.Body.Close() - - fileBytes, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, model.NewAppError("downloadFromUrl", "api.plugin.install.reading_stream_failed.app_error", nil, err.Error(), http.StatusBadRequest) - } - - return bytes.NewReader(fileBytes), nil -} - func installPlugin(c *Context, w http.ResponseWriter, plugin io.ReadSeeker, force bool) { manifest, appErr := c.App.InstallPlugin(plugin, force) if appErr != nil { diff --git a/api4/plugin_test.go b/api4/plugin_test.go index 8ac031bff8..eee0d1e5e0 100644 --- a/api4/plugin_test.go +++ b/api4/plugin_test.go @@ -18,8 +18,11 @@ import ( "time" "github.com/mattermost/mattermost-server/v5/model" + "github.com/mattermost/mattermost-server/v5/plugin" "github.com/mattermost/mattermost-server/v5/testlib" + "github.com/mattermost/mattermost-server/v5/utils" "github.com/mattermost/mattermost-server/v5/utils/fileutils" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -61,6 +64,10 @@ func TestPlugin(t *testing.T) { CheckNoError(t, resp) assert.Equal(t, "testplugin", manifest.Id) + ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) + CheckNoError(t, resp) + require.True(t, ok) + t.Run("install plugin from URL with slow response time", func(t *testing.T) { if testing.Short() { t.Skip("skipping test to install plugin from a slow response server") @@ -163,7 +170,7 @@ func TestPlugin(t *testing.T) { assert.False(t, found) // Successful activate - ok, resp := th.SystemAdminClient.EnablePlugin(manifest.Id) + ok, resp = th.SystemAdminClient.EnablePlugin(manifest.Id) CheckNoError(t, resp) assert.True(t, ok) @@ -602,7 +609,7 @@ func TestGetInstalledMarketplacePlugins(t *testing.T) { DownloadURL: "", Labels: []model.MarketplaceLabel{{ Name: "Local", - Description: "This plugin is not listed in the marketplace but was installed manually", + Description: "This plugin is not listed in the marketplace", }}, Manifest: manifest, }, @@ -673,7 +680,7 @@ func TestGetInstalledMarketplacePlugins(t *testing.T) { plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) CheckNoError(t, resp) - newPlugin.InstalledVersion = manifest.Version + newPlugin.InstalledVersion = "" require.Equal(t, expectedPlugins, plugins) }) } @@ -701,7 +708,7 @@ func TestSearchGetMarketplacePlugins(t *testing.T) { tarData, err := ioutil.ReadFile(filepath.Join(path, "testplugin.tar.gz")) require.NoError(t, err) - tarDataV2, err := ioutil.ReadFile(filepath.Join(path, "testpluginv2.tar.gz")) + tarDataV2, err := ioutil.ReadFile(filepath.Join(path, "testplugin2.tar.gz")) require.NoError(t, err) t.Run("search installed plugin", func(t *testing.T) { @@ -730,37 +737,37 @@ func TestSearchGetMarketplacePlugins(t *testing.T) { manifest, resp := th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarData)) CheckNoError(t, resp) - newPluginV1 := &model.MarketplacePlugin{ + plugin1 := &model.MarketplacePlugin{ BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ HomepageURL: "", IconData: "", DownloadURL: "", Labels: []model.MarketplaceLabel{{ Name: "Local", - Description: "This plugin is not listed in the marketplace but was installed manually", + Description: "This plugin is not listed in the marketplace", }}, Manifest: manifest, }, InstalledVersion: manifest.Version, } - expectedPlugins := append(samplePlugins, newPluginV1) + expectedPlugins := append(samplePlugins, plugin1) manifest, resp = th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarDataV2)) CheckNoError(t, resp) - newPluginV2 := &model.MarketplacePlugin{ + plugin2 := &model.MarketplacePlugin{ BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ HomepageURL: "", IconData: "", DownloadURL: "", Labels: []model.MarketplaceLabel{{ Name: "Local", - Description: "This plugin is not listed in the marketplace but was installed manually", + Description: "This plugin is not listed in the marketplace", }}, Manifest: manifest, }, InstalledVersion: manifest.Version, } - expectedPlugins = append(expectedPlugins, newPluginV2) + expectedPlugins = append(expectedPlugins, plugin2) sort.SliceStable(expectedPlugins, func(i, j int) bool { return strings.ToLower(expectedPlugins[i].Manifest.Name) < strings.ToLower(expectedPlugins[j].Manifest.Name) }) @@ -770,13 +777,13 @@ func TestSearchGetMarketplacePlugins(t *testing.T) { require.Equal(t, expectedPlugins, plugins) // Search for plugins from the server - plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "testplugin_v2"}) + plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "testplugin2"}) CheckNoError(t, resp) - require.Equal(t, []*model.MarketplacePlugin{newPluginV2}, plugins) + require.Equal(t, []*model.MarketplacePlugin{plugin2}, plugins) - plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "dsgsdg_v2"}) + plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "a second plugin"}) CheckNoError(t, resp) - require.Equal(t, []*model.MarketplacePlugin{newPluginV2}, plugins) + require.Equal(t, []*model.MarketplacePlugin{plugin2}, plugins) plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "User Satisfaction Surveys"}) CheckNoError(t, resp) @@ -785,6 +792,270 @@ func TestSearchGetMarketplacePlugins(t *testing.T) { plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{Filter: "NOFILTER"}) CheckNoError(t, resp) require.Nil(t, plugins) + + // cleanup + ok, resp := th.SystemAdminClient.RemovePlugin(plugin1.Manifest.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + ok, resp = th.SystemAdminClient.RemovePlugin(plugin2.Manifest.Id) + CheckNoError(t, resp) + assert.True(t, ok) + }) +} + +func TestGetLocalPluginInMarketplace(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + samplePlugins := []*model.MarketplacePlugin{ + { + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + HomepageURL: "https://example.com/mattermost/mattermost-plugin-nps", + IconData: "https://example.com/icon.svg", + DownloadURL: "www.github.com/example", + Manifest: &model.Manifest{ + Id: "testplugin2", + Name: "testplugin2", + Description: "a second plugin", + Version: "1.2.2", + MinServerVersion: "", + }, + }, + InstalledVersion: "", + }, + } + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[0]}) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + }) + + t.Run("Get plugins with EnableRemoteMarketplace enabled", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + }) + + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + require.Len(t, plugins, len(samplePlugins)) + require.Equal(t, samplePlugins, plugins) + }) + + t.Run("get remote and local plugins", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + }) + + // Upload one local plugin + path, _ := fileutils.FindDir("tests") + tarData, err := ioutil.ReadFile(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + + manifest, resp := th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarData)) + CheckNoError(t, resp) + + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + require.Len(t, plugins, 2) + + ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) + CheckNoError(t, resp) + assert.True(t, ok) + }) + + t.Run("EnableRemoteMarketplace disabled", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = false + *cfg.PluginSettings.EnableUploads = true + }) + + // No marketplace plugins returned + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + require.Len(t, plugins, 0) + + // Upload one local plugin + path, _ := fileutils.FindDir("tests") + tarData, err := ioutil.ReadFile(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + + manifest, resp := th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarData)) + CheckNoError(t, resp) + + newPlugin := &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Manifest: manifest, + }, + InstalledVersion: manifest.Version, + } + + plugins, resp = th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + // Only get the local plugins + require.Len(t, plugins, 1) + require.Equal(t, newPlugin, plugins[0]) + + ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) + CheckNoError(t, resp) + assert.True(t, ok) + }) + + t.Run("local_only true", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + }) + + // Upload one local plugin + path, _ := fileutils.FindDir("tests") + tarData, err := ioutil.ReadFile(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + + manifest, resp := th.SystemAdminClient.UploadPlugin(bytes.NewReader(tarData)) + CheckNoError(t, resp) + + newPlugin := &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Manifest: manifest, + Labels: []model.MarketplaceLabel{{ + Name: "Local", + Description: "This plugin is not listed in the marketplace", + }}, + }, + InstalledVersion: manifest.Version, + } + + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{LocalOnly: true}) + CheckNoError(t, resp) + + require.Len(t, plugins, 1) + require.Equal(t, newPlugin, plugins[0]) + + ok, resp := th.SystemAdminClient.RemovePlugin(manifest.Id) + CheckNoError(t, resp) + assert.True(t, ok) + }) +} + +func TestGetPrepackagedPluginInMarketplace(t *testing.T) { + th := Setup().InitBasic() + defer th.TearDown() + + marketplacePlugins := []*model.MarketplacePlugin{ + { + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + HomepageURL: "https://example.com/mattermost/mattermost-plugin-nps", + IconData: "https://example.com/icon.svg", + DownloadURL: "www.github.com/example", + Manifest: &model.Manifest{ + Id: "marketplace.test", + Name: "marketplacetest", + Description: "a marketplace plugin", + Version: "0.1.2", + MinServerVersion: "", + }, + }, + InstalledVersion: "", + }, + } + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{marketplacePlugins[0]}) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + }) + + prepackagePlugin := &plugin.PrepackagedPlugin{ + Manifest: &model.Manifest{ + Version: "0.0.1", + Id: "prepackaged.test", + }, + } + + env := th.App.GetPluginsEnvironment() + env.SetPrepackagedPlugins([]*plugin.PrepackagedPlugin{prepackagePlugin}) + + t.Run("get remote and prepackaged plugins", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + }) + + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + expectedPlugins := marketplacePlugins + expectedPlugins = append(expectedPlugins, &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Manifest: prepackagePlugin.Manifest, + }, + }) + + require.ElementsMatch(t, expectedPlugins, plugins) + require.Len(t, plugins, 2) + }) + + t.Run("EnableRemoteMarketplace disabled", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = false + *cfg.PluginSettings.EnableUploads = true + }) + + // No marketplace plugins returned + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + // Only returns the prepackaged plugins + require.Len(t, plugins, 1) + require.Equal(t, prepackagePlugin.Manifest, plugins[0].Manifest) + }) + + t.Run("get prepackaged plugin if newer", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.EnableUploads = true + }) + + manifest := &model.Manifest{ + Version: "1.2.3", + Id: "marketplace.test", + } + + newerPrepackagePlugin := &plugin.PrepackagedPlugin{ + Manifest: manifest, + } + + env := th.App.GetPluginsEnvironment() + env.SetPrepackagedPlugins([]*plugin.PrepackagedPlugin{newerPrepackagePlugin}) + + plugins, resp := th.SystemAdminClient.GetMarketplacePlugins(&model.MarketplacePluginFilter{}) + CheckNoError(t, resp) + + require.Len(t, plugins, 1) + require.Equal(t, newerPrepackagePlugin.Manifest, plugins[0].Manifest) }) } @@ -797,15 +1068,16 @@ func TestInstallMarketplacePlugin(t *testing.T) { *cfg.PluginSettings.EnableUploads = true *cfg.PluginSettings.EnableMarketplace = false }) + path, _ := fileutils.FindDir("tests") - signatureFilename := "testpluginv2.tar.gz.sig" + signatureFilename := "testplugin2.tar.gz.sig" signatureFileReader, err := os.Open(filepath.Join(path, signatureFilename)) require.Nil(t, err) sigFile, err := ioutil.ReadAll(signatureFileReader) require.Nil(t, err) pluginSignature := base64.StdEncoding.EncodeToString(sigFile) - tarData, err := ioutil.ReadFile(filepath.Join(path, "testpluginv2.tar.gz")) + tarData, err := ioutil.ReadFile(filepath.Join(path, "testplugin2.tar.gz")) require.NoError(t, err) pluginServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { res.WriteHeader(http.StatusOK) @@ -820,9 +1092,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { IconData: "https://example.com/icon.svg", DownloadURL: pluginServer.URL, Manifest: &model.Manifest{ - Id: "testplugin_v2", - Name: "testplugin_v2", - Description: "dsgsdg_v2", + Id: "testplugin2", + Name: "testplugin2", + Description: "a second plugin", Version: "1.2.2", MinServerVersion: "", }, @@ -835,9 +1107,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { IconData: "https://example.com/icon.svg", DownloadURL: pluginServer.URL, Manifest: &model.Manifest{ - Id: "testplugin_v2", - Name: "testplugin_v2", - Description: "dsgsdg_v2", + Id: "testplugin2", + Name: "testplugin2", + Description: "a second plugin", Version: "1.2.3", MinServerVersion: "", }, @@ -846,7 +1118,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { InstalledVersion: "", }, } + request := &model.InstallMarketplacePluginRequest{Id: "", Version: ""} + t.Run("marketplace disabled", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = false @@ -856,6 +1130,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { CheckNotImplementedStatus(t, resp) require.Nil(t, plugin) }) + t.Run("RequirePluginSignature enabled", func(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true @@ -925,7 +1200,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL *cfg.PluginSettings.AllowInsecureDownloadUrl = true }) - pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin_v2", Version: "1.2.2"} + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.2"} plugin, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) CheckInternalErrorStatus(t, resp) require.Nil(t, plugin) @@ -945,6 +1220,7 @@ func TestInstallMarketplacePlugin(t *testing.T) { th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) @@ -953,14 +1229,14 @@ func TestInstallMarketplacePlugin(t *testing.T) { appErr := th.App.AddPublicKey("pub_key", key) require.Nil(t, appErr) - pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin_v2", Version: "1.2.3"} + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) CheckNoError(t, resp) require.NotNil(t, manifest) - require.Equal(t, "testplugin_v2", manifest.Id) + require.Equal(t, "testplugin2", manifest.Id) require.Equal(t, "1.2.3", manifest.Version) - filePath := filepath.Join(*th.App.Config().PluginSettings.Directory, "testplugin_v2.tar.gz.sig") + filePath := filepath.Join("plugins", "testplugin2.tar.gz.sig") savedSigFile, err := th.App.ReadFile(filePath) require.Nil(t, err) require.EqualValues(t, sigFile, savedSigFile) @@ -975,6 +1251,221 @@ func TestInstallMarketplacePlugin(t *testing.T) { appErr = th.App.DeletePublicKey("pub_key") require.Nil(t, appErr) }) + + t.Run("install prepackaged and remote plugins through marketplace", func(t *testing.T) { + prepackagedPluginsDir := "prepackaged_plugins" + + os.RemoveAll(prepackagedPluginsDir) + err := os.Mkdir(prepackagedPluginsDir, os.ModePerm) + require.NoError(t, err) + defer os.RemoveAll(prepackagedPluginsDir) + + prepackagedPluginsDir, found := fileutils.FindDir(prepackagedPluginsDir) + require.True(t, found, "failed to find prepackaged plugins directory") + + err = utils.CopyFile(filepath.Join(path, "testplugin.tar.gz"), filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz")) + require.NoError(t, err) + err = utils.CopyFile(filepath.Join(path, "testplugin.tar.gz.asc"), filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz.sig")) + require.NoError(t, err) + + th := SetupConfig(func(cfg *model.Config) { + // Disable auto-installing prepackaged plugins + *cfg.PluginSettings.AutomaticPrepackagedPlugins = false + }).InitBasic() + defer th.TearDown() + + pluginSignatureFile, err := os.Open(filepath.Join(path, "testplugin.tar.gz.asc")) + require.Nil(t, err) + pluginSignatureData, err := ioutil.ReadAll(pluginSignatureFile) + require.Nil(t, err) + + key, err := os.Open(filepath.Join(path, "development-private-key.asc")) + require.NoError(t, err) + appErr := th.App.AddPublicKey("pub_key", key) + require.Nil(t, appErr) + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + serverVersion := req.URL.Query().Get("server_version") + require.NotEmpty(t, serverVersion) + require.Equal(t, model.CurrentVersion, serverVersion) + res.WriteHeader(http.StatusOK) + json, err := json.Marshal([]*model.MarketplacePlugin{samplePlugins[1]}) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = false + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + *cfg.PluginSettings.AllowInsecureDownloadUrl = false + }) + + env := th.App.GetPluginsEnvironment() + + pluginsResp, resp := th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) + + // Should fail to install unknown prepackaged plugin + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.2"} + manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + + plugins := env.PrepackagedPlugins() + require.Len(t, plugins, 1) + require.Equal(t, "testplugin", plugins[0].Manifest.Id) + require.Equal(t, pluginSignatureData, plugins[0].Signature) + + pluginsResp, resp = th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) + + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.1"} + manifest1, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckNoError(t, resp) + require.NotNil(t, manifest1) + require.Equal(t, "testplugin", manifest1.Id) + require.Equal(t, "0.0.1", manifest1.Version) + + pluginsResp, resp = th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Equal(t, pluginsResp.Inactive, []*model.PluginInfo{{ + Manifest: *manifest1, + }}) + + // Try to install remote marketplace plugin + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} + manifest, resp = th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + + // Enable remote marketplace + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + *cfg.PluginSettings.AllowInsecureDownloadUrl = true + }) + + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} + manifest2, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckNoError(t, resp) + require.NotNil(t, manifest2) + require.Equal(t, "testplugin2", manifest2.Id) + require.Equal(t, "1.2.3", manifest2.Version) + + pluginsResp, resp = th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.ElementsMatch(t, pluginsResp.Inactive, []*model.PluginInfo{ + { + Manifest: *manifest1, + }, + { + Manifest: *manifest2, + }, + }) + + // Clean up + ok, resp := th.SystemAdminClient.RemovePlugin(manifest1.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + ok, resp = th.SystemAdminClient.RemovePlugin(manifest2.Id) + CheckNoError(t, resp) + assert.True(t, ok) + + appErr = th.App.DeletePublicKey("pub_key") + require.Nil(t, appErr) + }) + + t.Run("missing prepackaged and remote plugin signatures", func(t *testing.T) { + prepackagedPluginsDir := "prepackaged_plugins" + + os.RemoveAll(prepackagedPluginsDir) + err := os.Mkdir(prepackagedPluginsDir, os.ModePerm) + require.NoError(t, err) + defer os.RemoveAll(prepackagedPluginsDir) + + prepackagedPluginsDir, found := fileutils.FindDir(prepackagedPluginsDir) + require.True(t, found, "failed to find prepackaged plugins directory") + + err = utils.CopyFile(filepath.Join(path, "testplugin.tar.gz"), filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz")) + require.NoError(t, err) + + th := SetupConfig(func(cfg *model.Config) { + // Disable auto-installing prepackged plugins + *cfg.PluginSettings.AutomaticPrepackagedPlugins = false + }).InitBasic() + defer th.TearDown() + + key, err := os.Open(filepath.Join(path, "development-private-key.asc")) + require.NoError(t, err) + appErr := th.App.AddPublicKey("pub_key", key) + require.Nil(t, appErr) + + testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { + serverVersion := req.URL.Query().Get("server_version") + require.NotEmpty(t, serverVersion) + require.Equal(t, model.CurrentVersion, serverVersion) + + mPlugins := []*model.MarketplacePlugin{samplePlugins[0]} + require.Empty(t, mPlugins[0].Signature) + res.WriteHeader(http.StatusOK) + json, err := json.Marshal(mPlugins) + require.NoError(t, err) + res.Write(json) + })) + defer testServer.Close() + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.EnableMarketplace = true + *cfg.PluginSettings.EnableRemoteMarketplace = true + *cfg.PluginSettings.MarketplaceUrl = testServer.URL + *cfg.PluginSettings.AllowInsecureDownloadUrl = true + }) + + env := th.App.GetPluginsEnvironment() + plugins := env.PrepackagedPlugins() + require.Len(t, plugins, 1) + require.Equal(t, "testplugin", plugins[0].Manifest.Id) + require.Empty(t, plugins[0].Signature) + + pluginsResp, resp := th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) + + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin", Version: "0.0.1"} + manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + + pluginsResp, resp = th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) + + pRequest = &model.InstallMarketplacePluginRequest{Id: "testplugin2", Version: "1.2.3"} + manifest, resp = th.SystemAdminClient.InstallMarketplacePlugin(pRequest) + CheckInternalErrorStatus(t, resp) + require.Nil(t, manifest) + + pluginsResp, resp = th.SystemAdminClient.GetPlugins() + CheckNoError(t, resp) + require.Len(t, pluginsResp.Active, 0) + require.Len(t, pluginsResp.Inactive, 0) + + // Clean up + appErr = th.App.DeletePublicKey("pub_key") + require.Nil(t, appErr) + }) } func findClusterMessages(event string, msgs []*model.ClusterMessage) []*model.ClusterMessage { diff --git a/app/download.go b/app/download.go new file mode 100644 index 0000000000..31d137fef2 --- /dev/null +++ b/app/download.go @@ -0,0 +1,44 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package app + +import ( + "io/ioutil" + "net/url" + "time" + + "github.com/mattermost/mattermost-server/v5/model" + "github.com/pkg/errors" +) + +const ( + // HTTP_REQUEST_TIMEOUT defines a high timeout for downloading large files + // from an external URL to avoid slow connections from failing to install. + HTTP_REQUEST_TIMEOUT = 1 * time.Hour +) + +func (a *App) DownloadFromURL(downloadURL string) ([]byte, error) { + if !model.IsValidHttpUrl(downloadURL) { + return nil, errors.Errorf("invalid url %s", downloadURL) + } + + u, err := url.ParseRequestURI(downloadURL) + if err != nil { + return nil, errors.Errorf("failed to parse url %s", downloadURL) + } + if !*a.Config().PluginSettings.AllowInsecureDownloadUrl && u.Scheme != "https" { + return nil, errors.Errorf("insecure url not allowed %s", downloadURL) + } + + client := a.HTTPService.MakeClient(true) + client.Timeout = HTTP_REQUEST_TIMEOUT + + resp, err := client.Get(downloadURL) + if err != nil { + return nil, errors.Wrapf(err, "failed to fetch from %s", downloadURL) + } + defer resp.Body.Close() + + return ioutil.ReadAll(resp.Body) +} diff --git a/app/helper_test.go b/app/helper_test.go index f758c7883c..53435da6d6 100644 --- a/app/helper_test.go +++ b/app/helper_test.go @@ -37,11 +37,21 @@ func setupTestHelper(enterprise bool, tb testing.TB) *TestHelper { store := mainHelper.GetStore() store.DropAllTables() + tempWorkspace, err := ioutil.TempDir("", "apptest") + if err != nil { + panic(err) + } + memoryStore, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{IgnoreEnvironmentOverrides: true}) if err != nil { panic("failed to initialize memory store: " + err.Error()) } + config := memoryStore.Get() + *config.PluginSettings.Directory = filepath.Join(tempWorkspace, "plugins") + *config.PluginSettings.ClientDirectory = filepath.Join(tempWorkspace, "webapp") + memoryStore.Set(config) + var options []Option options = append(options, ConfigStore(memoryStore)) options = append(options, StoreOverride(mainHelper.Store)) @@ -88,18 +98,9 @@ func setupTestHelper(enterprise bool, tb testing.TB) *TestHelper { } if th.tempWorkspace == "" { - dir, err := ioutil.TempDir("", "apptest") - if err != nil { - panic(err) - } - th.tempWorkspace = dir + th.tempWorkspace = tempWorkspace } - pluginDir := filepath.Join(th.tempWorkspace, "plugins") - webappDir := filepath.Join(th.tempWorkspace, "webapp") - - th.App.InitPlugins(pluginDir, webappDir) - return th } diff --git a/app/plugin.go b/app/plugin.go index 5ab44d5927..3362e84b32 100644 --- a/app/plugin.go +++ b/app/plugin.go @@ -4,6 +4,10 @@ package app import ( + "encoding/base64" + "fmt" + "io" + "io/ioutil" "net/http" "os" "path/filepath" @@ -16,9 +20,14 @@ import ( "github.com/mattermost/mattermost-server/v5/services/filesstore" "github.com/mattermost/mattermost-server/v5/services/marketplace" "github.com/mattermost/mattermost-server/v5/utils/fileutils" + + "github.com/blang/semver" + svg "github.com/h2non/go-is-svg" "github.com/pkg/errors" ) +const prepackagedPluginsDir = "prepackaged_plugins" + type pluginSignaturePath struct { pluginId string path string @@ -163,32 +172,9 @@ func (a *App) InitPlugins(pluginDir, webappPluginDir string) { mlog.Error("Failed to sync plugins from the file store", mlog.Err(err)) } - prepackagedPluginsDir, found := fileutils.FindDir("prepackaged_plugins") - if found { - if err := filepath.Walk(prepackagedPluginsDir, func(walkPath string, info os.FileInfo, err error) error { - if !strings.HasSuffix(walkPath, ".tar.gz") { - return nil - } - - fileReader, err := os.Open(walkPath) - if err != nil { - mlog.Error("Failed to open prepackaged plugin", mlog.Err(err), mlog.String("path", walkPath)) - return nil - } - defer fileReader.Close() - - mlog.Debug("Installing prepackaged plugin", mlog.String("path", walkPath)) - - _, appErr := a.installPluginLocally(fileReader, nil, installPluginLocallyOnlyIfNewOrUpgrade) - if appErr != nil { - mlog.Error("Failed to unpack prepackaged plugin", mlog.Err(appErr), mlog.String("path", walkPath)) - } - - return nil - }); err != nil { - mlog.Error("Failed to complete unpacking prepackaged plugins", mlog.Err(err)) - } - } + plugins := a.processPrepackagedPlugins(prepackagedPluginsDir) + pluginsEnvironment = a.GetPluginsEnvironment() + pluginsEnvironment.SetPrepackagedPlugins(plugins) // Sync plugin active state when config changes. Also notify plugins. a.Srv.PluginsLock.Lock() @@ -319,7 +305,7 @@ func (a *App) EnablePlugin(id string) *model.AppError { return model.NewAppError("EnablePlugin", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) } - plugins, err := pluginsEnvironment.Available() + availablePlugins, err := pluginsEnvironment.Available() if err != nil { return model.NewAppError("EnablePlugin", "app.plugin.config.app_error", nil, err.Error(), http.StatusInternalServerError) } @@ -327,7 +313,7 @@ func (a *App) EnablePlugin(id string) *model.AppError { id = strings.ToLower(id) var manifest *model.Manifest - for _, p := range plugins { + for _, p := range availablePlugins { if p.Manifest.Id == id { manifest = p.Manifest break @@ -361,7 +347,7 @@ func (a *App) DisablePlugin(id string) *model.AppError { return model.NewAppError("DisablePlugin", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) } - plugins, err := pluginsEnvironment.Available() + availablePlugins, err := pluginsEnvironment.Available() if err != nil { return model.NewAppError("DisablePlugin", "app.plugin.config.app_error", nil, err.Error(), http.StatusInternalServerError) } @@ -369,7 +355,7 @@ func (a *App) DisablePlugin(id string) *model.AppError { id = strings.ToLower(id) var manifest *model.Manifest - for _, p := range plugins { + for _, p := range availablePlugins { if p.Manifest.Id == id { manifest = p.Manifest break @@ -423,94 +409,35 @@ func (a *App) GetPlugins() (*model.PluginsResponse, *model.AppError) { return resp, nil } -// GetMarketplacePlugin returns plugin from marketplace-server -func (a *App) GetMarketplacePlugin(request *model.InstallMarketplacePluginRequest) (*model.BaseMarketplacePlugin, *model.AppError) { - marketplaceClient, err := marketplace.NewClient( - *a.Config().PluginSettings.MarketplaceUrl, - a.HTTPService, - ) - if err != nil { - return nil, model.NewAppError("GetMarketplacePlugin", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) - } - - filter := &model.MarketplacePluginFilter{Filter: request.Id, ServerVersion: model.CurrentVersion} - plugin, err := marketplaceClient.GetPlugin(filter, request.Version) - if err != nil { - return nil, model.NewAppError("GetMarketplacePlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, err.Error(), http.StatusInternalServerError) - } - return plugin, nil -} - // GetMarketplacePlugins returns a list of plugins from the marketplace-server, // and plugins that are installed locally. func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*model.MarketplacePlugin, *model.AppError) { + plugins := map[string]*model.MarketplacePlugin{} + + if *a.Config().PluginSettings.EnableRemoteMarketplace && !filter.LocalOnly { + p, appErr := a.getRemotePlugins(filter) + if appErr != nil { + return nil, appErr + } + plugins = p + } + + appErr := a.mergePrepackagedPlugins(plugins) + if appErr != nil { + return nil, appErr + } + + appErr = a.mergeLocalPlugins(plugins) + if appErr != nil { + return nil, appErr + } + + // Filter plugins. var result []*model.MarketplacePlugin - pluginSet := map[string]bool{} - pluginsEnvironment := a.GetPluginsEnvironment() - if pluginsEnvironment == nil { - return nil, model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError) - } - - marketplaceClient, err := marketplace.NewClient( - *a.Config().PluginSettings.MarketplaceUrl, - a.HTTPService, - ) - if err != nil { - return nil, model.NewAppError("GetMarketplacePlugins", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) - } - - // Fetch all plugins from marketplace. - marketplacePlugins, err := marketplaceClient.GetPlugins(&model.MarketplacePluginFilter{ - PerPage: -1, - ServerVersion: model.CurrentVersion, - }) - if err != nil { - return nil, model.NewAppError("GetMarketplacePlugins", "app.plugin.marketplace_plugins.app_error", nil, err.Error(), http.StatusInternalServerError) - } - - for _, p := range marketplacePlugins { - if p.Manifest == nil || !pluginMatchesFilter(p.Manifest, filter.Filter) { - continue + for _, p := range plugins { + if pluginMatchesFilter(p.Manifest, filter.Filter) { + result = append(result, p) } - - marketplacePlugin := &model.MarketplacePlugin{ - BaseMarketplacePlugin: p, - } - - var manifest *model.Manifest - if manifest, err = pluginsEnvironment.GetManifest(p.Manifest.Id); err != nil && err != plugin.ErrNotFound { - return nil, model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, err.Error(), http.StatusInternalServerError) - } else if err == nil { - // Plugin is installed. - marketplacePlugin.InstalledVersion = manifest.Version - } - - pluginSet[p.Manifest.Id] = true - result = append(result, marketplacePlugin) - } - - // Include all other installed plugins. - plugins, err := pluginsEnvironment.Available() - if err != nil { - return nil, model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, err.Error(), http.StatusInternalServerError) - } - - for _, plugin := range plugins { - if plugin.Manifest == nil || pluginSet[plugin.Manifest.Id] || !pluginMatchesFilter(plugin.Manifest, filter.Filter) { - continue - } - - result = append(result, &model.MarketplacePlugin{ - BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ - // Labels should not (yet) be localized as the labels sent by the Marketplace are not (yet) localizable. - Labels: []model.MarketplaceLabel{{ - Name: "Local", - Description: "This plugin is not listed in the marketplace but was installed manually", - }}, - Manifest: plugin.Manifest, - }, - InstalledVersion: plugin.Manifest.Version, - }) } // Sort result alphabetically. @@ -521,6 +448,166 @@ func (a *App) GetMarketplacePlugins(filter *model.MarketplacePluginFilter) ([]*m return result, nil } +// getPrepackagedPlugin returns a pre-packaged plugin. +func (a *App) getPrepackagedPlugin(pluginId, version string) (*plugin.PrepackagedPlugin, *model.AppError) { + pluginsEnvironment := a.GetPluginsEnvironment() + if pluginsEnvironment == nil { + return nil, model.NewAppError("getPrepackagedPlugin", "app.plugin.config.app_error", nil, "plugin environment is nil", http.StatusInternalServerError) + } + + prepackagedPlugins := pluginsEnvironment.PrepackagedPlugins() + for _, p := range prepackagedPlugins { + if p.Manifest.Id == pluginId && p.Manifest.Version == version { + return p, nil + } + } + + return nil, model.NewAppError("getPrepackagedPlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, "", http.StatusInternalServerError) +} + +// getRemoteMarketplacePlugin returns plugin from marketplace-server. +func (a *App) getRemoteMarketplacePlugin(pluginId, version string) (*model.BaseMarketplacePlugin, *model.AppError) { + marketplaceClient, err := marketplace.NewClient( + *a.Config().PluginSettings.MarketplaceUrl, + a.HTTPService, + ) + if err != nil { + return nil, model.NewAppError("GetMarketplacePlugin", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + filter := &model.MarketplacePluginFilter{Filter: pluginId, ServerVersion: model.CurrentVersion} + 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) + } + + return plugin, nil +} + +func (a *App) getRemotePlugins(filter *model.MarketplacePluginFilter) (map[string]*model.MarketplacePlugin, *model.AppError) { + result := map[string]*model.MarketplacePlugin{} + + pluginsEnvironment := a.GetPluginsEnvironment() + if pluginsEnvironment == nil { + return nil, model.NewAppError("getRemotePlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError) + } + + marketplaceClient, err := marketplace.NewClient( + *a.Config().PluginSettings.MarketplaceUrl, + a.HTTPService, + ) + if err != nil { + return nil, model.NewAppError("getRemotePlugins", "app.plugin.marketplace_client.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + // Fetch all plugins from marketplace. + marketplacePlugins, err := marketplaceClient.GetPlugins(&model.MarketplacePluginFilter{ + PerPage: -1, + ServerVersion: model.CurrentVersion, + }) + if err != nil { + return nil, model.NewAppError("getRemotePlugins", "app.plugin.marketplace_client.failed_to_fetch", nil, err.Error(), http.StatusInternalServerError) + } + + for _, p := range marketplacePlugins { + if p.Manifest == nil { + continue + } + + result[p.Manifest.Id] = &model.MarketplacePlugin{BaseMarketplacePlugin: p} + } + + return result, nil +} + +// mergePrepackagedPlugins merges pre-packaged plugins to remote marketplace plugins list. +func (a *App) mergePrepackagedPlugins(remoteMarketplacePlugins map[string]*model.MarketplacePlugin) *model.AppError { + pluginsEnvironment := a.GetPluginsEnvironment() + if pluginsEnvironment == nil { + return model.NewAppError("mergePrepackagedPlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError) + } + + for _, prepackaged := range pluginsEnvironment.PrepackagedPlugins() { + if prepackaged.Manifest == nil { + continue + } + + prepackagedMarketplace := &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Manifest: prepackaged.Manifest, + }, + } + + // If not available in marketplace, add the prepackaged + if remoteMarketplacePlugins[prepackaged.Manifest.Id] == nil { + remoteMarketplacePlugins[prepackaged.Manifest.Id] = prepackagedMarketplace + continue + } + + // If available in the markteplace, only overwrite if newer. + prepackagedVersion, err := semver.Parse(prepackaged.Manifest.Version) + if err != nil { + return model.NewAppError("mergePrepackagedPlugins", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) + } + + marketplacePlugin := remoteMarketplacePlugins[prepackaged.Manifest.Id] + marketplaceVersion, err := semver.Parse(marketplacePlugin.Manifest.Version) + if err != nil { + return model.NewAppError("mergePrepackagedPlugins", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) + } + + if prepackagedVersion.GT(marketplaceVersion) { + remoteMarketplacePlugins[prepackaged.Manifest.Id] = prepackagedMarketplace + } + } + + return nil +} + +// mergeLocalPlugins merges locally installed plugins to remote marketplace plugins list. +func (a *App) mergeLocalPlugins(remoteMarketplacePlugins map[string]*model.MarketplacePlugin) *model.AppError { + pluginsEnvironment := a.GetPluginsEnvironment() + if pluginsEnvironment == nil { + return model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, "", http.StatusInternalServerError) + } + + localPlugins, err := pluginsEnvironment.Available() + if err != nil { + return model.NewAppError("GetMarketplacePlugins", "app.plugin.config.app_error", nil, err.Error(), http.StatusInternalServerError) + } + + for _, plugin := range localPlugins { + if plugin.Manifest == nil { + continue + } + + if remoteMarketplacePlugins[plugin.Manifest.Id] != nil { + // Remote plugin is installed. + remoteMarketplacePlugins[plugin.Manifest.Id].InstalledVersion = plugin.Manifest.Version + continue + } + + var labels []model.MarketplaceLabel + if *a.Config().PluginSettings.EnableRemoteMarketplace { + // Labels should not (yet) be localized as the labels sent by the Marketplace are not (yet) localizable. + labels = append(labels, model.MarketplaceLabel{ + Name: "Local", + Description: "This plugin is not listed in the marketplace", + }) + } + + remoteMarketplacePlugins[plugin.Manifest.Id] = &model.MarketplacePlugin{ + BaseMarketplacePlugin: &model.BaseMarketplacePlugin{ + Labels: labels, + Manifest: plugin.Manifest, + }, + InstalledVersion: plugin.Manifest.Version, + } + } + + return nil +} + func pluginMatchesFilter(manifest *model.Manifest, filter string) bool { filter = strings.TrimSpace(strings.ToLower(filter)) @@ -600,6 +687,10 @@ func (a *App) getPluginsFromFolder() (map[string]*pluginSignaturePath, *model.Ap return nil, model.NewAppError("getPluginsFromDir", "app.plugin.sync.list_filestore.app_error", nil, appErr.Error(), http.StatusInternalServerError) } + return getPluginsFromFilePaths(fileStorePaths), nil +} + +func getPluginsFromFilePaths(fileStorePaths []string) map[string]*pluginSignaturePath { pluginSignaturePathMap := make(map[string]*pluginSignaturePath) for _, path := range fileStorePaths { if strings.HasSuffix(path, ".tar.gz") { @@ -623,5 +714,121 @@ func (a *App) getPluginsFromFolder() (map[string]*pluginSignaturePath, *model.Ap } } - return pluginSignaturePathMap, nil + return pluginSignaturePathMap +} + +func (a *App) processPrepackagedPlugins(pluginsDir string) []*plugin.PrepackagedPlugin { + prepackagedPluginsDir, found := fileutils.FindDir(pluginsDir) + if !found { + return nil + } + + fileStorePaths := []string{} + err := filepath.Walk(prepackagedPluginsDir, func(walkPath string, info os.FileInfo, err error) error { + fileStorePaths = append(fileStorePaths, walkPath) + return nil + }) + if err != nil { + mlog.Error("Failed to walk prepackaged plugins", mlog.Err(err)) + return nil + } + + pluginSignaturePathMap := getPluginsFromFilePaths(fileStorePaths) + plugins := make([]*plugin.PrepackagedPlugin, 0, len(pluginSignaturePathMap)) + for _, pluginPaths := range pluginSignaturePathMap { + plugin, err := a.processPrepackagedPlugin(pluginPaths) + if err != nil { + mlog.Error("Failed to install prepackaged plugin", mlog.String("path", pluginPaths.path), mlog.Err(err)) + continue + } + + plugins = append(plugins, plugin) + } + + return plugins +} + +// processPrepackagedPlugin will return the prepackaged plugin metadata and will also +// install the prepackaged plugin if it had been previously enabled and AutomaticPrepackagedPlugins is true. +func (a *App) processPrepackagedPlugin(pluginPath *pluginSignaturePath) (*plugin.PrepackagedPlugin, error) { + mlog.Debug("Processing prepackaged plugin", mlog.String("path", pluginPath.path)) + + fileReader, err := os.Open(pluginPath.path) + if err != nil { + return nil, errors.Wrapf(err, "Failed to open prepackaged plugin %s", pluginPath.path) + } + tmpDir, err := ioutil.TempDir("", "plugintmp") + if err != nil { + return nil, errors.Wrap(err, "Failed to create temp dir plugintmp") + } + defer os.RemoveAll(tmpDir) + + plugin, pluginDir, err := getPrepackagedPlugin(pluginPath, fileReader, tmpDir) + if err != nil { + return nil, errors.Wrapf(err, "Failed to get prepackaged plugin %s", pluginPath.path) + } + + // Skip installing the plugin at all if automatic prepackaged plugins is disabled + if !*a.Config().PluginSettings.AutomaticPrepackagedPlugins { + return plugin, nil + } + + // Skip installing if the plugin is has not been previously enabled. + pluginState := a.Config().PluginSettings.PluginStates[plugin.Manifest.Id] + if pluginState == nil || !pluginState.Enable { + return plugin, nil + } + + mlog.Debug("Installing prepackaged plugin", mlog.String("path", pluginPath.path)) + if _, err := a.installExtractedPlugin(plugin.Manifest, pluginDir, installPluginLocallyOnlyIfNewOrUpgrade); err != nil { + return nil, errors.Wrapf(err, "Failed to install extracted prepackaged plugin %s", pluginPath.path) + } + + return plugin, nil +} + +// getPrepackagedPlugin builds a PrepackagedPlugin from the plugin at the given path, additionally returning the directory in which it was extracted. +func getPrepackagedPlugin(pluginPath *pluginSignaturePath, pluginFile io.ReadSeeker, tmpDir string) (*plugin.PrepackagedPlugin, string, error) { + manifest, pluginDir, appErr := extractPlugin(pluginFile, tmpDir) + if appErr != nil { + return nil, "", errors.Wrapf(appErr, "Failed to extract plugin with path %s", pluginPath.path) + } + + plugin := new(plugin.PrepackagedPlugin) + plugin.Manifest = manifest + plugin.Path = pluginPath.path + + if pluginPath.signaturePath != "" { + sig := pluginPath.signaturePath + sigReader, sigErr := os.Open(sig) + if sigErr != nil { + return nil, "", errors.Wrapf(sigErr, "Failed to open prepackaged plugin signature %s", sig) + } + bytes, sigErr := ioutil.ReadAll(sigReader) + if sigErr != nil { + return nil, "", errors.Wrapf(sigErr, "Failed to read prepackaged plugin signature %s", sig) + } + plugin.Signature = bytes + } + + if manifest.IconPath != "" { + iconData, err := getIcon(manifest.IconPath) + if err != nil { + return nil, "", errors.Wrapf(err, "Failed to read icon at %s", manifest.IconPath) + } + plugin.IconData = iconData + } + + return plugin, pluginDir, nil +} + +func getIcon(iconPath string) (string, error) { + icon, err := ioutil.ReadFile(iconPath) + if err != nil { + return "", errors.Wrapf(err, "failed to open icon at path %s", iconPath) + } + if !svg.Is(icon) { + return "", errors.Wrapf(err, "icon is not svg %s", iconPath) + } + return fmt.Sprintf("data:image/svg+xml;base64,%s", base64.StdEncoding.EncodeToString(icon)), nil } diff --git a/app/plugin_install.go b/app/plugin_install.go index dbf2f2508f..8a55fa538c 100644 --- a/app/plugin_install.go +++ b/app/plugin_install.go @@ -37,6 +37,7 @@ package app import ( + "bytes" "fmt" "io" "io/ioutil" @@ -45,6 +46,8 @@ import ( "path/filepath" "github.com/blang/semver" + "github.com/pkg/errors" + "github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/plugin" @@ -169,6 +172,61 @@ func (a *App) installPlugin(pluginFile, signature io.ReadSeeker, installationStr return manifest, nil } +// InstallMarketplacePlugin installs a plugin listed in the marketplace server. It will get the plugin bundle +// from the prepackaged folder, if available, or remotely if EnableRemoteMarketplace is true. +func (a *App) InstallMarketplacePlugin(request *model.InstallMarketplacePluginRequest) (*model.Manifest, *model.AppError) { + var pluginFile, signatureFile io.ReadSeeker + + prepackagedPlugin, appErr := a.getPrepackagedPlugin(request.Id, request.Version) + if appErr != nil && appErr.Id != "app.plugin.marketplace_plugins.not_found.app_error" { + return nil, appErr + } + if prepackagedPlugin != nil { + fileReader, err := os.Open(prepackagedPlugin.Path) + if err != nil { + err = errors.Wrapf(err, "failed to open prepackaged plugin %s", prepackagedPlugin.Path) + return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.install_marketplace_plugin.app_error", nil, err.Error(), http.StatusInternalServerError) + } + defer fileReader.Close() + + pluginFile = fileReader + signatureFile = bytes.NewReader(prepackagedPlugin.Signature) + } + + if *a.Config().PluginSettings.EnableRemoteMarketplace && pluginFile == nil { + var plugin *model.BaseMarketplacePlugin + plugin, appErr = a.getRemoteMarketplacePlugin(request.Id, request.Version) + if appErr != nil { + return nil, appErr + } + + downloadedPluginBytes, err := a.DownloadFromURL(plugin.DownloadURL) + if err != nil { + return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.install_marketplace_plugin.app_error", nil, err.Error(), http.StatusInternalServerError) + } + signature, err := plugin.DecodeSignature() + if err != nil { + return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.signature_decode.app_error", nil, err.Error(), http.StatusNotImplemented) + } + pluginFile = bytes.NewReader(downloadedPluginBytes) + signatureFile = signature + } + + if pluginFile == nil { + return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.marketplace_plugins.not_found.app_error", nil, "", http.StatusInternalServerError) + } + if signatureFile == nil { + return nil, model.NewAppError("InstallMarketplacePlugin", "app.plugin.marketplace_plugins.signature_not_found.app_error", nil, "", http.StatusInternalServerError) + } + + manifest, appErr := a.InstallPluginWithSignature(pluginFile, signatureFile) + if appErr != nil { + return nil, appErr + } + + return manifest, nil +} + type pluginInstallationStrategy int const ( @@ -185,6 +243,7 @@ func (a *App) installPluginLocally(pluginFile, signature io.ReadSeeker, installa if pluginsEnvironment == nil { return nil, model.NewAppError("installPluginLocally", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) } + // verify signature if signature != nil { if err := a.VerifyPlugin(pluginFile, signature); err != nil { @@ -198,33 +257,55 @@ func (a *App) installPluginLocally(pluginFile, signature io.ReadSeeker, installa } defer os.RemoveAll(tmpDir) - pluginFile.Seek(0, 0) - if err = utils.ExtractTarGz(pluginFile, tmpDir); err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.extract.app_error", nil, err.Error(), http.StatusBadRequest) + manifest, pluginDir, appErr := extractPlugin(pluginFile, tmpDir) + if appErr != nil { + return nil, appErr } - tmpPluginDir := tmpDir - dir, err := ioutil.ReadDir(tmpDir) + manifest, appErr = a.installExtractedPlugin(manifest, pluginDir, installationStrategy) + if appErr != nil { + return nil, appErr + } + + return manifest, nil +} + +func extractPlugin(pluginFile io.ReadSeeker, extractDir string) (*model.Manifest, string, *model.AppError) { + pluginFile.Seek(0, 0) + if err := utils.ExtractTarGz(pluginFile, extractDir); err != nil { + return nil, "", model.NewAppError("extractPlugin", "app.plugin.extract.app_error", nil, err.Error(), http.StatusBadRequest) + } + + dir, err := ioutil.ReadDir(extractDir) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.filesystem.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, "", model.NewAppError("extractPlugin", "app.plugin.filesystem.app_error", nil, err.Error(), http.StatusInternalServerError) } if len(dir) == 1 && dir[0].IsDir() { - tmpPluginDir = filepath.Join(tmpPluginDir, dir[0].Name()) + extractDir = filepath.Join(extractDir, dir[0].Name()) } - manifest, _, err := model.FindManifest(tmpPluginDir) + manifest, _, err := model.FindManifest(extractDir) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.manifest.app_error", nil, err.Error(), http.StatusBadRequest) + return nil, "", model.NewAppError("extractPlugin", "app.plugin.manifest.app_error", nil, err.Error(), http.StatusBadRequest) } if !plugin.IsValidId(manifest.Id) { - return nil, model.NewAppError("installPluginLocally", "app.plugin.invalid_id.app_error", map[string]interface{}{"Min": plugin.MinIdLength, "Max": plugin.MaxIdLength, "Regex": plugin.ValidIdRegex}, "", http.StatusBadRequest) + return nil, "", model.NewAppError("extractPlugin", "app.plugin.invalid_id.app_error", map[string]interface{}{"Min": plugin.MinIdLength, "Max": plugin.MaxIdLength, "Regex": plugin.ValidIdRegex}, "", http.StatusBadRequest) + } + + return manifest, extractDir, nil +} + +func (a *App) installExtractedPlugin(manifest *model.Manifest, fromPluginDir string, installationStrategy pluginInstallationStrategy) (*model.Manifest, *model.AppError) { + pluginsEnvironment := a.GetPluginsEnvironment() + if pluginsEnvironment == nil { + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.disabled.app_error", nil, "", http.StatusNotImplemented) } bundles, err := pluginsEnvironment.Available() if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.install.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.install.app_error", nil, err.Error(), http.StatusInternalServerError) } // Check for plugins installed with the same ID. @@ -239,7 +320,7 @@ func (a *App) installPluginLocally(pluginFile, signature io.ReadSeeker, installa if existingManifest != nil { // Return an error if already installed and strategy disallows installation. if installationStrategy == installPluginLocallyOnlyIfNew { - return nil, model.NewAppError("installPluginLocally", "app.plugin.install_id.app_error", nil, "", http.StatusBadRequest) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.install_id.app_error", nil, "", http.StatusBadRequest) } // Skip installation if already installed and newer. @@ -248,12 +329,12 @@ func (a *App) installPluginLocally(pluginFile, signature io.ReadSeeker, installa version, err = semver.Parse(manifest.Version) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) } existingVersion, err = semver.Parse(existingManifest.Version) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.invalid_version.app_error", nil, "", http.StatusBadRequest) } if version.LTE(existingVersion) { @@ -265,37 +346,37 @@ func (a *App) installPluginLocally(pluginFile, signature io.ReadSeeker, installa // Otherwise remove the existing installation prior to install below. mlog.Debug("Removing existing installation of plugin before local install", mlog.String("plugin_id", existingManifest.Id), mlog.String("version", existingManifest.Version)) if err := a.removePluginLocally(existingManifest.Id); err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.install_id_failed_remove.app_error", nil, "", http.StatusBadRequest) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.install_id_failed_remove.app_error", nil, "", http.StatusBadRequest) } } pluginPath := filepath.Join(*a.Config().PluginSettings.Directory, manifest.Id) - err = utils.CopyDir(tmpPluginDir, pluginPath) + err = utils.CopyDir(fromPluginDir, pluginPath) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.mvdir.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.mvdir.app_error", nil, err.Error(), http.StatusInternalServerError) } // Flag plugin locally as managed by the filestore. f, err := os.Create(filepath.Join(pluginPath, managedPluginFileName)) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.flag_managed.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.flag_managed.app_error", nil, err.Error(), http.StatusInternalServerError) } f.Close() if manifest.HasWebapp() { updatedManifest, err := pluginsEnvironment.UnpackWebappBundle(manifest.Id) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.webapp_bundle.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.webapp_bundle.app_error", nil, err.Error(), http.StatusInternalServerError) } manifest = updatedManifest } - // Activate plugin if it was previously activated. + // Activate the plugin if enabled. pluginState := a.Config().PluginSettings.PluginStates[manifest.Id] if pluginState != nil && pluginState.Enable { updatedManifest, _, err := pluginsEnvironment.Activate(manifest.Id) if err != nil { - return nil, model.NewAppError("installPluginLocally", "app.plugin.restart.app_error", nil, err.Error(), http.StatusInternalServerError) + return nil, model.NewAppError("installExtractedPlugin", "app.plugin.restart.app_error", nil, err.Error(), http.StatusInternalServerError) } manifest = updatedManifest } diff --git a/app/plugin_test.go b/app/plugin_test.go index b209155655..bdc28a6a69 100644 --- a/app/plugin_test.go +++ b/app/plugin_test.go @@ -22,6 +22,7 @@ import ( "github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/plugin" + "github.com/mattermost/mattermost-server/v5/utils" "github.com/mattermost/mattermost-server/v5/utils/fileutils" ) @@ -485,108 +486,316 @@ func TestPluginSync(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.Description, func(t *testing.T) { - os.MkdirAll("./test-plugins", os.ModePerm) - defer os.RemoveAll("./test-plugins") - th.App.UpdateConfig(func(cfg *model.Config) { *cfg.PluginSettings.Enable = true - *cfg.PluginSettings.Directory = "./test-plugins" - *cfg.PluginSettings.ClientDirectory = "./test-client-plugins" - *cfg.PluginSettings.RequirePluginSignature = false + testCase.ConfigFunc(cfg) }) - th.App.UpdateConfig(testCase.ConfigFunc) - env, err := plugin.NewEnvironment(th.App.NewPluginAPI, "./test-plugins", "./test-client-plugins", th.App.Log) - require.NoError(t, err) - th.App.SetPluginsEnvironment(env) + env := th.App.GetPluginsEnvironment() + require.NotNil(t, env) - // New bundle in the file store case path, _ := fileutils.FindDir("tests") - fileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz")) - require.NoError(t, err) - defer fileReader.Close() - _, appErr := th.App.WriteFile(fileReader, th.App.getBundleStorePath("testplugin")) - checkNoError(t, appErr) + t.Run("new bundle in the file store", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.RequirePluginSignature = false + }) - appErr = th.App.SyncPlugins() - checkNoError(t, appErr) + fileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + defer fileReader.Close() - // Check if installed - pluginStatus, err := env.Statuses() - require.Nil(t, err) - require.Len(t, pluginStatus, 1) - require.Equal(t, pluginStatus[0].PluginId, "testplugin") + _, appErr := th.App.WriteFile(fileReader, th.App.getBundleStorePath("testplugin")) + checkNoError(t, appErr) - // Bundle removed from the file store case - appErr = th.App.RemoveFile(th.App.getBundleStorePath("testplugin")) - checkNoError(t, appErr) + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) - appErr = th.App.SyncPlugins() - checkNoError(t, appErr) - - // Check if removed - pluginStatus, err = env.Statuses() - require.Nil(t, err) - require.Empty(t, pluginStatus) - - // RequirePluginSignature = true case - th.App.UpdateConfig(func(cfg *model.Config) { - *cfg.PluginSettings.RequirePluginSignature = true + // Check if installed + pluginStatus, err := env.Statuses() + require.Nil(t, err) + require.Len(t, pluginStatus, 1) + require.Equal(t, pluginStatus[0].PluginId, "testplugin") }) - pluginFileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz")) - require.NoError(t, err) - defer pluginFileReader.Close() - _, appErr = th.App.WriteFile(pluginFileReader, th.App.getBundleStorePath("testplugin")) - checkNoError(t, appErr) - // no signature - appErr = th.App.SyncPlugins() - checkNoError(t, appErr) - pluginStatus, err = env.Statuses() - require.Nil(t, err) - require.Empty(t, pluginStatus) - // Wrong signature - signatureFileReader, err := os.Open(filepath.Join(path, "testpluginv2.tar.gz.sig")) - require.NoError(t, err) - defer signatureFileReader.Close() - filePath := fmt.Sprintf("%s.sig", th.App.getBundleStorePath("testplugin")) - _, appErr = th.App.WriteFile(signatureFileReader, filePath) - checkNoError(t, appErr) + t.Run("bundle removed from the file store", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.RequirePluginSignature = false + }) - appErr = th.App.SyncPlugins() - checkNoError(t, appErr) + appErr := th.App.RemoveFile(th.App.getBundleStorePath("testplugin")) + checkNoError(t, appErr) - pluginStatus, err = env.Statuses() - require.Nil(t, err) - require.Empty(t, pluginStatus) + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) - // Correct signature - key, err := os.Open(filepath.Join(path, "development-private-key.asc")) - require.NoError(t, err) - appErr = th.App.AddPublicKey("pub_key", key) - checkNoError(t, appErr) + // Check if removed + pluginStatus, err := env.Statuses() + require.Nil(t, err) + require.Empty(t, pluginStatus) + }) - signatureFileReader, err = os.Open(filepath.Join(path, "testplugin.tar.gz.sig")) - require.NoError(t, err) - defer signatureFileReader.Close() - filePath = fmt.Sprintf("%s.sig", th.App.getBundleStorePath("testplugin")) - _, appErr = th.App.WriteFile(signatureFileReader, filePath) - checkNoError(t, appErr) + t.Run("plugin signatures required, no signature", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.RequirePluginSignature = true + }) - appErr = th.App.SyncPlugins() - checkNoError(t, appErr) + pluginFileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz")) + require.NoError(t, err) + defer pluginFileReader.Close() + _, appErr := th.App.WriteFile(pluginFileReader, th.App.getBundleStorePath("testplugin")) + checkNoError(t, appErr) - pluginStatus, err = env.Statuses() - require.Nil(t, err) - require.Len(t, pluginStatus, 1) - require.Equal(t, pluginStatus[0].PluginId, "testplugin") + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) + pluginStatus, err := env.Statuses() + require.Nil(t, err) + require.Len(t, pluginStatus, 0) + }) - appErr = th.App.DeletePublicKey("pub_key") - checkNoError(t, appErr) + t.Run("plugin signatures required, wrong signature", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.RequirePluginSignature = true + }) - appErr = th.App.RemovePlugin("testplugin") - checkNoError(t, appErr) + signatureFileReader, err := os.Open(filepath.Join(path, "testplugin2.tar.gz.sig")) + require.NoError(t, err) + defer signatureFileReader.Close() + _, appErr := th.App.WriteFile(signatureFileReader, th.App.getSignatureStorePath("testplugin")) + checkNoError(t, appErr) + + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) + + pluginStatus, err := env.Statuses() + require.Nil(t, err) + require.Len(t, pluginStatus, 0) + }) + + t.Run("plugin signatures required, correct signature", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.RequirePluginSignature = true + }) + + key, err := os.Open(filepath.Join(path, "development-private-key.asc")) + require.NoError(t, err) + appErr := th.App.AddPublicKey("pub_key", key) + checkNoError(t, appErr) + + signatureFileReader, err := os.Open(filepath.Join(path, "testplugin.tar.gz.sig")) + require.NoError(t, err) + defer signatureFileReader.Close() + _, appErr = th.App.WriteFile(signatureFileReader, th.App.getSignatureStorePath("testplugin")) + checkNoError(t, appErr) + + appErr = th.App.SyncPlugins() + checkNoError(t, appErr) + + pluginStatus, err := env.Statuses() + require.Nil(t, err) + require.Len(t, pluginStatus, 1) + require.Equal(t, pluginStatus[0].PluginId, "testplugin") + + appErr = th.App.DeletePublicKey("pub_key") + checkNoError(t, appErr) + + appErr = th.App.RemovePlugin("testplugin") + checkNoError(t, appErr) + }) }) } } + +func TestProcessPrepackagedPlugins(t *testing.T) { + th := Setup(t).InitBasic() + defer th.TearDown() + + testsPath, _ := fileutils.FindDir("tests") + prepackagedPluginsPath := filepath.Join(testsPath, prepackagedPluginsDir) + fileErr := os.Mkdir(prepackagedPluginsPath, os.ModePerm) + require.NoError(t, fileErr) + defer os.RemoveAll(prepackagedPluginsPath) + + prepackagedPluginsDir, found := fileutils.FindDir(prepackagedPluginsPath) + require.True(t, found, "failed to find prepackaged plugins directory") + + testPluginPath := filepath.Join(testsPath, "testplugin.tar.gz") + fileErr = utils.CopyFile(testPluginPath, filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz")) + require.NoError(t, fileErr) + + t.Run("automatic, enabled plugin, no signature", func(t *testing.T) { + // Install the plugin and enable + pluginBytes, err := ioutil.ReadFile(testPluginPath) + require.NoError(t, err) + require.NotNil(t, pluginBytes) + + manifest, appErr := th.App.installPluginLocally(bytes.NewReader(pluginBytes), nil, installPluginLocallyAlways) + require.Nil(t, appErr) + require.Equal(t, "testplugin", manifest.Id) + + env := th.App.GetPluginsEnvironment() + + activatedManifest, activated, err := env.Activate(manifest.Id) + require.NoError(t, err) + require.True(t, activated) + require.Equal(t, manifest, activatedManifest) + + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.AutomaticPrepackagedPlugins = true + }) + + plugins := th.App.processPrepackagedPlugins(prepackagedPluginsDir) + require.Len(t, plugins, 1) + require.Equal(t, plugins[0].Manifest.Id, "testplugin") + require.Empty(t, plugins[0].Signature, 0) + + pluginStatus, err := env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 1) + require.Equal(t, pluginStatus[0].PluginId, "testplugin") + + appErr = th.App.RemovePlugin("testplugin") + checkNoError(t, appErr) + + pluginStatus, err = env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 0) + }) + + t.Run("automatic, not enabled plugin", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.AutomaticPrepackagedPlugins = true + }) + + env := th.App.GetPluginsEnvironment() + + plugins := th.App.processPrepackagedPlugins(prepackagedPluginsDir) + require.Len(t, plugins, 1) + require.Equal(t, plugins[0].Manifest.Id, "testplugin") + require.Empty(t, plugins[0].Signature, 0) + + pluginStatus, err := env.Statuses() + require.NoError(t, err) + require.Empty(t, pluginStatus, 0) + }) + + t.Run("automatic, multiple plugins with signatures, not enabled", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.AutomaticPrepackagedPlugins = true + }) + + env := th.App.GetPluginsEnvironment() + + // Add signature + testPluginSignaturePath := filepath.Join(testsPath, "testplugin.tar.gz.sig") + err := utils.CopyFile(testPluginSignaturePath, filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz.sig")) + require.NoError(t, err) + + // Add second plugin + testPlugin2Path := filepath.Join(testsPath, "testplugin2.tar.gz") + err = utils.CopyFile(testPlugin2Path, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz")) + require.NoError(t, err) + + testPlugin2SignaturePath := filepath.Join(testsPath, "testplugin2.tar.gz.sig") + err = utils.CopyFile(testPlugin2SignaturePath, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz.sig")) + require.NoError(t, err) + + plugins := th.App.processPrepackagedPlugins(prepackagedPluginsDir) + require.Len(t, plugins, 2) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[0].Manifest.Id) + require.NotEmpty(t, plugins[0].Signature) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[1].Manifest.Id) + require.NotEmpty(t, plugins[1].Signature) + + pluginStatus, err := env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 0) + }) + + t.Run("automatic, multiple plugins with signatures, one enabled", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.AutomaticPrepackagedPlugins = true + }) + + env := th.App.GetPluginsEnvironment() + + // Add signature + testPluginSignaturePath := filepath.Join(testsPath, "testplugin.tar.gz.sig") + err := utils.CopyFile(testPluginSignaturePath, filepath.Join(prepackagedPluginsDir, "testplugin.tar.gz.sig")) + require.NoError(t, err) + + // Install first plugin and enable + pluginBytes, err := ioutil.ReadFile(testPluginPath) + require.NoError(t, err) + require.NotNil(t, pluginBytes) + + manifest, appErr := th.App.installPluginLocally(bytes.NewReader(pluginBytes), nil, installPluginLocallyAlways) + require.Nil(t, appErr) + require.Equal(t, "testplugin", manifest.Id) + + activatedManifest, activated, err := env.Activate(manifest.Id) + require.NoError(t, err) + require.True(t, activated) + require.Equal(t, manifest, activatedManifest) + + // Add second plugin + testPlugin2Path := filepath.Join(testsPath, "testplugin2.tar.gz") + err = utils.CopyFile(testPlugin2Path, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz")) + require.NoError(t, err) + + testPlugin2SignaturePath := filepath.Join(testsPath, "testplugin2.tar.gz.sig") + err = utils.CopyFile(testPlugin2SignaturePath, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz.sig")) + require.NoError(t, err) + + plugins := th.App.processPrepackagedPlugins(prepackagedPluginsDir) + require.Len(t, plugins, 2) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[0].Manifest.Id) + require.NotEmpty(t, plugins[0].Signature) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[1].Manifest.Id) + require.NotEmpty(t, plugins[1].Signature) + + pluginStatus, err := env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 1) + require.Equal(t, pluginStatus[0].PluginId, "testplugin") + + appErr = th.App.RemovePlugin("testplugin") + checkNoError(t, appErr) + + pluginStatus, err = env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 0) + }) + + t.Run("non-automatic, multiple plugins", func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { + *cfg.PluginSettings.Enable = true + *cfg.PluginSettings.AutomaticPrepackagedPlugins = false + }) + + env := th.App.GetPluginsEnvironment() + + testPlugin2Path := filepath.Join(testsPath, "testplugin2.tar.gz") + err := utils.CopyFile(testPlugin2Path, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz")) + require.NoError(t, err) + + testPlugin2SignaturePath := filepath.Join(testsPath, "testplugin2.tar.gz.sig") + err = utils.CopyFile(testPlugin2SignaturePath, filepath.Join(prepackagedPluginsDir, "testplugin2.tar.gz.sig")) + require.NoError(t, err) + + plugins := th.App.processPrepackagedPlugins(prepackagedPluginsDir) + require.Len(t, plugins, 2) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[0].Manifest.Id) + require.NotEmpty(t, plugins[0].Signature) + require.Contains(t, []string{"testplugin", "testplugin2"}, plugins[1].Manifest.Id) + require.NotEmpty(t, plugins[1].Signature) + + pluginStatus, err := env.Statuses() + require.NoError(t, err) + require.Len(t, pluginStatus, 0) + }) +} diff --git a/build/release.mk b/build/release.mk index 2c51900ad8..aca6cfb228 100644 --- a/build/release.mk +++ b/build/release.mk @@ -67,6 +67,7 @@ endif mkdir -p tmpprepackaged @cd tmpprepackaged && for plugin_package in $(PLUGIN_PACKAGES) ; do \ curl -O -L https://plugins-store.test.mattermost.com/release/$$plugin_package.tar.gz; \ + curl -O -L https://plugins-store.test.mattermost.com/release/$$plugin_package.tar.gz.sig; \ done @# ----- PLATFORM SPECIFIC ----- @@ -83,6 +84,7 @@ endif @# Strip and prepackage plugins @for plugin_package in $(PLUGIN_PACKAGES) ; do \ cat tmpprepackaged/$$plugin_package.tar.gz | gunzip | tar --wildcards --delete "*windows*" --delete "*linux*" | gzip > $(DIST_PATH)/prepackaged_plugins/$$plugin_package.tar.gz; \ + cp tmpprepackaged/$$plugin_package.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \ done @# Package tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-amd64.tar.gz mattermost @@ -103,6 +105,7 @@ endif @# Strip and prepackage plugins @for plugin_package in $(PLUGIN_PACKAGES) ; do \ cat tmpprepackaged/$$plugin_package.tar.gz | gunzip | tar --wildcards --delete "*darwin*" --delete "*linux*" | gzip > $(DIST_PATH)/prepackaged_plugins/$$plugin_package.tar.gz; \ + cp tmpprepackaged/$$plugin_package.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \ done @# Package cd $(DIST_ROOT) && zip -9 -r -q -l mattermost-$(BUILD_TYPE_NAME)-windows-amd64.zip mattermost && cd .. @@ -123,6 +126,7 @@ endif @# Strip and prepackage plugins @for plugin_package in $(PLUGIN_PACKAGES) ; do \ cat tmpprepackaged/$$plugin_package.tar.gz | gunzip | tar --wildcards --delete "*windows*" --delete "*darwin*" | gzip > $(DIST_PATH)/prepackaged_plugins/$$plugin_package.tar.gz; \ + cp tmpprepackaged/$$plugin_package.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \ done @# Package tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-amd64.tar.gz mattermost diff --git a/go.mod b/go.mod index 5191fedecd..c1d34bdc68 100644 --- a/go.mod +++ b/go.mod @@ -26,6 +26,7 @@ require ( github.com/gorilla/schema v1.1.0 github.com/gorilla/websocket v1.4.1 github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84 github.com/hashicorp/go-hclog v0.9.2 github.com/hashicorp/go-immutable-radix v1.1.0 // indirect diff --git a/go.sum b/go.sum index a7cf20cc17..aebdd5d0ae 100644 --- a/go.sum +++ b/go.sum @@ -155,6 +155,8 @@ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:Fecb github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= +github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84 h1:RvcDqcKLua4b/jtXez7ZVe9s6Iq5N6ujVevqY4FBQmM= github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= diff --git a/i18n/en.json b/i18n/en.json index 0c5e715198..7a10d0f68c 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -1572,18 +1572,6 @@ "id": "api.plugin.install.download_failed.app_error", "translation": "An error occurred while downloading the plugin." }, - { - "id": "api.plugin.install.insecure_url.app_error", - "translation": "An insecure url was given to download the plugin. Please provide a secure url or enable PluginSettings.AllowInsecureDownloadUrl in your configuration." - }, - { - "id": "api.plugin.install.invalid_url.app_error", - "translation": "An invalid url was given to download the plugin." - }, - { - "id": "api.plugin.install.reading_stream_failed.app_error", - "translation": "An error ocurred reading the plugin file stream." - }, { "id": "api.plugin.upload.array.app_error", "translation": "File array is empty in multipart/form request" @@ -3584,7 +3572,7 @@ }, { "id": "app.plugin.extract.app_error", - "translation": "Encountered error extracting plugin" + "translation": "An error occurred extracting the plugin bundle." }, { "id": "app.plugin.filesystem.app_error", @@ -3622,6 +3610,10 @@ "id": "app.plugin.install_id_failed_remove.app_error", "translation": "Unable to install plugin. A plugin with the same ID is already installed and failed to be removed." }, + { + "id": "app.plugin.install_marketplace_plugin.app_error", + "translation": "Failed to install marketplace plugin." + }, { "id": "app.plugin.invalid_id.app_error", "translation": "Plugin Id must be at least {{.Min}} characters, at most {{.Max}} characters and match {{.Regex}}." @@ -3638,6 +3630,10 @@ "id": "app.plugin.marketplace_client.app_error", "translation": "Failed to create marketplace client." }, + { + "id": "app.plugin.marketplace_client.failed_to_fetch", + "translation": "Failed to get plugins from the marketplace server." + }, { "id": "app.plugin.marketplace_disabled.app_error", "translation": "Marketplace has been disabled. Please check your logs for details." @@ -3646,14 +3642,14 @@ "id": "app.plugin.marketplace_plugin_request.app_error", "translation": "Failed to decode the marketplace plugin request." }, - { - "id": "app.plugin.marketplace_plugins.app_error", - "translation": "Failed to get plugins from the marketplace server." - }, { "id": "app.plugin.marketplace_plugins.not_found.app_error", "translation": "Could not find the requested marketplace plugin." }, + { + "id": "app.plugin.marketplace_plugins.signature_not_found.app_error", + "translation": "Could not find the requested marketplace plugin signature." + }, { "id": "app.plugin.marshal.app_error", "translation": "Failed to marshal marketplace plugins." diff --git a/model/config.go b/model/config.go index 083c0e3cf8..5cd61cb82e 100644 --- a/model/config.go +++ b/model/config.go @@ -2265,18 +2265,20 @@ type PluginState struct { } type PluginSettings struct { - Enable *bool - EnableUploads *bool `restricted:"true"` - AllowInsecureDownloadUrl *bool `restricted:"true"` - EnableHealthCheck *bool `restricted:"true"` - Directory *string `restricted:"true"` - ClientDirectory *string `restricted:"true"` - Plugins map[string]map[string]interface{} - PluginStates map[string]*PluginState - EnableMarketplace *bool - RequirePluginSignature *bool - MarketplaceUrl *string - SignaturePublicKeyFiles []string + Enable *bool + EnableUploads *bool `restricted:"true"` + AllowInsecureDownloadUrl *bool `restricted:"true"` + EnableHealthCheck *bool `restricted:"true"` + Directory *string `restricted:"true"` + ClientDirectory *string `restricted:"true"` + Plugins map[string]map[string]interface{} + PluginStates map[string]*PluginState + EnableMarketplace *bool + EnableRemoteMarketplace *bool + AutomaticPrepackagedPlugins *bool + RequirePluginSignature *bool + MarketplaceUrl *string + SignaturePublicKeyFiles []string } func (s *PluginSettings) SetDefaults(ls LogSettings) { @@ -2321,6 +2323,14 @@ func (s *PluginSettings) SetDefaults(ls LogSettings) { s.EnableMarketplace = NewBool(PLUGIN_SETTINGS_DEFAULT_ENABLE_MARKETPLACE) } + if s.EnableRemoteMarketplace == nil { + s.EnableRemoteMarketplace = NewBool(true) + } + + if s.AutomaticPrepackagedPlugins == nil { + s.AutomaticPrepackagedPlugins = NewBool(true) + } + if s.MarketplaceUrl == nil || *s.MarketplaceUrl == "" || *s.MarketplaceUrl == PLUGIN_SETTINGS_OLD_MARKETPLACE_URL { s.MarketplaceUrl = NewString(PLUGIN_SETTINGS_DEFAULT_MARKETPLACE_URL) } diff --git a/model/marketplace_plugin.go b/model/marketplace_plugin.go index b7e55d83c6..0e999bc244 100644 --- a/model/marketplace_plugin.go +++ b/model/marketplace_plugin.go @@ -78,6 +78,7 @@ type MarketplacePluginFilter struct { PerPage int Filter string ServerVersion string + LocalOnly bool } // ApplyToURL modifies the given url to include query string parameters for the request. @@ -89,6 +90,7 @@ func (filter *MarketplacePluginFilter) ApplyToURL(u *url.URL) { } q.Add("filter", filter.Filter) q.Add("server_version", filter.ServerVersion) + q.Add("local_only", strconv.FormatBool(filter.LocalOnly)) u.RawQuery = q.Encode() } diff --git a/plugin/environment.go b/plugin/environment.go index 38b0a6dd2a..5114474fc8 100644 --- a/plugin/environment.go +++ b/plugin/environment.go @@ -36,17 +36,27 @@ type registeredPlugin struct { supervisor *supervisor } +// PrepackagedPlugin is a plugin prepackaged with the server and found on startup. +type PrepackagedPlugin struct { + Path string + IconData string + Manifest *model.Manifest + Signature []byte +} + // Environment represents the execution environment of active plugins. // // It is meant for use by the Mattermost server to manipulate, interact with and report on the set // of active plugins. type Environment struct { - registeredPlugins sync.Map - pluginHealthCheckJob *PluginHealthCheckJob - logger *mlog.Logger - newAPIImpl apiImplCreatorFunc - pluginDir string - webappPluginDir string + registeredPlugins sync.Map + pluginHealthCheckJob *PluginHealthCheckJob + logger *mlog.Logger + newAPIImpl apiImplCreatorFunc + pluginDir string + webappPluginDir string + prepackagedPlugins []*PrepackagedPlugin + prepackagedPluginsLock sync.RWMutex } func NewEnvironment(newAPIImpl apiImplCreatorFunc, pluginDir string, webappPluginDir string, logger *mlog.Logger) (*Environment, error) { @@ -87,6 +97,15 @@ func (env *Environment) Available() ([]*model.BundleInfo, error) { return scanSearchPath(env.pluginDir) } +// Returns a list of prepackaged plugins available in the local prepackaged_plugins folder. +// The list content is immutable and should not be modified. +func (env *Environment) PrepackagedPlugins() []*PrepackagedPlugin { + env.prepackagedPluginsLock.RLock() + defer env.prepackagedPluginsLock.RUnlock() + + return env.prepackagedPlugins +} + // Returns a list of all currently active plugins within the environment. func (env *Environment) Active() []*model.BundleInfo { activePlugins := []*model.BundleInfo{} @@ -439,6 +458,13 @@ func (env *Environment) RunMultiPluginHook(hookRunnerFunc func(hooks Hooks) bool }) } +// SetPrepackagedPlugins saves prepackaged plugins in the environment. +func (env *Environment) SetPrepackagedPlugins(plugins []*PrepackagedPlugin) { + env.prepackagedPluginsLock.Lock() + env.prepackagedPlugins = plugins + env.prepackagedPluginsLock.Unlock() +} + func newRegisteredPlugin(bundle *model.BundleInfo) *registeredPlugin { state := model.PluginStateNotRunning return ®isteredPlugin{failTimeStamps: []time.Time{}, State: state, BundleInfo: bundle} diff --git a/tests/testplugin.tar.gz b/tests/testplugin.tar.gz index 4b9b244d03dd0b3f1f5bcdbf6309f027d19ae835..2dbbcc2116157ce14b1bd5ec9f2bafbdbd030d67 100644 GIT binary patch literal 71914 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 H`2uosU(L}} diff --git a/tests/testplugin2.tar.gz b/tests/testplugin2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..635d01dafdcfffacc91fbbe0300b71f80a874136 GIT binary patch literal 71921 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≤JyO$ zdCY~5xuXQqp2P9M=pfP4PH!9uv)3w#gJF6OzIua2T#Hd-gd+XO64cB~OU|u;aNw7*U1_dq4P2Y<#fDm_ z{9dmp6&?2ZYo#yx?PB+kEH|ycNBrn)qhp z?m;k$(iw(FHyIt-jKbt+utXb|_({-CMAzADpt~>(TgU7JadOF~6$&LoXw5G{DH$Ow z3UY`_Qx{LiyX<^H&6;`?*Bl*FD8wkJZ}E`a4XH0Xp!^RnqDzTSqhXG0b^_dzKql?) zI3f7@j!g_Cnk~TMv|5H+GY5B0^dA!?PrUhPTz_Px1_t*qXlw-MNuG%NBT5|C3LFGv zxgR5h2?-o83@$enG%ap$t>kM++qM5Cj`3Fuy)TpqZ0$U_Uo5&|=~EZWe{F zOio@nzNJDmzN)w}We^)h7J0j{A|&7E^RG-UcukDFp%oV04lCW-11iT!R3ByCx#iNH z=2@-Y$rp(la-BGrR0_OFLD+qPZ;YJVDHe0K-HL85a^rUHJ;Al_LrkCzTOa&>f~mCe zx18vK0F*a(TfE)lL(QB$RdEBoR9?-{alWqTI$m5YBh6_LH+h3Y>4A&JZ~0x@ZLIoc z;3C(12@mc)*^6xbkCj)2a3Sri(N^I`;2+qQ>HiD~V< z4Dq0mkCI83E6%`1eepNw8dz0_Zwj^MR3&RuRZR&KP+RdG?vhm%=@4RGi#UBq+@P$v;#r2(oK&(!Bdw=>QZHP0oMEtdH#ZV5TjevR1%azdlo1@I6oejM5^Os(r)^kO7AFirbvtL`U2nl?E zDZ3G0-=OSxj-hB&>H?8NpS^R3Z@#f1HJxY>(gV4|-lH2Tx`x#=pWvdhVPm6iEPVs4 zNt5wZHmVMgKCeCG&*sTvRO zOV?!?I@#x_`PmSE{Pf&JB?<+G8m0jVTG1!jD4C7IY;w9XUO9iRF&z8xG)h1>>~B6^ zTYJ95nXl26dQJ2o*^nF2Ne_@w6++RCp2+!fCpk_60y%tw#<)fwBi%6`DrpYSX7VQ0 zXdSNdNmJuV;~Fg8bcByqpFDL&xGtWw-+WVbjIp+AjxN68!K@!Px~O3?MnXLJ+&YUU zTd>bJlNOFM;ofl*G(+oktIUpgy%mCp=fw6Z5C=D%9ue%8qLHD8Kf@N)YyhIj(QI{X z{n6tmPoF*i{wt&IkwG2O1+10Rv*hPb!%>=z|2fI0jW8b%lPPu#Z~SdXy)$QgLzC`a z5c}wmUm*&Il7`$JtEbqwtB4#H2tupnp#mY-bZs7DJd6A{)?z=A-eOKcRpL2u2IYGe z-*e8(H_ce3<(wGe6u{B~#&QamN^MsM*e^2_6ZJ<}m}?Yg4+b|-B+V7l=m!6!sECHC za`~2g%a!FX*`<)P-6F5do0aRrpwoXPamUV+qj|?&SrTXv%gYSZond1Uj{YPCzmb?< zxQD|xi7NOFuQZxB33E{1!~{ZacD%|`)Fe?`B`1*D#iU{1$QX*7ojVGtdYBxU!Qg1@ zYcnY46?KFLCnIz>plMdA7TsBq=0QoAIv)713;54utS2=oHJav#gZ6(w+A@4js^8QsV_w8b@7;FSG%D{ygfRHJ@(r-!|dWs z^7(CC6^&faJyr%#N+p%`=TE5ioT${FYobzLnd@~`!!f7xZb|^{=*~8uH4Q*Y3Q9ru zmg;inl-l_!Idm2=`rByP8-G~(!;<<#&~# zw3_$%EjDYCs8=^i*R(l){3NCertH9Ja&`X!HB7yGAtg}_xzB3(ee4}|kH2A)g0fRu zQTbF{HJwZVobH-qSxhO^hU8wFhG9r`KgMc=aH=H|PXjulwecD&-GIhy&s0-xYXjJ` zDD4mBR25_DhA`gdJ&8^XBoA#-S4(t=lU}5ng^y663(xQj0vJ3|A+NlxES~i6y0?)9 zTZ^6x(b6b=Po1ouHDOQzSK4y`X7=#*FX^JSIvL9|0voX$1M zqiI6J4abSU?F+T-B;Qk`$L^qAW%g)KvmY}UR?M1ZTdm-2vhwc^8cQuzsM?Kkto-$b zk4(xrvMSK@vo|Y?P=G#J?wg-e4ZVKn!CYaJJ>VMy+^GZg?a7o)t!5- ztvN#NOr#Lu9>Fn5E zrRmUNdO}Ccfg4_wa(XS6^B5wAOEgSGe^kR9+&c-Y@#_$K)cA8lpHJ!e2lLF(UT3}8NIc8=O-KTmUTwoV zu+ha-t(pv0TNqnBPW$8=++-*%7vKcF=Ndo5cEVx#I*obBKe){DY%*jNdMFl<6ox*X ze&l2*yW+n_#nGKZk^$FrNXJ|Uu3y55)(Bx0NrLgh2RxUIn?pLE=K-KK?3A7rUifBn zSB}UZ23&N-En5Y*H_UQL8()D3Q;cGeUTKXizOb!r>C(3Ees zYRvu~ckzz4mEpMT#`^wnz%+H!-Zc&aDl*bC_k+(DLNEs!bWNO4u!08Huc&R)vt#6% zem}V1?b71ycJI^CmbE=Pn-Jz+xCBXm=rnk!ED6ExI?m#zKR(_JIxQYbC%sa&gB-TW z4<6pCcIih8yX3m(|ML$ricQ>sQ*B%qo%?w!9GIh%nlidm9K8H%-Nu8wP{n|Q=(JJk zf8obfpGK!`ic0T^RCxabdP33_eP!2`4$7d0&9|{DEnHCp0tHW~E0x33wblOs<5*o) zPv9N6)1J{TG{>J7C9wq^YH#4a!0ocFk-S`;=S^&fYE+N4EZyJpWhGf$Skh2C$=rLcALY+>8^hF#CDNdMC ziBXf^-hWB~Q}xi3;*<50KB{XbidyiOzqmOWP&Hnn0B?MoGmkL~p*h?LmN|;qGTyb6 zdt7AvB*$b9vUnW}-mmp?bTm`BI-e3RRas%*Ne|N;pfd>YXWal=g={g%(+zk!0taxK zIHP4-bKn<2i)MKTknerXuGg6WFkR?ms+!I;BQGDGW*XW3YT~|q>X5t2D)-~gtM@P8 z|Glo%_fqWQQ@;JVZf!i$QvIUQvR*J*=+Xyyj+#p-l*UJ%H2GR+zUn|;pdqy*_;HF$ zb~dDxl++N|tX@u=t1U{})n$sHPiSwHR#_BrEx7VQ^WpuXatI?R97ykLwxHW3=D02) z%i5!|P3G}jtA~Xmu)EzG9B=>zM_GD_j1KcIK?{_dp(_UD?#|o2-S-FEue)z|Uw`;< zySv)$o&fLrYdi%>vI_!3w{9RrcVE!LTDR+J7<1crwDx6ftarQ0IDSk%UDL)>nh~0l z;Fv4@QCZTl>LtbwoQHZm#ta3}gc8=Fuotd>)Zl}w-~*oLpl)@daaP3`Spg4ceorzI z8uv6Sc9Z_at!SyDpOo7u6qv|0YTUr^a>r;)se9!d2%|1*#9yxu2Qqe9@YI;$(S;@` z6tnb-Q=H+!qZ4LQ0hfHkoRO6CYPd}#=|E1yWO9zZC@B7HY{4t9_c|EfHW+}DrhNj=C}43KYarL-!$U*%M@Ppv18i+G zfvP1>82%i^7{D0x?=F8Km(kVmdALf?csu+QPxpR|K-BQ#7IW-$32i%z%{+z9wcy;j z7p$(K$EdX(UxN(N^N;D^?wA3_pCgo_WDI7Hc#~yp_InTnblwm~Jtt@`H)(+O&!K0%^EBt~dd!1ml9W*ZSUp~##njBNTvZ8N7 zCNoV%%@yn7=T~>U|49t0U_@ckycs_`ydT|1tFH!0c(8KR(uQC!y=fC=#y_utdz+U1 z6}+@fG|{Ui6F7#r)lGX;wNcFJlS&TKT)~=Fx|i=dkqFWl^6zv^hx-0rAr7rI{z-{YZqa)i zknRay8Si%emDiy-t?ZBICP-_H8@q@kUPH>MQ^-J=CgkL0;)ZgHDu%2u?w`P>_X+)o z(5oo^jCT!Dd%lk|1jQ%X-XY%z*lQ z6oUrUVaSxfDlUzGGtb(mzcbTCJ!|n4-v)H3-CDmq;c9XnY_&jNo0!#Akmat*AT`cG zuObP`Yd*F(WaN)oKg!SaG{m=2l}%-iv5ITl{9>ZIXzWNwXoET3{yc6r{tKN`+&+k7 z6FN^(J|MD&1S!|Ecm9}0D6ZGsu6{jQ!L*bO0 zi3!ez=+iQlTtLv)X$g}1^7FPbkl|M8E1G+Vz?H^YbW;;2QP`F0J8 z0Kb0-KiQAVGHoyJX<0o6vQZxx(j4qug?P!UDVLl4Xli^ntJ+v`W!%(1SR#kdEnCTEExo@#&h<6>wM4+ea8Di!{j}?^IGmH z1ABfCjNC13pP?{5P~jy>4CNDq)vXhNN^?tlHvDQDU&IN)AVl)b*qA(_mICd!e;$mE z-0;$b*k!;Wl(pYPaSe1l1qcPoRuHEI!dAA(si`j&4;$<<*EsU3TU=K7cbdlS+GuJ& z=t5?zWwmdag}PBF{z52MF@Qy?)(=5uc)=mqzW9T1v}&b>SCW! zSax2|rN}qr!1~CK1PoX|bnng=V786>;T!lA%Xc;lZ^si58-A`h3+42oKK{wg$!HZpN zGg9k9|3^y8D5Wrg%~FyUl*vSf!Z1uhGva`P{3=8R1z}nt@V~+bAaVX<U7`85mChXAF(3CdC&zx(vQG!2>KTqd_w^>HCjRFw2oCB%0OfdtG_pLO^^%TX6 z(~!KxG4yZt9)P<09~4v4p9i63x(VZF{-~^~k+_{|H21Vs)mPi)GNo#q(t-&<;3!Tl zNi8}Q1)w&kh0b1_bm}%8WOaL;;B7)#zWvQ=E_ohj&{mwB1l=;XFf6jV>jB>d&r*|<_hvt3?O1pd+PnSi+^n!6@E-*~mgK}PRTj+-3T`z{Ci z@b-;%#oX$yS6(CQi&u6@jS{-FX*a7HTX9=6ySl=x*xQsgrEJGklJ{D*V}9uulo~lk zioQ{1*a7uK-6fkF3alo%v_aB5qWB*q-Pn!7YVqo;BPu+V^SH;VomVbpXHg6bcAU;? znoCjts|m?jhYue*L?lh!5+$yoL5HuAX4xgX;3S~sj0N!S}XffejU$;pt9yab?MOk{%T*#!1ZzJ9G6D#qE31*hr*34K0~Cl=T# z264x;F3Rkeab1p#0^Q@FDS!{$E7Wj9i5SUb%Dc1$X0txn-l4zqY^?YwEeCTNwD^js zUK6fK%+8#jCfT(-h2vR%W{lKGDI^Yj&?1Ih@=k>T40}+c&vwP2ya(XuhLuAz`w}TE zr6^#WErVpcm~z}z6L_r(Zc#_`@vLndb(k7z(z8{AD|auv;bL-3y>!>v zBZ!W3JlJMCq#T>?qxSt06Djs*BQLaKHr}q-Cer~rKsOq81(yqYmX?AY!YS>Nr{+hr zpG^iwp-pV~;pTjEfLq%$15ipX3PA_mp?axn14=~(`EY+ApJO1oxR0(JQDWchJKj87!_kB;eN|EYoI=*Fu!8@RJ zqh@!=@@-pjh_Ak(FR<>(jvg0DUvu)B5EUK{Y7D(@hqqPEz5}f2xH_gk+KLz*zamOV z&hgW+E{Y|;ma~X#|M!g6aR+EJ+hG|`oLu+jt@tRMKPT0hagD*~MbWnDRn-s$l110{ z{D8EtJD=V;rwXO%bu^D_PbLaS5BBhZk}FjJnoCNGgb%I~c?Xo@2*WT7x^XWpxkq~) z=eKm@eSC`Mf=S%h?{YHQULpx8KYN#@z{pX!>wjdEJMnd|(>X=Df=|XrUiO-O6aKg` zOX_z@hv@{6)w7a=YNc?*VKuPQrZCmtY@@W!Q!17g#_md})JGOP?aP1!kPbHeV)5gi zz_(Z6pB@l)d~5?$@7WwAR)DZahSvdc4i_c5tirf*L~r>~v47uUacgDA?s$`}UaNn> ziC3YroNFndMQ6_(k-6NlmbsQsj5ZddC)34h8ZigW`HiTeSZxtH5P3}JtDu=xcnXR& zfCC*}f7^*)HwfjOch=Urk1O$@{t{EUX1C`c1lZqbAz1_zu%ihH`(Nq9(W8+e$H3q(7b~m=Z12|!Y9M*WF>z3^dwqejrvbc;>V93#V1c5KVE+{ zSU*|){#pO|`uC64ANRlS$4^&q+N0Ar=eqf%x6 zyi94tlTk9{6b;rbA1!2L#~Eg)-p!$b-W=kY)z(Mx)V3=#I+J({07Co?aVp(=j!yDS z`Ubi#WyYe+S<&2ytJ~edi4|=dDF7~H59xD+O@j&&YN7x)>82#Cj z6#?WHnW!kfXLhkSNiyiuNu_=W)?oLdpUdzQWaAbvD)y9H+u&b+rtkdVn$swYDwTk$M{a}k_NXM3Vmeh| zB%cFgyu`OoYFQa$hg?l~aMr);yBt0C%bSdw7>iT3VjB-1YWrm+sOEB*1?Vod!X2oq zlAH_MF072;V>|>VK^rT{#HZG&h8B*Nz2QADyac9KEtqHG-e2&h>qk~plpii*z>vSg%cc{U{g6?0r0FdQUG5QCb%x&Z{C*Xg>2~1=i>Wae zyWIVxD)!awVh9#HqT#o?-8g?sK+Gwp`KIwQJXd8ok!ph|XX1J|0b5J~FMfwpR7t5S zn;ZtB!(Eqx(F30uMtROGM>}xek)(a}+%5{;P0&M&Zn5Za>#geYxY)Xs6DAu=r2p59 z>}H{)cNMUvN_O%y1~!-N1)k_U;^b$y_b=#u2a3t8cId^`2CmY16VCJH_`N#4OEB4* zdLi9|?>(%nX%vPQ2{LFn04FR=>y4((VDJQ_2m#>mBPe`QGO^ zhb+%&rIrgo(+C$TH&@%GIaYMG42~Q)l&aTh!(n&GHA@*@oh8)fz&hAY&asJ;-kytn z6WmAMmgdX>=7uYF>R4ICgFg?F-xbfqx#fodLWbUKl~(ZW;tAe(1xvoSnw7iS^2^Oz zv66i9zh|Xt|I8~lu)1cX<2CFq$~9h;92B0LzjDYVhPti{{k^@ z%6gcp>FHF|;NI&^8ZLEcMRwOsz+E+5ZKJ$NJh@%gj2n{}$heb;Ia(!=J#7_B&LcA| zV=CnuF0>N(lR~+9pt*#ppkaa3lUN~GvcnWUW>0qRtlEM2Wf{PI3<7Ov(_aiWpb-$d zmxZx%(JbCGTwZRdK`c?K#^p%UDt>eB=)SN6>G&P~?^*kcBSEILS)QNPbra;QD>GuQ zV`O-&=00^ydk6yWf0pOdg8es~(VLF1#Ap`Iw?GlDY>b9quG|2kiw7c~dRPA8W0<4e zv-!LoEU#6D?|pK+AWxvuXJfH}uCOVN%xCD78=Qcqk1l3pOwq6tHGJy(Ya*^=NN=U z`!p4cgsvxj!RF$rjvDS{<3alquWgf2hc8iTw7n#^_hLBvcd)Z9-9i5fjjgWLTO4|! z@YV-cyQGUBXnSS1~@63N}k;AoC~N0)W_io9!R2yi{S?%w4p5zlTVl> z;St%|@wKCLBF+5tTv8h360yE6xcQScPQXw|WQCV7Og1aCNi9=I>?Ezok|zY%_*bJ9 zR^`CMi13==+S`K*P7mpi=Zl43KCLv5RRp^_5s)KGT5cr^cSC5~K8=*N~u zFJVHgE2fc|&d{s7E|7a`(HulOB4yR4wR^6eM|n&#%++Pf(`NH{s*!y-mU?CEC@oz` zPE|vPio~6R?e{MacHh@^g0jfTpfp9$s}FzuE6&cn=HU^CrvWa}KpG|{DlgF$mX7?R zK{QDScX;Y>86*Zr7b{tCjP;HQ?wdDVr#p?m{KYiP?fz~1@B8?H(iQQmpI-j>VVho( z0S8~ptRs2TQARNhpqpPcs63dr(J97eiJ=e z#U2-s2pEXVvW&s=W|4$eTBq+#L|U6#Z*8c&A^>?N${=}OZVL3O1P3<6Npe#_CO`}4 z21Cr_!HZd@Cbc2VWY^G=Oe-=)ey64QsSDHKUWGV!B6uUgxY-6I`$wuF(s+uL$|>y= zzjA1w-fAB-n)ac*I5IG;HmKmCnjxg7ls6>ytsu}D-;3a$Gwv4_WXFNikb1Ne82Q>j zjnYdK|BcX#I|&^;HTWXeGz+z5=%04AqrVgoCw<7t6x25Jv*%(Gc*&dOvxJQk$=|lG z^j)gT9+(bGbSkmnjC6z(2OP_>f0hBEN?9~(;RKaRhP1f7n#L~B@)vmXkj_eI* zr!>dI}Fbbj(I1X|3p|w;iZg^jTWbmV%unmiG;uF#tS%=R3T*g-?xSmzWl&CKv zZYCYs8tbayHe@OYpXeA~<*LQlSH&{fpT+hp9rlgS_w*}okS!wxDxQhUNL4Z{8V# zW;=6raa+#jgR7BBpDivrZ$Iz8-hJBzI@@_yH<%}y6zp_&?{!deDY{K7{>-Koe_TB~=(P;J=6r?UeyUFa z{&dx3bsv#yyI76h+Z}OQ^nP#A zyI!4*STTG3f}3V@7x|;7W?|ku1N-iES-9$wL>IJI?@V*oU3uQZbJl|P#4d?ln~d2Q zjM*r-TR2T9gjn5mU0J-c#lU**H(&fWii{785&y!&lin{Vlh4!J9bYa=4vR5;vWSrj zW36@J`{yl=$nb>}G*2bhEL$iDI)P?=cARMzGn@8)RUb?S?n9$X!7AR+b8-=Gl5{Z_~1sfWIUf2F1NLnr( zvx_SgIZPftwBq9b>rQ~l15O=+)l$_VM+niB>J>D0yTnF|`M0f?ZMIMEHs{Fg?j|&Q zt>4p>EObSIu7jaCVtB@vIFAd{A3*2-6*nDtt!md#r^MIr`F#2tBtN-9no*qb`H4B7 z=z0oXY4%J`XjqXvbKg3REYfC09y!TFyYc0@)eL|F-v7-qYy7_cuTN7%OYxc`{&hWE zxx@4r=TU8nq{`!9Jr<#$Kc-IYih4d*{8%WN7;!eBLP>5d>y8r8xF;^%{lC9`wfm#> z=BZ0Hr%C11{-jdNo0lK{pKckNcWy#CLpc7RfX6)VA;nln!ViEtG`T5GxN%&QB)mrM z(wL2ue8iNb^H1jC1d9Q_0>YV1V!42oed4H41{CFb^+14ZDjp;q2aI|mYMb)x1uBJvvT4#q4|=1`1)3X z0|G(oIBdL&FY-pav3CZVYu-3&g-I@MkNujKz2PL$Fgv}^Q)aJ6r8e#v%<5|@M1*+x`ZbsE_yJ4MRuE8mw(u(t){-C;fjJj4}@BI*OQgCWEAB2=9#V zT*3~nG>b_g@miZtQ*=_)*<{`MS4=DYEB4@5<{7_ojFMk@;(iqrL$8inzdB=t7cB*d z>j44!bQ%7F4P7-IG_+ng9l>zs%=lNf-`<`JytI3ziTA=2uU zYq%6hgYnXv<44o4rlmL0SDtz^~RJ-Q9 z-_CNaTCK1Ow5-2W|B^@q3fWpkN_zQj_ub#$?tUOAkw5=ANmvJ_{9AKyd5V|6YtIL}^$2drHbWglP7c4rqU z!_sgT5=|kVgrn?V04WNy$>~a*E`Qix>1VxsJ=I3@`vNw?<+bCv!8x2qK`tjMw$i$yX2EMeS zFU7ivL5N&ie$oz}Ew8N>KRgXjmY;@z?uVii>77&; z+5@OjCwLdV!_y4-rwZn0+;1-F=cOx;S5;l`x&GMkQP(=hmt>;h$& zHpU+5ld&DUg7HB_(!m~~M0ttwTZnz-Vm>$yJ_MyMA_?HzlW<^IU?gOoBiBEJ{v)#) zQvTvN&B=9#qK90P)Th~brdb9e&@@ilpo5^ih1p4>sgQXz#=0E!U)E%k9U7n)EGJ67 z0FWM+9if6?A4_=Q zi)`{qGHN1Gp(;Vh#=d!-ah#+!gTfnPB-XgVV%}Ml5Z$?4RYXWH2;B_~%=ky{Wl=hd zhT6R?Ai6D(h2uc;&{da{@B$o`Z_|y1?{*%0O7rNbK*4+&vK7JKq;UY$g1FW#kE{pB$`H)n1aFTiY-B`H z@1oq=Dk%YD1NChDRbnp3ngAh}(@%hMjD0)~8?9C~w!UtMHECqy1|2qBxzKCd=Tb!C zk``dfsMvIkEvrrrDWzkefA|=UPJy;m=s{+$zeBwK+oW)$fx7?DQYqAN%#(H1#cguQ z8B!4n3#?@^veGONi**a%nOHTBNBC`!RTkP7F$p@w4%}M`^ki*&Hb%az#RI*GP&Fj{ z!yG22`Z4fY&dg=(>d;+Oc5uMJBu@bhrfJIAh^rr|5M3oK7FEfb%Chk6wml&*pXV*B4V{YxZ5t`486N2cX#k}w^Q(772wT$_GV0IT? z&)PL-`MTYqGVak*?E=^72{=(KgL3DL%DGEj7yA4d_KWCBbxWgY0rR~W=Ro!j`$N=7 z<KamZ+J)v?GV z#5r-XO_y*iR@yzM!QU5b#S`M)>+Hq{{I9 z)fVziDBt(Y`QJ|Z0qWzRw-QxpZld3GFR3`yFj5vB*nVC9ey^mMIP1pmM`?+>U&Tu1 zy)$XROSUx$6Wp7EZsu0UtV8-(?AUKbPsLt+xv1hgVR&MT5B#^Kx5BxWp*32wUIfI# zCRiwFsbMi2noU)1a!krxX;>T&$z;{{Hz^mLx?zNo9wg|8(zhj>mywEgsW{eQ#O&Mg%Eu5I&Wx08Q zDJxj4?|#F&6*1h59GD<_4*U8N+jRALe&r#~V$#;#?KJL+o_k#K6(kOC$-9zvz54Z|+z28ijGoswTi~ZGMBc6z?LHY)Cid85TN^ zC+J0vo)&VuLj1s8eX;iLxMhBhMS@FT-^=1eUde^2?SIY^pmkIz@rZ!?aLgVecu9)x zNk+o})?1&P7s=6cW?H03I|#5 z<5SR&y_+5AC3_K{d_o7VCg{De0p`bmwj%;+QojzV@l){k&@Wagbq#BDD{3%tLt`Vp=2 z`$Zb4v_+j48P2rQ`|RAAA6M`$3fs(Ie6hMD_!?%!-l9`Mm#tBht@$m@q5n$eqXKjZ za@}ri%Uo4V8E0gqbMcHbCTkovpq?nbEG{(vG`zITtZv{%;FBo1XO%fm-7kE34FDVK@0D;sjib*uiRvqHopk!mvwWkYwkbI!NK!80Dg;6dvLz2E9-); zx-mX}dP}&s7@mRgWnFmG?an|P%)9%u6BD7Oelj0_|7FcQ)@BTYscqwFVa-Uuwq`OK z&88e>XnycEV5BMD_v@dde9-5xT2O2nr+p`atEAVg&PI8oT$FS2P}ZlQ{Nm)3bCOPC z;vpN!RkBPLa{ti|Nw<4&+o(;Kym+$YFHe+=oprkg;#Ho&1Un7zzTU*!-E9J9x`wa( z*3A`r=>qE?QI6NCPvRKGGZ4H%KtoY|8BZYSOvNpMEr4)FT~i}y#DP!Di6=f&_C1y? z?jr@2zS&U*FZgvQz#eb-BTiD#k3c(X=CczLMcUjgbxd?+efxo|WPZlM!bcJItEXlk z%i^+{z*dOe7|lQ{j1yA$PGYt^q9SbOs!i7r?~8=y^@UKSz4vZX3vIL3({wuMb=OVr z`%B=+Kpk3FAQ*K5iyWKIsw1b!f#y5zkXZmN>^6ZizoT?q8+?D*L9X;K_X9b*$mZ zZ#EiT?oT<96y9bxXi2kdjE9?7_SGo*6z|7Fiswjm1~X-Z`Wn+YgJLdW3|D{~d{B%#vJY|z*MfNr3Rv`;zFCGGGgb$aY(z=PV-tu0 z?T-BVp61J;(REpeu~YPFhwhs9tfo+8I_s0K8$ zD0m5Of(IvLe4#*{GDmq2pOGmNW+NIG|+5+oM5aKOZsi>2LpkotWOk~ zMc-vpiL_EdsYTL6u>)^!1Ljvo@hFo);mDKpgktJq2LK`Tu*4V1^Duaw(T0!ub#b&N zP{jprVgUn2`Y&=++*oK5FJXe6wFRV!qQ*tS(GF0a#3mfCS2`z~#LFC44dVcCAV4Bg z6is;f^v3DQDlo47No{Le1s;Kxwp82< zS{zRY6GoTY@dm+xBi#YmH(Ib%#;aB6bfZ984edl3F1==ApwI%i4{0w7ueC~b=`xT) zr|j=eWd*NCyl4Ffof6>Atz9a52c{DPNo{`eLT22!~!GM|e+bh}x1zE#iN*g^Q$&QoS})03igUEP1nDp2phk;IQG- zGbY=y#D!0V*~M3NlSAKR*!Wxe);MYz4w5@26h^ASCoDDBz+&<_o*OB-LUzUo8dA>X zVogJ8j7HQa2;};PLG?@U{lR`oGbh}P1E{VwlOd(Vz8M)6 zZy6)S55GaTi%qs%S=7d?gs5ul$os4YQmQ1hpt3X!w@ zs(fYi9Sxv%aw&d$vJ%4pZ&zZ-DC1y_-wT(TN<(XDNCXO{U-&A!N3l}qicO&Gl)md- z$cA~J)&z;&v$?+TO1l4=2H=;8*bECqen|i5RT1A0l zYLgnURBbU6qQd~ubt!6@Fe6uWEm~4JtFP2^gMN^3Ipq}3b8MVk-*(ET`83L*_QHiu zkVCtV$ghn;f!r~?_+K1Svati*is=2I?#Fglfu$zhu`i2tsm|Ms5|+Q>Gva0ePOH>j zJe673o7;%Cnok^xr^~re9h}^lX*y$VBMX7GLMqSzRml6u)ZDH7KAM)qU@9@(5D`{0 zksFcC232*L57rKYZLVufR+KZvGGH`Z1%KXSeRuLhTQ5A5HDEkUdI@S^#J4N@MrL;G z2Qu>N4m2uA2(9DBB2}6e`s!?XZVB1jsGzmQ$PZZ%j{Omj-JMO+UAl!&%~rvNhH~Ay z({psLl>9OlduA_U(j_B{EFd)exf{2zMYMWPCsCSX^jP6C0v;VbD0@)egLMLAlM8&* zc&UMh9zbeM=wSoeQzs`f0Jwm?TGqOdz^1yZ>M?d0z0~^}yPo^!)orWe9YwfzTTs@> zHjC*bL#sZ}6U9s)AbFb{0i>o6FoDH18!tn1sUPXc>+EJwSllo8$e<&kTAi|G8o>!v z=?s5Y31nVtc)EgM4YMhfZ!1v<-EGtpo*|LfN&l_zJI5Ya_~;QIA34?Rq3S>96Q%+9 zF&PfIxdEk*=+9^hC?yl17Hv_?gE1QhIVYAo8j*RX8uo{DL}mJ9wF!e)5=l}rFJX|f zOIf-==Nj2pdJ%>oS#cww+k!)bv(%fA3ucaJkqM?4ffrZ{Flm9ezyBT&>NpN(MAo6n zB|08{^1vTt;$6r56P<%D$W<_65#L$P7>MyKI>!~7oSw!L3H^`T85@8=EOkMv$&fmb ziv15+DlY!=q)=#PhM$qmX_h)BJTj0`+8MVAW16yKDv^HZV%_DIvXzM;8=7m{CJ^ZRa}Awu$@TG7GQ~sE)rNDh)d9k)0lT+ zPNJh4?=Mylk~3wAFDu6^_Uf|u9bz@d`Uzqei~>b^KWe5+uowQQ7g{oNF!Ze#qi-i=utW$D8z#k~$g~uSUv^bq_dO&;6i_>&rkv-Y%Bo@T(y}vO)S%(nV>gC% zo4wWIR{`iB~7REVUhqd;?BNxHNzRK`?AxFii;!#CrLo4dkQBp7u_ zv~Bw?Qai*vrP3 zdQvWl8(|_dZv2>JEo{ygwNSjI(6Dl8C&F|e935Q7Edj!@J)n}4=wx{5HVmuEv%Pyt z5@t?{Qw;V$%ubUYqLaH%6JT7}Y%w}~C3%rN#%6Zcwuwa;@<8&)GpGji}6LudlP{?q&#ZkBIq|D$#sY1qsy0vfkH2EH6MGkdyH}A3Im_3*rCdp1QOHD)MVHFPta@A}wn~=GSls0c~k#oW%`rn&R=NX)+S-Kn@?w#e^Tx zY9D2}k>jv%TYMW5--JW%yZ{P%Ho%7RX<ZRLPAxaTjpNl*!NpQ zzKn*82yJVWwiP!fb4yX2o1mNM??Ty_(0-xvPc}(T6H45ue9hl-IaNh0cT0!rBac^Q zDL)~|)(s4c+G9ta23l)P8gxoVr7cy;W2&r#Cb;Sp{Uyl@2iK-bz-*?`-TN#X_IVlE zrnr?V*m&RoOC{9=Q#N1~Npu{l{WO}KU+uhH&3l+1HEW#4nZ#N2&cO~e%!V3I{Hz#QK9LOYL$+j zMMU>GknieRmD0jaf%H*kLhkb|);ZIO`$sA#>4cWg>Psh|8(szfINN#hi&gnWR5-wS zRSKnR3+lz$a;YVyj`7X%pIv8vD~U`MpUWpkIN|F;_Pz%8F(%*5vkZ@n#PjA}dBy9| zDt26cSIDe$4q&B3@qEqs&c|4I&SbT1_r!@eA=}ZQ$>9l%>Y>Icz2Deo*H*s?tHY3D z2epPM=a5Kv5xbg97<@=!ubR$MK(caQrf>zQtK6K?x>!<&NZ(55b4%Rg2M0>+1N%yYC&FzPV9rvy#8Ci^eq8Yw<=5R*?o;KA@h`u+>URP|hysUM@|*_C zeQcuFg#6|uRCG4Pb+0AN7F2Ol#733qNojVLGcA?tY!m{R_KMAvq9ODQYV8^<)(ZP2 z%zDR51yK8rG)pUM3D1E`Ab|hVMB;8nlA^^W{O9u}T{ux&2=0sQ;FGbZ4I7{%I_b%m z*foRX3;&U|2HD#}XO}jSQJQ;UrVs$PmISwdB@(PRK{}oR% z8f=b9w8@A{Vt~^Md4B}-6HYapk_3cnh7CozHXNY= ziDZ>9TyhT*ODnW#JL0Vs`?`Ym^hz!2eAgCqz1h{uGOrTeB6YsYh!E16lJW;38k}dK zS=yMT{7(MH*j3WLmUu1ev{b0Qq&5nVspQ`Lr0hQi3&Iv6A0wiV93`!2$QQ@*j?!50 zAb1U=+d~;nSI*qk!KOo9riRwUpNT*Q?vgEDc%rq^L+=?7T*yy~j1H5SSA`{BkrG1z zDV^O-(H$pe`+nQTdUEhE5aK{eq$^9#g=jK$AQRzLB(U*-$=bR2l$nl;T{L9uPX${S zEhW4qHNS7P3nnpx;}2|)WQlf++oO$hld_i=;s*m131qBla@HH6JegEZkR&0tR~sV^ zYb(u~-qvhPNNf(tx1DqF`u&MGaK+}-bxy3yp4@cP#M6IGL8f3wT^#w`p6^8NPF~wR z&8*16mPMc{mir6&Vj<51+PSv029Mq_!S~oa*{6jig#R+_|3qRD&M;mQ*A}QwU03xc zty9REc?V0?Z7qVV3aIvB!z)zPzw5ZQLeR)$IXflKok%ZvxDzuiFGL`8HIIs66zs=0 z97EBvxp?PQO>qXXpiSkbMznbncf|pCOa0(qwe?%6M9;pSN_2A_ z2XWG!&W(lhc-11>MHN?^n+m=v{5Yc2G?)_w|c6t2Ri3 zzr&WJx|Yq2H*S)nT9j{k&AT&JjruSODcU$)yLU|`oi71}eRq-*w;85m2f8b$#WTsf zg6p0p-UZAhnk|kmZ7wa|a+dBKnJUxV6+Dd>a(4*yndS3;CuTX!`cZz?g;6B=BKDxi zt6v&*t}9_Z>p?%dWq`8M9*dmD3e%;}9L=+SvnAn$j?Hhr?bqV9a@Y4Grr)$R7q^w* zOa8KwpT2N^iLb2+&-V47nj5L-n&eJWpI~}-)l3+NjGiEFjq9< z6tcJej(UC9MlF6xhn1A0w{pS_7B_^WB= zaf<_DQJN@TZgocObt#%$H$o`~%HrN6$tKD4QUV6o@vtYt?{RKkp>HXN=sSytV?3Fn z0N;T986tqMx>4wrfqPLrq?s^$i?C*nISMyt+YCw%c^sEsN4;`=d+o8Z`2xB=7I*N5 zpZFwKWBdIp7E=ea6={@iRS^ZpK$K_#h0PN!T|e^)p8ql_9L2rb1vRC&5enIquDjb0s@# zqvJG&rQ!~fovz0%6C6yQ5Kk@F{)jar&j2@eqFpJRHakIcvtmERP*CKAm?d;`7{PJ$ z2Ec9{G|`afVWmaq5d|pZS-dBY1BmpiT$R)f4T&eds0gp742DpE=(&ui znV0!U=nIg0B53i@QmWb2l7^-@D(`=ET1hOoYYNcdM zyZOHTAm_Z?ev%XG7O^5SQWC=M(|dM#=IauXaa|FyV%^t{a}`CxIyfo+t(j~Urc2&S z@YACp;(nPIlfLdYZ7o$dz-tJcL^#&;Mqa|8=aCKGLenWE{Hzn28}hfw)lg1SDc-V% zA7K$zbK21D+I7yFb6&!iikyN?2S^&)VPPo0A1Yd#-wtrNH_m1R2=IP?{v<8U^!mlAnRjs=0(N03(}SvQ5ry zBLAnf!Pa05t`7KRLN-G1mSe&0?)J;W?(WaKugyxjhktpyo7g;!wW%rT!x2!QjpIr| zvw>7YC!>WJa?2pDwU4IkY3#~WXAtV$p059EX(E0<>oYVF3^aY5f2H);6b}%@cp%y( zb6`j?N}<;iJ~9%>9(fKFCrEbfQk;5*IsiSCaZ~2S;r|EVN=X$+mW9^<*>f}ho!wtq z_Qj5wOiSadOyRT)GlVaXxmJ#PQN-*Xf94 z(brRTGLIHh;`rvyh7=tkRg1}fwtGEuDkfJ=rz5WHREMRD+Q@Q1)|It&!8Zv*=c*K- z(bR{H1cRe8S%{Zj0)Lz*Cpr@SNvEMHY?Y$ar})6?0dM)9VKw|k@}*E_iI~$`m3o%k zl@HExJNVk^b{VsH)ilIx`mboaEn5!|3fr#Ir;e0#_)0cc|7Yi$qrd+3udBzahB0fj zT;skO^$opqwz(_wTq6YVjx{!y7vOCtU|_xp1*%h2kZ(od&qxjqBtR8k=>|U1kl0K` zB}MI(Vb^ZV#u}7@2}a4^4;)X;8Ayr|qG6JgLJA|41cDd^@gCzeif3uC7+|#bSvI8P zJzh_oX#%kwatI|MCG^#U^ZH|2{*>MPQfBTVeYy?q44-d{i||ar;cAkz!=X)^N}Aa7 zLJU3Y?iw06QpR+}{<}Cwy#G%4&7*LZa15Lca%=TvQ~eQ!!d71f)&&^FLv}QkiI?WD z?jDzVbn^K-0oRg|B%vaY1OHFd3Fb+s(`(th);4_IA(ipw+8i&%>DEWk_Wd5YG@CDfTOT; z{%ch_%+J&y1~~Lm4)zh;eZui$X6x{&leV*Q{2N2M-5TP^5O4=LO+1D?d)niILPrSB zuEFxq#hfS}L$Dj1S2m$h9J@2|f)jh7wEA&O1ueGm)y_-&FZOJO@?NstHA=P%6@omw z$^nR0{v2yTW=iEDqn}1I9J1p4XA_&Xv{EGYtYIy0+0GTm5xpa9wW!k{e{O+8n$BvG)Mnq|GlnF>{WeF-9)=7S~_s}4E?OeoOm z^bCse)nc8sTO^ihWGYQK$ns_VYSafW;B>R9;#$U@7cSzadp^%{NgQ#Pkk4}_` z!fze2M!{EMk5Ciqf3iT65v$Up+9qwgJl5I4`wYp%2B=T8dxtcwMu|}fU}8Yhti7G$ zs(4r8VEQ1|Iu$-{58D2Iw)XV|81<5q zo*Lyu)b^dgHVUssCeJn z?phKV0a~sF2pned5D0Iu6=SFvqT-?$lhF@~tXUK$q`i%4fiiwLuFGgvR z;J-Om1WAu)ok%kD{lyqdwr+eC?z3HyHS9&`U=>X5euJP0kFj=j;1pFT`ePoM+Juo@10$ z5jD56!dINrmSB>UCI$ip1bI5i`{R{d#j-OG5L%cbW?gmI3z}f1(oi&kQI%-}xWydz z&E)Hn7%#qMv==Yv&rN*=#W+bL*y#{1hIIh05Xcs%3Q~LS;cOpjopd|u#H8gLz zCe*Zr_^wsXYUzk6GISRd3N*@vY6wJ_ILI-lO2d6>kLTA!h&Sb z38ZPF0C&YTY*}e3B|j0fCxm$J%d4zNl)rCjpqN=4yw8Wo28uq2rKEgz;DMmSLs4P@ zZ9#3OyC`<}MSdpTiBOfF5(sfOSfP{V&JV2sG=LbBZ-hZ_2j?W^rPrgQ9xr;P(Bd}x z2;v`#+XBIuIZP26_S;;~z3c-S0Gb0>>@q8NiIPX zOIO7S@kz}rHmKeLW%$n6(N2qp0i9tcS!XC2PR1Z;m`9`SJ(}6TY~2X#@i!@+SX+IZ zYCAdAdeQ@cXF}Pr$?Px1PSB=Mrx$=iTY(%vqMsN33FtID-mwkO)CRN0sB))6s3*(^+4XMCJED56eMT0%`?GGon^i|$ zquZLh?`pR^MXf7$2JKa=q1dhdB9?O-|60aJPkuK(n#T=#wqc2i)n)2}O>J{HIW?=6 z(COr8k&XO_0(ZjQHgKf1di96UCb3%!2{8g|_08lZNZSY2Ar*;1%7lX&i3x?UcUISg zbMbUcSQiH22}|@MVz)!nc`LzqdMdF_v^ zhkhY)9anG0sahn`M5I%FDd9*e?{z)NOF75EnGb&L&QwhMp^OR9uklyrsfu)OCN{^t0(=NF> z0n0MorY`|Y{khx}lY2WV+9}=NSut6}U2*aAhoF%-o=TEAqXzc-c=XnuMK`^@i*$2jRMvR@9X#qX(Vj^Zjht$%BL+CPwm#`7kl`M@LDw}eM z5gO+Tc0AI=atuVzE)ja4rYP?pTiDPtJPf;!Cj?;29Sv=7dK1T!GH z5X_V^g?%G=pDCr^=;EJs8fFDvs0LA(>#!Wym}>P0#dE)(c}`-U^>O~L;^_7T*t2+f_{5z99nw+$EELlM^M8p!20sNl+&_>^qztw-0p)N!HeUD- z&V8K85QI8 z4I?uMa>9i1(s)TTB#w0UZ7PCw==RF?T(8`#gS=w6-x#c3RXPeP90SAX*NB~)V{53& zM^R5>im`^OXZg46ewsQ-oh1RoE-Ku6?+K?!?An+5z#;{2MqOePL360t1Ppk59GRK zfY9Q{9Oze;pMy#zPR>mqco|w`N1f#|`Q(~ytIV;dj1Vwq6b{bhK@~DKC{zF(L(`j$ zNr4_~%h=8Hc5=~9E-^%bS^WTQA(65v*pR--i6dIc^Y4@M=0)?;mb6;zuI48XDyOx+{&13HYyci|qct}d^fgM$F^9D%kGw8cl69;Kwah`YwK^p{%FVTQ zva*giqcZ7WTxi@GWe^AJ9UK6a5{h>R1T~dqp4+b?a&O~oS^jTL3A7TxC0zItVu*7PBiBH9_m89d;66V+y1<^zi-HF8IZnjQLvD^sNZX-<9|G4{dSU>aI=jQ5+nB$_=+}023Q?gX z`CT0fq|8~;PlO# z3?|A#clgH**T*J{_P`XJYA2kAIqSE{(U1~cWd2x%DN zrZ?g^T|5_S?T2>_9W^F{9P&}7XgpG)`-W)>j}mNbN*2@Eha973LOTk5(*yAbWYjH7 zrl#Ps!Ir@TPyshZxuRf?mKhDVi?e3pZRALl){DgQM#xfPe0r47R|aA;{F=?p2A3d_ z7$Hb$iBdElOu4qYL_D*6)LVhmZO&^tOi%NEjaRfcLuwO1F?Mu&P25@Mm3|wi*fCI;D@@8XFZFRWYc5#lwgLFn4)_vF} ztkKOPA^@&uVTCm;qPJ|B`yO;Dx>$c0KVa8wFe%&FgZN;zRU*ETQ#kv#~1{ zlV}!gk3d2A*D^8TQgZpUNffT+iRfB4Y&O7 zvKQ42Q#(fblsmU?+9xraEAoz3%YPjiM2buZJwYt&@C(LFcyjt65tua2r5 zm}bn6*$FT1ny-;bD};bSVuSR;dAN{!l$JZ&gD@@^6G} zjo!Mg%Cxt8y%Ie_kvfr#wXvAY=+p<;G8O6%P0M(*CdeeZ3v0i{5a);mzO`!5(vvV0t z%_Y-@(I}%KtC;CArw*<1l_MS)M#0d8XJZkUdJ_@d4a1n|X+t|)jKD^QI{Z;(x+Y?* zvX-_rzZhWR9=5`0(_~P=kIuT(A%xe4{bYFA1Ee5|i`84YK~NVM2#E~q6n_>7TArb@ zwA87(+hW^WQuuo4?FxlI2p|l;z?w=Y|AI?UilQl%Re9@{nBWN$qIPQNdxLs$%EH=q zxx%dmm0Z(lva;2qQowToT|x8*K0%djGfNp^`1hKS>V05kSX)NG5dS;4+&RE3AD1z` znWNt9dbX9ph?fHv&@`THnOY~rcu{d3-ffOro0k=|RK$#`5 z%jJ>sQyflzvZy2P1wscBok2V*cbn*3>z>K-13edQI_z8*)#Q_K>h9H@clP3d)yqC& zfJ(g&* z(>o`M2a*7RM7X&Jyj^#-_*tlDI*~aw`~ePd0y8d^rSgQ_=%^Ryy}*}j#H8Fe-vG3} zkxR>nk+@zNAh<6Y>z`(nJ}nPzaxw}64erxu&`T~I#Pm>fwbILJBINw6^`OMj7k1p{M`-zy6K&4$-u-Pey!VNIVzY`5h(8HEt$dU$

_{TrrBsT)L{trvJc~; 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 literal 0 HcmV?d00001 diff --git a/tests/testplugin2.tar.gz.sig b/tests/testplugin2.tar.gz.sig new file mode 100644 index 0000000000000000000000000000000000000000..f530bff762618079b9047aa213ab6f301c3eeb03 GIT binary patch literal 438 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 H0N4Zo4nuaX diff --git a/tests/testpluginv2.tar.gz.sig b/tests/testpluginv2.tar.gz.sig deleted file mode 100644 index edfb7d8496f4007835ee40f39b33fa0da45f3044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOe0kZ@E0SEvc79j-l`p!k*-efF`)~M!8d}U(6lFT0k0$sar{QwFH5KMe! zV!@KkA6{z<{xu$T#P_~Zgp_OV)9Z}u@W!5l-Ek`3FnreM@RV4)We2p*^y5M(Rq|4+ zNAOjEyPo?U`#v9paD=n~nEBdto9qY2zWzRap3D zg@by~C{8Qn8x>w9!FByR5Juj_Xe)7F!{oSm1$B#|l^$I$NH4nO{Zxjme(*@2QNwu= z4@N)nMU%M{uiu^Iba&Ra87cR_xut5sMg(CTKP8qFElmXrl0Nx>?vOG@yGKbN7zh`s zwHx*W#+mJxp*NeQjcfxr4$UTVs}|jNepf$@S`xUnPHL%}zAd;@b7^ip1ar4x!p~7Y zET{IOAVWs1+PZm3U}%GhJuRruz<_@TPnYWKI$K`V$>R67W*sKUcAZR=kDz>KD*_T% gf%{CMHUX-`>Nl#0QVpE2=sYi%uap=!^Veo{=T") + svgRegex = regexp.MustCompile(`(?i)^\s*(?:<\?xml[^>]*>\s*)?(?:]*>\s*)?]*>[^*]*<\/svg>\s*$`) +) + +// isBinary checks if the given buffer is a binary file. +func isBinary(buf []byte) bool { + if len(buf) < 24 { + return false + } + for i := 0; i < 24; i++ { + charCode, _ := utf8.DecodeRuneInString(string(buf[i])) + if charCode == 65533 || charCode <= 8 { + return true + } + } + return false +} + +// Is returns true if the given buffer is a valid SVG image. +func Is(buf []byte) bool { + return !isBinary(buf) && svgRegex.Match(htmlCommentRegex.ReplaceAll(buf, []byte{})) +} + +// IsSVG returns true if the given buffer is a valid SVG image. +// Alias to: Is() +func IsSVG(buf []byte) bool { + return Is(buf) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 7a39eb1b37..bbb50ba690 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -52,6 +52,8 @@ github.com/gorilla/schema github.com/gorilla/websocket # github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 github.com/gregjones/httpcache +# github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c +github.com/h2non/go-is-svg # github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84 github.com/hako/durafmt # github.com/hashicorp/errwrap v1.0.0