[GH-18965] - Pass expire time from outside Cleanup method (#19008)
Pass expire time from outside Cleanup method Fixes #18965
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c198ef6e16
Коммит
0dbc74f6d5
@@ -1491,7 +1491,11 @@ func doSecurity(s *Server) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func doTokenCleanup(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) {
|
func doCommandWebhookCleanup(s *Server) {
|
||||||
|
|||||||
@@ -9465,7 +9465,7 @@ func (s *OpenTracingLayerThreadStore) UpdateUnreadsByChannel(userId string, chan
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpenTracingLayerTokenStore) Cleanup() {
|
func (s *OpenTracingLayerTokenStore) Cleanup(expiryTime int64) {
|
||||||
origCtx := s.Root.Store.Context()
|
origCtx := s.Root.Store.Context()
|
||||||
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TokenStore.Cleanup")
|
span, newCtx := tracing.StartSpanWithParentByContext(s.Root.Store.Context(), "TokenStore.Cleanup")
|
||||||
s.Root.Store.SetContext(newCtx)
|
s.Root.Store.SetContext(newCtx)
|
||||||
@@ -9474,7 +9474,7 @@ func (s *OpenTracingLayerTokenStore) Cleanup() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
defer span.Finish()
|
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
|
return &token, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SqlTokenStore) Cleanup() {
|
func (s SqlTokenStore) Cleanup(expiryTime int64) {
|
||||||
mlog.Debug("Cleaning up token store.")
|
if _, err := s.GetMasterX().Exec("DELETE FROM Tokens WHERE CreateAt < ?", expiryTime); err != nil {
|
||||||
deltime := model.GetMillis() - model.MaxTokenExipryTime
|
|
||||||
if _, err := s.GetMasterX().Exec("DELETE FROM Tokens WHERE CreateAt < ?", deltime); err != nil {
|
|
||||||
mlog.Error("Unable to cleanup token store.")
|
mlog.Error("Unable to cleanup token store.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
store/sqlstore/tokens_store_test.go
Обычный файл
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
|
Save(recovery *model.Token) error
|
||||||
Delete(token string) error
|
Delete(token string) error
|
||||||
GetByToken(token string) (*model.Token, error)
|
GetByToken(token string) (*model.Token, error)
|
||||||
Cleanup()
|
Cleanup(expiryTime int64)
|
||||||
GetAllTokensByType(tokenType string) ([]*model.Token, error)
|
GetAllTokensByType(tokenType string) ([]*model.Token, error)
|
||||||
RemoveAllTokensByType(tokenType string) error
|
RemoveAllTokensByType(tokenType string) error
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ type TokenStore struct {
|
|||||||
mock.Mock
|
mock.Mock
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup provides a mock function with given fields:
|
// Cleanup provides a mock function with given fields: expiryTime
|
||||||
func (_m *TokenStore) Cleanup() {
|
func (_m *TokenStore) Cleanup(expiryTime int64) {
|
||||||
_m.Called()
|
_m.Called(expiryTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete provides a mock function with given fields: token
|
// Delete provides a mock function with given fields: token
|
||||||
|
|||||||
42
store/storetest/tokens_store.go
Обычный файл
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *TimerLayerTokenStore) Cleanup() {
|
func (s *TimerLayerTokenStore) Cleanup(expiryTime int64) {
|
||||||
start := timemodule.Now()
|
start := timemodule.Now()
|
||||||
|
|
||||||
s.TokenStore.Cleanup()
|
s.TokenStore.Cleanup(expiryTime)
|
||||||
|
|
||||||
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
elapsed := float64(timemodule.Since(start)) / float64(timemodule.Second)
|
||||||
if s.Root.Metrics != nil {
|
if s.Root.Metrics != nil {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user