Files
mostlymatter/app/plugin_signature_test.go
Ali Farooq a6e992ae74 MM-16368 - Plugin Signing (#13017)
* [MM-18757] POST handler for `/plugins/marketplace` (#12372)

* Implement installMarketplacePlugin

* Add InstallMarketplacePlugin endpoint

* Fix go.mod

* merge with master

* Fix go.mod

* Fix plugin tests

* Move get plugin to marketplace client

* Fix stylistic concerns

* Add trailing newline to the go.mod

* [MM-16586] Add plugin signature settings (#12390)

* MM-17149 - Extend config.json for marketplace settings (#11933)

* MM-17149 - Extend config.json for marketplace settings

* Renamed MarketplaceUrl, tracking default marketplace url

* Added EnableMarketplace to the client config

* Revert "Added EnableMarketplace to the client config"

This reverts commit 0f982c4c661c2cd9bb96264e9a01a2363c40d9c5.

* MM-17149 - Added EnableMarketplace to the client config (#11958)

* Added EnableMarketplace to the client config

* Moved EnableMarketplace setting out of limited client configuration

* Add public key settings to the config.json

* Rename PublicKeys to SignaturePublicKeyFiles

* Change filepath.Split to Base

* Remove additional prints

* Force extention of a public key file

* Remove config validation

* Remove error on delete

* Remove config cloning

* Add error messages

* Add plugin public key tests

* Rename extension to PluginSignaturePublicKeyFileExtention

* Remove EnforceVerification

* Change []*PublicKeyDescription to []string

* Change .asc extension to .plugin.asc

* Change ordering of public methods

* Change plugin key commands

* Update examples in the plugin key commands

* Remove forcing extention

* Add verify signature in settings

* Fix tabbing

* Fix naming

* Remove unused text

* Remove unused text

* Update command examples

* Fix unit tests

* Change errors.New to errors.Wrap

* Fix verbose flag

* Change .asc to .gpg

* Fix }

* Change AddPublicKey signature

* Change public.key extension

* Add plugin public key command tests

* Update en.json

* Bootstrap the public keys

* Update en.json

* Fix en.json

* Fix en.json

* Bootstrap hard-coded public key

* Remove unused texts in en.json

* Change file to name

* Add license header

* Update development public key

* Remove writeFile method

* Remove .plugin.asc extension

* Rename publiKey to mattermostPublicKey

* Remove init_public_keys string

* GolangCI

* Closing file handlers

* Fixed test that was installing nps plugin

* [MM-19798] Implement plugin signature verification (#12768)

* MM-17149 - Extend config.json for marketplace settings (#11933)

* MM-17149 - Extend config.json for marketplace settings

* Renamed MarketplaceUrl, tracking default marketplace url

* Added EnableMarketplace to the client config

* Revert "Added EnableMarketplace to the client config"

This reverts commit 0f982c4c661c2cd9bb96264e9a01a2363c40d9c5.

* MM-17149 - Added EnableMarketplace to the client config (#11958)

* Added EnableMarketplace to the client config

* Moved EnableMarketplace setting out of limited client configuration

* Add public key settings to the config.json

* Rename PublicKeys to SignaturePublicKeyFiles

* Change filepath.Split to Base

* Remove additional prints

* Force extention of a public key file

* Remove config validation

* Remove error on delete

* Remove config cloning

* Add error messages

* Add plugin public key tests

* Rename extension to PluginSignaturePublicKeyFileExtention

* Remove EnforceVerification

* Change []*PublicKeyDescription to []string

* Change .asc extension to .plugin.asc

* Change ordering of public methods

* Change plugin key commands

* Update examples in the plugin key commands

* Remove forcing extention

* Add verify signature in settings

* Fix tabbing

* Fix naming

* Remove unused text

* Remove unused text

* Update command examples

* Fix unit tests

* Change errors.New to errors.Wrap

* Fix verbose flag

* Change .asc to .gpg

* Fix }

* Change AddPublicKey signature

* Change public.key extension

* Add plugin public key command tests

* Update en.json

* Bootstrap the public keys

* Update en.json

* Fix en.json

* Fix en.json

* Bootstrap hard-coded public key

* Remove unused texts in en.json

* Change file to name

* Add license header

* Implement plugin signature verification

* Remove benburker openpgp

* Update en.json

* Update development public key

* Add support of multiple signatures in filestore

* Update en.json

* Run go mod vendor

* Fix style

* Remove writeFile method

* Remove .plugin.asc extension

* Rename publiKey to mattermostPublicKey

* Verify plugin with mattermost public key

* Remove init_public_keys string

* Add InstallPluginWithSignature method and  Refactor

* Add signature verification on claster notification

* Remove armored signature headers

* Add error strings

* Fix en.json

* Change signatureStorePath

* Implement minor fixes

* Refactor plugin install methods

* Add installPlugin method to uploadPlugin

* Update en.json

* Refactor installPlugin

* Limit number of signatures

* Close signatures

* Fix helper function

* Fix fromReadCloseSeekerToReadSeeker

* Cleaned up ReadCloseSeeker for signatures

* Remove signature truncation on FS

* GolangCI

* Add tests for armored signatures and plugin uploads

* Fix nil slice issue

* Fix TestPluginSync

* Fixed tests

* Return io.ReadSeeker from downloadFromUrl

* Add log for the found plugins in the file store

* Remove logging plugin detection info

* [MM-20134] Consume and store single-signature for each plugin (#13081)

* Consume and store single-signature for each plugin

* Fix en.json

* Remove saveSignature method

* Remove public key hash

* PR Feedback

* refactored config

* PR feedback
2019-11-18 19:02:41 -05:00

103 строки
3.9 KiB
Go

// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package app
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/mattermost/mattermost-server/utils/fileutils"
"github.com/stretchr/testify/require"
)
func TestPluginPublicKeys(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
path, _ := fileutils.FindDir("tests")
publicKeyFilename := "test-public-key.plugin.gpg"
publicKey, err := ioutil.ReadFile(filepath.Join(path, publicKeyFilename))
require.Nil(t, err)
fileReader, err := os.Open(filepath.Join(path, publicKeyFilename))
require.Nil(t, err)
defer fileReader.Close()
th.App.AddPublicKey(publicKeyFilename, fileReader)
file, err := th.App.GetPublicKey(publicKeyFilename)
require.Nil(t, err)
require.Equal(t, publicKey, file)
_, err = th.App.GetPublicKey("wrong file name")
require.NotNil(t, err)
_, err = th.App.GetPublicKey("wrong-file-name.plugin.gpg")
require.NotNil(t, err)
err = th.App.DeletePublicKey("wrong file name")
require.Nil(t, err)
err = th.App.DeletePublicKey("wrong-file-name.plugin.gpg")
require.Nil(t, err)
err = th.App.DeletePublicKey(publicKeyFilename)
require.Nil(t, err)
_, err = th.App.GetPublicKey(publicKeyFilename)
require.NotNil(t, err)
}
func TestVerifySignature(t *testing.T) {
path, _ := fileutils.FindDir("tests")
pluginFilename := "testplugin.tar.gz"
signatureFilename := "testplugin.tar.gz.sig"
armoredSignatureFilename := "testplugin.tar.gz.asc"
publicKeyFilename := "development-public-key.gpg"
armoredPublicKeyFilename := "development-public-key.asc"
t.Run("verify armored signature and armored public key", func(t *testing.T) {
publicKeyFileReader, err := os.Open(filepath.Join(path, armoredPublicKeyFilename))
require.Nil(t, err)
defer publicKeyFileReader.Close()
pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename))
require.Nil(t, err)
defer pluginFileReader.Close()
signatureFileReader, err := os.Open(filepath.Join(path, armoredSignatureFilename))
require.Nil(t, err)
defer signatureFileReader.Close()
require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader))
})
t.Run("verify non armored signature and armored public key", func(t *testing.T) {
publicKeyFileReader, err := os.Open(filepath.Join(path, armoredPublicKeyFilename))
require.Nil(t, err)
defer publicKeyFileReader.Close()
pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename))
require.Nil(t, err)
defer pluginFileReader.Close()
signatureFileReader, err := os.Open(filepath.Join(path, signatureFilename))
require.Nil(t, err)
defer signatureFileReader.Close()
require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader))
})
t.Run("verify armored signature and non armored public key", func(t *testing.T) {
publicKeyFileReader, err := os.Open(filepath.Join(path, publicKeyFilename))
require.Nil(t, err)
defer publicKeyFileReader.Close()
pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename))
require.Nil(t, err)
defer pluginFileReader.Close()
armoredSignatureFileReader, err := os.Open(filepath.Join(path, armoredSignatureFilename))
require.Nil(t, err)
defer armoredSignatureFileReader.Close()
require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, armoredSignatureFileReader))
})
t.Run("verify non armored signature and non armored public key", func(t *testing.T) {
publicKeyFileReader, err := os.Open(filepath.Join(path, publicKeyFilename))
require.Nil(t, err)
defer publicKeyFileReader.Close()
pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename))
require.Nil(t, err)
defer pluginFileReader.Close()
signatureFileReader, err := os.Open(filepath.Join(path, signatureFilename))
require.Nil(t, err)
defer signatureFileReader.Close()
require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader))
})
}