session_cleanup.go 871 B

1234567891011121314151617181920212223242526272829303132333435363738
  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 * 12)
  8. deleteSessionAfter := time.Hour * 24 * 7 * 30
  9. for {
  10. select {
  11. case <-ticker.C:
  12. srv.ServerLockService.LockAndExecute(ctx, "delete old sessions", time.Hour*12, func() {
  13. srv.deleteOldSession(deleteSessionAfter)
  14. })
  15. case <-ctx.Done():
  16. return ctx.Err()
  17. }
  18. }
  19. }
  20. func (srv *UserAuthTokenService) deleteOldSession(deleteSessionAfter time.Duration) (int64, error) {
  21. sql := `DELETE from user_auth_token WHERE rotated_at < ?`
  22. deleteBefore := getTime().Add(-deleteSessionAfter)
  23. res, err := srv.SQLStore.NewSession().Exec(sql, deleteBefore.Unix())
  24. if err != nil {
  25. return 0, err
  26. }
  27. affected, err := res.RowsAffected()
  28. srv.log.Info("deleted old sessions", "count", affected)
  29. return affected, err
  30. }