github.com/rr250/mattermost-server@v5.11.1+incompatible/services/mfa/mfa_test.go (about)

     1  // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package mfa
     5  
     6  import (
     7  	"net/url"
     8  	"testing"
     9  
    10  	"github.com/mattermost/mattermost-server/model"
    11  	"github.com/mattermost/mattermost-server/plugin/plugintest/mock"
    12  	"github.com/mattermost/mattermost-server/store"
    13  	"github.com/mattermost/mattermost-server/store/storetest/mocks"
    14  	"github.com/mattermost/mattermost-server/utils/testutils"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  	"github.com/stretchr/testify/require"
    18  )
    19  
    20  func TestGenerateSecret(t *testing.T) {
    21  	user := &model.User{Id: model.NewId(), Roles: "system_user"}
    22  
    23  	config := model.Config{}
    24  	config.SetDefaults()
    25  	config.ServiceSettings.EnableMultifactorAuthentication = model.NewBool(true)
    26  	configService := testutils.StaticConfigService{Cfg: &config}
    27  	storeMock := mocks.Store{}
    28  	userStoreMock := mocks.UserStore{}
    29  	userStoreMock.On("UpdateMfaSecret", user.Id, mock.AnythingOfType("string")).Return(func(userId string, secret string) store.StoreChannel {
    30  		return store.Do(func(result *store.StoreResult) {
    31  			result.Data = nil
    32  			result.Err = nil
    33  		})
    34  	})
    35  	storeMock.On("User").Return(&userStoreMock)
    36  
    37  	mfa := Mfa{configService, &storeMock}
    38  
    39  	secret, img, err := mfa.GenerateSecret(user)
    40  	require.Nil(t, err)
    41  
    42  	assert.Len(t, secret, 32)
    43  
    44  	if len(img) == 0 {
    45  		t.Fatal("no image set")
    46  	}
    47  
    48  	config.ServiceSettings.EnableMultifactorAuthentication = model.NewBool(false)
    49  
    50  	_, _, err = mfa.GenerateSecret(user)
    51  	require.NotNil(t, err)
    52  }
    53  
    54  func TestGetIssuerFromUrl(t *testing.T) {
    55  	cases := []struct {
    56  		Input    string
    57  		Expected string
    58  	}{
    59  		{"http://somewebsite.com", url.QueryEscape("somewebsite.com")},
    60  		{"https://somewebsite.com", url.QueryEscape("somewebsite.com")},
    61  		{"https://some.website.com", url.QueryEscape("some.website.com")},
    62  		{" https://www.somewebsite.com", url.QueryEscape("somewebsite.com")},
    63  		{"http://somewebsite.com/chat", url.QueryEscape("somewebsite.com/chat")},
    64  		{"somewebsite.com ", url.QueryEscape("somewebsite.com")},
    65  		{"http://localhost:8065", url.QueryEscape("localhost:8065")},
    66  		{"", "Mattermost"},
    67  		{"  ", "Mattermost"},
    68  	}
    69  
    70  	for _, c := range cases {
    71  		assert.Equal(t, c.Expected, getIssuerFromUrl(c.Input))
    72  	}
    73  }