token_cleanup.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package auth
  2. import (
  3. "context"
  4. "time"
  5. )
  6. func (srv *UserAuthTokenService) Run(ctx context.Context) error {
  7. ticker := time.NewTicker(time.Hour)
  8. maxInactiveLifetime := time.Duration(srv.Cfg.LoginMaxInactiveLifetimeDays) * 24 * time.Hour
  9. maxLifetime := time.Duration(srv.Cfg.LoginMaxLifetimeDays) * 24 * time.Hour
  10. err := srv.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
  11. srv.deleteExpiredTokens(maxInactiveLifetime, maxLifetime)
  12. })
  13. if err != nil {
  14. srv.log.Error("failed to lock and execite cleanup of expired auth token", "erro", err)
  15. }
  16. for {
  17. select {
  18. case <-ticker.C:
  19. err := srv.ServerLockService.LockAndExecute(ctx, "cleanup expired auth tokens", time.Hour*12, func() {
  20. srv.deleteExpiredTokens(maxInactiveLifetime, maxLifetime)
  21. })
  22. if err != nil {
  23. srv.log.Error("failed to lock and execite cleanup of expired auth token", "erro", err)
  24. }
  25. case <-ctx.Done():
  26. return ctx.Err()
  27. }
  28. }
  29. }
  30. func (srv *UserAuthTokenService) deleteExpiredTokens(maxInactiveLifetime, maxLifetime time.Duration) (int64, error) {
  31. createdBefore := getTime().Add(-maxLifetime)
  32. rotatedBefore := getTime().Add(-maxInactiveLifetime)
  33. srv.log.Debug("starting cleanup of expired auth tokens", "createdBefore", createdBefore, "rotatedBefore", rotatedBefore)
  34. sql := `DELETE from user_auth_token WHERE created_at <= ? OR rotated_at <= ?`
  35. res, err := srv.SQLStore.NewSession().Exec(sql, createdBefore.Unix(), rotatedBefore.Unix())
  36. if err != nil {
  37. return 0, err
  38. }
  39. affected, err := res.RowsAffected()
  40. if err != nil {
  41. srv.log.Error("failed to cleanup expired auth tokens", "error", err)
  42. return 0, nil
  43. }
  44. srv.log.Debug("cleanup of expired auth tokens done", "count", affected)
  45. return affected, err
  46. }