github.com/adacta-ru/mattermost-server/v6@v6.0.0/app/plugin_signature_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package app 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/adacta-ru/mattermost-server/v6/model" 13 "github.com/adacta-ru/mattermost-server/v6/store/storetest/mocks" 14 "github.com/adacta-ru/mattermost-server/v6/utils/fileutils" 15 "github.com/stretchr/testify/mock" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func TestPluginPublicKeys(t *testing.T) { 20 th := SetupWithStoreMock(t) 21 defer th.TearDown() 22 23 mockStore := th.App.Srv().Store.(*mocks.Store) 24 mockUserStore := mocks.UserStore{} 25 mockUserStore.On("Count", mock.Anything).Return(int64(10), nil) 26 mockPostStore := mocks.PostStore{} 27 mockPostStore.On("GetMaxPostSize").Return(65535, nil) 28 mockSystemStore := mocks.SystemStore{} 29 mockSystemStore.On("GetByName", "UpgradedFromTE").Return(&model.System{Name: "UpgradedFromTE", Value: "false"}, nil) 30 mockSystemStore.On("GetByName", "InstallationDate").Return(&model.System{Name: "InstallationDate", Value: "10"}, nil) 31 mockSystemStore.On("GetByName", "FirstServerRunTimestamp").Return(&model.System{Name: "FirstServerRunTimestamp", Value: "10"}, nil) 32 33 mockStore.On("User").Return(&mockUserStore) 34 mockStore.On("Post").Return(&mockPostStore) 35 mockStore.On("System").Return(&mockSystemStore) 36 37 path, _ := fileutils.FindDir("tests") 38 publicKeyFilename := "test-public-key.plugin.gpg" 39 publicKey, err := ioutil.ReadFile(filepath.Join(path, publicKeyFilename)) 40 require.Nil(t, err) 41 fileReader, err := os.Open(filepath.Join(path, publicKeyFilename)) 42 require.Nil(t, err) 43 defer fileReader.Close() 44 th.App.AddPublicKey(publicKeyFilename, fileReader) 45 file, err := th.App.GetPublicKey(publicKeyFilename) 46 require.Nil(t, err) 47 require.Equal(t, publicKey, file) 48 _, err = th.App.GetPublicKey("wrong file name") 49 require.NotNil(t, err) 50 _, err = th.App.GetPublicKey("wrong-file-name.plugin.gpg") 51 require.NotNil(t, err) 52 53 err = th.App.DeletePublicKey("wrong file name") 54 require.Nil(t, err) 55 err = th.App.DeletePublicKey("wrong-file-name.plugin.gpg") 56 require.Nil(t, err) 57 58 err = th.App.DeletePublicKey(publicKeyFilename) 59 require.Nil(t, err) 60 _, err = th.App.GetPublicKey(publicKeyFilename) 61 require.NotNil(t, err) 62 } 63 64 func TestVerifySignature(t *testing.T) { 65 path, _ := fileutils.FindDir("tests") 66 pluginFilename := "testplugin.tar.gz" 67 signatureFilename := "testplugin.tar.gz.sig" 68 armoredSignatureFilename := "testplugin.tar.gz.asc" 69 publicKeyFilename := "development-public-key.gpg" 70 armoredPublicKeyFilename := "development-public-key.asc" 71 t.Run("verify armored signature and armored public key", func(t *testing.T) { 72 publicKeyFileReader, err := os.Open(filepath.Join(path, armoredPublicKeyFilename)) 73 require.Nil(t, err) 74 defer publicKeyFileReader.Close() 75 pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename)) 76 require.Nil(t, err) 77 defer pluginFileReader.Close() 78 signatureFileReader, err := os.Open(filepath.Join(path, armoredSignatureFilename)) 79 require.Nil(t, err) 80 defer signatureFileReader.Close() 81 require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader)) 82 }) 83 t.Run("verify non armored signature and armored public key", func(t *testing.T) { 84 publicKeyFileReader, err := os.Open(filepath.Join(path, armoredPublicKeyFilename)) 85 require.Nil(t, err) 86 defer publicKeyFileReader.Close() 87 pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename)) 88 require.Nil(t, err) 89 defer pluginFileReader.Close() 90 signatureFileReader, err := os.Open(filepath.Join(path, signatureFilename)) 91 require.Nil(t, err) 92 defer signatureFileReader.Close() 93 require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader)) 94 }) 95 t.Run("verify armored signature and non armored public key", func(t *testing.T) { 96 publicKeyFileReader, err := os.Open(filepath.Join(path, publicKeyFilename)) 97 require.Nil(t, err) 98 defer publicKeyFileReader.Close() 99 pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename)) 100 require.Nil(t, err) 101 defer pluginFileReader.Close() 102 armoredSignatureFileReader, err := os.Open(filepath.Join(path, armoredSignatureFilename)) 103 require.Nil(t, err) 104 defer armoredSignatureFileReader.Close() 105 require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, armoredSignatureFileReader)) 106 }) 107 t.Run("verify non armored signature and non armored public key", func(t *testing.T) { 108 publicKeyFileReader, err := os.Open(filepath.Join(path, publicKeyFilename)) 109 require.Nil(t, err) 110 defer publicKeyFileReader.Close() 111 pluginFileReader, err := os.Open(filepath.Join(path, pluginFilename)) 112 require.Nil(t, err) 113 defer pluginFileReader.Close() 114 signatureFileReader, err := os.Open(filepath.Join(path, signatureFilename)) 115 require.Nil(t, err) 116 defer signatureFileReader.Close() 117 require.Nil(t, verifySignature(publicKeyFileReader, pluginFileReader, signatureFileReader)) 118 }) 119 }