[GH-18965] - Pass expire time from outside Cleanup method (#19008)

Pass expire time from outside Cleanup method

Fixes #18965
Этот коммит содержится в:
Kirill Krotov
2021-12-22 12:27:30 +03:00
коммит произвёл GitHub
родитель c198ef6e16
Коммит 0dbc74f6d5
9 изменённых файлов: 73 добавлений и 15 удалений

Просмотреть файл

@@ -1491,7 +1491,11 @@ func doSecurity(s *Server) {
}
func doTokenCleanup(s *Server) {
s.Store.Token().Cleanup()
expiry := model.GetMillis() - model.MaxTokenExipryTime
mlog.Debug("Cleaning up token store.")
s.Store.Token().Cleanup(expiry)
}
func doCommandWebhookCleanup(s *Server) {

Просмотреть файл

@@ -9465,7 +9465,7 @@ func (s *OpenTracingLayerThreadStore) UpdateUnreadsByChannel(userId string, chan
return err
}
func (s *OpenTracingLayerTokenStore) Cleanup() {
func (s *OpenTracingLayerTokenStore) Cleanup(expiryTime int64) {
origCtx := s.Root.Store.Context()
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TokenStore.Cleanup")
s.Root.Store.SetContext(newCtx)
@@ -9474,7 +9474,7 @@ func (s *OpenTracingLayerTokenStore) Cleanup() {
}()
defer span.Finish()
s.TokenStore.Cleanup()
s.TokenStore.Cleanup(expiryTime)
}

Просмотреть файл

@@ -10813,9 +10813,9 @@ func (s *RetryLayerThreadStore) UpdateUnreadsByChannel(userId string, changedThr
}
func (s *RetryLayerTokenStore) Cleanup() {
func (s *RetryLayerTokenStore) Cleanup(expiryTime int64) {
s.TokenStore.Cleanup()
s.TokenStore.Cleanup(expiryTime)
}

Просмотреть файл

@@ -74,10 +74,8 @@ func (s SqlTokenStore) GetByToken(tokenString string) (*model.Token, error) {
return &token, nil
}
func (s SqlTokenStore) Cleanup() {
mlog.Debug("Cleaning up token store.")
deltime := model.GetMillis() - model.MaxTokenExipryTime
if _, err := s.GetMasterX().Exec("DELETE FROM Tokens WHERE CreateAt < ?", deltime); err != nil {
func (s SqlTokenStore) Cleanup(expiryTime int64) {
if _, err := s.GetMasterX().Exec("DELETE FROM Tokens WHERE CreateAt < ?", expiryTime); err != nil {
mlog.Error("Unable to cleanup token store.")
}
}

14
store/sqlstore/tokens_store_test.go Обычный файл
Просмотреть файл

@@ -0,0 +1,14 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package sqlstore
import (
"testing"
"github.com/mattermost/mattermost-server/v6/store/storetest"
)
func TestTokensStore(t *testing.T) {
StoreTest(t, storetest.TestTokensStore)
}

Просмотреть файл

@@ -610,7 +610,7 @@ type TokenStore interface {
Save(recovery *model.Token) error
Delete(token string) error
GetByToken(token string) (*model.Token, error)
Cleanup()
Cleanup(expiryTime int64)
GetAllTokensByType(tokenType string) ([]*model.Token, error)
RemoveAllTokensByType(tokenType string) error
}

Просмотреть файл

@@ -14,9 +14,9 @@ type TokenStore struct {
mock.Mock
}
// Cleanup provides a mock function with given fields:
func (_m *TokenStore) Cleanup() {
_m.Called()
// Cleanup provides a mock function with given fields: expiryTime
func (_m *TokenStore) Cleanup(expiryTime int64) {
_m.Called(expiryTime)
}
// Delete provides a mock function with given fields: token

42
store/storetest/tokens_store.go Обычный файл
Просмотреть файл

@@ -0,0 +1,42 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package storetest
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/mattermost/mattermost-server/v6/model"
"github.com/mattermost/mattermost-server/v6/store"
)
func TestTokensStore(t *testing.T, ss store.Store) {
t.Run("TokensCleanup", func(t *testing.T) { testTokensCleanup(t, ss) })
}
func testTokensCleanup(t *testing.T, ss store.Store) {
now := model.GetMillis()
for i := 0; i < 10; i++ {
err := ss.Token().Save(&model.Token{
Token: model.NewRandomString(model.TokenSize),
CreateAt: now - int64(i),
Type: model.TokenTypeOAuth,
Extra: "",
})
require.NoError(t, err)
}
tokens, err := ss.Token().GetAllTokensByType(model.TokenTypeOAuth)
require.NoError(t, err)
assert.Len(t, tokens, 10)
ss.Token().Cleanup(now + int64(1))
tokens, err = ss.Token().GetAllTokensByType(model.TokenTypeOAuth)
require.NoError(t, err)
assert.Len(t, tokens, 0)
}

Просмотреть файл

@@ -8519,10 +8519,10 @@ func (s *TimerLayerThreadStore) UpdateUnreadsByChannel(userId string, changedThr
return err
}
func (s *TimerLayerTokenStore) Cleanup() {
func (s *TimerLayerTokenStore) Cleanup(expiryTime int64) {
start := timemodule.Now()
s.TokenStore.Cleanup()
s.TokenStore.Cleanup(expiryTime)
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
if s.Root.Metrics != nil {