Files
llmgw/internal/store/revoked.go
T

30 lines
908 B
Go

package store
import (
"context"
"database/sql"
"errors"
"time"
)
// RevokeNode records that a node was removed at a moment: every certificate
// issued for it until then is refused from now on.
func (s *DB) RevokeNode(ctx context.Context, nodeID string, at time.Time) error {
_, err := s.db.ExecContext(ctx, `INSERT INTO revoked_nodes (node_id, revoked_at) VALUES (?, ?)
ON CONFLICT (node_id) DO UPDATE SET revoked_at = excluded.revoked_at`, nodeID, millis(at))
return err
}
// NodeRevokedAt is when a node was last removed; zero if it never was.
func (s *DB) NodeRevokedAt(ctx context.Context, nodeID string) (time.Time, error) {
var at int64
err := s.db.QueryRowContext(ctx, `SELECT revoked_at FROM revoked_nodes WHERE node_id = ?`, nodeID).Scan(&at)
if errors.Is(err, sql.ErrNoRows) {
return time.Time{}, nil
}
if err != nil {
return time.Time{}, err
}
return fromMillis(at), nil
}