1package storage
2
3import (
4 "context"
5 "database/sql"
6 "time"
7)
8
9const ActionRefreshReuseRevoked = "refresh.reuse_revoked"
10
11func (s *Store) RevokeRefreshTokenAudited(ctx context.Context, id string, audit AppendAuditInput) (bool, error) {
12 const operation = "revoke reused refresh token"
13 var deleted int64
14 err := s.audited(ctx, operation, audit.Actor, func(tx *sql.Tx, at time.Time) error {
15 var err error
16 if deleted, err = execCount(ctx, tx, operation, `DELETE FROM refresh_tokens WHERE id = ?`, id); err != nil || deleted == 0 {
17 return err
18 }
19 _, err = appendAudit(ctx, tx, operation+" audit", audit, at)
20 return err
21 })
22 if err != nil {
23 return false, err
24 }
25 return deleted > 0, nil
26}