package idp import ( "context" "errors" "fmt" dexstorage "github.com/dexidp/dex/storage" ) func (p *IDP) RefreshTokenCount(ctx context.Context, userID string) (int, error) { sessions, err := p.dex.GetOfflineSessions(ctx, userID, ConnectorID) if errors.Is(err, dexstorage.ErrNotFound) { return 0, nil } if err != nil { return 0, fmt.Errorf("idp: read offline sessions: %w", err) } now := p.verifier.deps.now() live := 0 for _, ref := range sessions.Refresh { if now.After(ref.CreatedAt.Add(RefreshAbsoluteLifetime)) || now.After(ref.LastUsed.Add(RefreshIdleLifetime)) { continue } _, err := p.dex.GetRefresh(ctx, ref.ID) if errors.Is(err, dexstorage.ErrNotFound) { continue } if err != nil { return 0, fmt.Errorf("idp: read refresh token: %w", err) } live++ } return live, nil }