Files
grafana/pkg/services/auth/token_cleanup.go
T

69 lines
2.1 KiB
Go
Raw Normal View History

2019-02-06 17:02:57 +01:00
package auth
2019-01-21 17:05:42 +01:00
import (
"context"
"time"
"github.com/grafana/grafana/pkg/services/sqlstore"
2019-01-21 17:05:42 +01:00
)
func (s *UserAuthTokenService) Run(ctx context.Context) error {
2019-02-07 10:51:35 +01:00
ticker := time.NewTicker(time.Hour)
maxInactiveLifetime := s.Cfg.LoginMaxInactiveLifetime
maxLifetime := s.Cfg.LoginMaxLifetime
2019-01-21 17:05:42 +01:00
2021-10-04 15:46:09 +02:00
err := s.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func(context.Context) {
if _, err := s.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
s.log.Error("An error occurred while deleting expired tokens", "err", err)
2019-10-22 14:08:18 +02:00
}
})
if err != nil {
s.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
}
2019-01-21 17:05:42 +01:00
for {
select {
case <-ticker.C:
2021-10-04 15:46:09 +02:00
err = s.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func(context.Context) {
if _, err := s.deleteExpiredTokens(ctx, maxInactiveLifetime, maxLifetime); err != nil {
s.log.Error("An error occurred while deleting expired tokens", "err", err)
2019-10-22 14:08:18 +02:00
}
2019-01-21 17:05:42 +01:00
})
if err != nil {
s.log.Error("failed to lock and execute cleanup of expired auth token", "error", err)
}
2019-01-21 17:05:42 +01:00
case <-ctx.Done():
return ctx.Err()
}
}
}
func (s *UserAuthTokenService) deleteExpiredTokens(ctx context.Context, maxInactiveLifetime, maxLifetime time.Duration) (int64, error) {
createdBefore := getTime().Add(-maxLifetime)
rotatedBefore := getTime().Add(-maxInactiveLifetime)
2019-01-21 17:05:42 +01:00
s.log.Debug("starting cleanup of expired auth tokens", "createdBefore", createdBefore, "rotatedBefore", rotatedBefore)
var affected int64
err := s.SQLStore.WithDbSession(ctx, func(dbSession *sqlstore.DBSession) error {
sql := `DELETE from user_auth_token WHERE created_at <= ? OR rotated_at <= ?`
res, err := dbSession.Exec(sql, createdBefore.Unix(), rotatedBefore.Unix())
if err != nil {
return err
}
2019-01-21 17:05:42 +01:00
affected, err = res.RowsAffected()
if err != nil {
s.log.Error("failed to cleanup expired auth tokens", "error", err)
return nil
}
s.log.Debug("cleanup of expired auth tokens done", "count", affected)
return nil
})
2019-01-21 17:05:42 +01:00
return affected, err
}