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  }