diff --git a/api4/plugin_test.go b/api4/plugin_test.go index 90765d77c4..eb30a7c744 100644 --- a/api4/plugin_test.go +++ b/api4/plugin_test.go @@ -930,6 +930,11 @@ func TestInstallMarketplacePlugin(t *testing.T) { *cfg.PluginSettings.MarketplaceUrl = testServer.URL }) + 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) + pRequest := &model.InstallMarketplacePluginRequest{Id: "testplugin_v2", Version: "1.2.3"} manifest, resp := th.SystemAdminClient.InstallMarketplacePlugin(pRequest) CheckNoError(t, resp) @@ -948,6 +953,9 @@ func TestInstallMarketplacePlugin(t *testing.T) { exists, err := th.App.FileExists(filePath) require.Nil(t, err) require.False(t, exists) + + appErr = th.App.DeletePublicKey("pub_key") + require.Nil(t, appErr) }) } diff --git a/app/plugin_public_keys.go b/app/plugin_public_keys.go index 218473b66a..0756a13836 100644 --- a/app/plugin_public_keys.go +++ b/app/plugin_public_keys.go @@ -5,42 +5,53 @@ package app var mattermostPluginPublicKey []byte = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK----- -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 -=qIjw +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 +d+eYY64= +=UePK -----END PGP PUBLIC KEY BLOCK-----`) diff --git a/app/plugin_test.go b/app/plugin_test.go index 60ec5b5948..5333063b19 100644 --- a/app/plugin_test.go +++ b/app/plugin_test.go @@ -562,6 +562,11 @@ func TestPluginSync(t *testing.T) { require.Len(t, pluginStatus, 0) // 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) + signatureFileReader, err = os.Open(filepath.Join(path, "testplugin.tar.gz.sig")) require.NoError(t, err) defer signatureFileReader.Close() @@ -576,6 +581,12 @@ func TestPluginSync(t *testing.T) { 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) }) } } diff --git a/tests/development-private-key.asc b/tests/development-private-key.asc new file mode 100644 index 0000000000..aa7d1fd887 --- /dev/null +++ b/tests/development-private-key.asc @@ -0,0 +1,82 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +9ZvfTj7FR/OcwlB77uGrGoi3EQ== +=F0gN +-----END PGP PRIVATE KEY BLOCK-----