mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-15 23:47:33 +08:00
support periodically cleaning up expired tokens
This commit is contained in:
@@ -23,6 +23,16 @@ func (s *ServiceUsingDB) TokenDB(uid int64) *datastore.Database {
|
||||
return s.container.TokenStore.Choose(uid)
|
||||
}
|
||||
|
||||
// TokenDBByIndex returns the datastore by index
|
||||
func (s *ServiceUsingDB) TokenDBByIndex(index int) *datastore.Database {
|
||||
return s.container.TokenStore.Get(index)
|
||||
}
|
||||
|
||||
// TokenDBCount returns the count of datastores which contains user token
|
||||
func (s *ServiceUsingDB) TokenDBCount() int {
|
||||
return s.container.TokenStore.Count()
|
||||
}
|
||||
|
||||
// UserDataDB returns the datastore which contains user data
|
||||
func (s *ServiceUsingDB) UserDataDB(uid int64) *datastore.Database {
|
||||
return s.container.UserDataStore.Choose(uid)
|
||||
|
||||
@@ -207,6 +207,32 @@ func (s *TokenService) DeleteTokensByType(c *core.Context, uid int64, tokenType
|
||||
})
|
||||
}
|
||||
|
||||
// DeleteAllExpiredTokens deletes all expired tokens
|
||||
func (s *TokenService) DeleteAllExpiredTokens(c *core.Context) error {
|
||||
var errors []error
|
||||
totalCount := int64(0)
|
||||
|
||||
for i := 0; i < s.TokenDBCount(); i++ {
|
||||
err := s.TokenDBByIndex(i).DoTransaction(c, func(sess *xorm.Session) error {
|
||||
count, err := sess.Where("expired_unix_time<=?", time.Now().Unix()).Delete(&models.TokenRecord{})
|
||||
totalCount += count
|
||||
return err
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
errors = append(errors, err)
|
||||
}
|
||||
}
|
||||
|
||||
if totalCount > 0 {
|
||||
log.Infof("[tokens.DeleteAllExpiredTokens] %d expired tokens have been deleted", totalCount)
|
||||
} else if len(errors) == 0 {
|
||||
log.Infof("[tokens.DeleteAllExpiredTokens] no expired tokens have been deleted")
|
||||
}
|
||||
|
||||
return errs.NewMultiErrorOrNil(errors...)
|
||||
}
|
||||
|
||||
// ExistsValidTokenByType returns whether the given token type exists
|
||||
func (s *TokenService) ExistsValidTokenByType(c *core.Context, uid int64, tokenType core.TokenType) (bool, error) {
|
||||
if uid <= 0 {
|
||||
|
||||
Reference in New Issue
Block a user