From f592260049a6e7345a3457d990fa952e8fb09ff3 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Sat, 30 May 2026 15:37:47 -0400 Subject: [PATCH] fix(ui): suppress privacy mode account title leaks --- .../account/shared/account-surface-card.tsx | 10 ++-- .../account/account-surface-card.test.tsx | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 ui/tests/components/account/account-surface-card.test.tsx diff --git a/ui/src/components/account/shared/account-surface-card.tsx b/ui/src/components/account/shared/account-surface-card.tsx index 6641068d..8e680913 100644 --- a/ui/src/components/account/shared/account-surface-card.tsx +++ b/ui/src/components/account/shared/account-surface-card.tsx @@ -172,6 +172,8 @@ export function AccountSurfaceCard({ const { t } = useTranslation(); const identity = getAccountIdentityPresentation(accountId, email, tokenFile); const title = displayEmail || identity.email || accountId; + const sensitiveTitle = (value: string | null | undefined) => + privacyMode ? undefined : (value ?? undefined); const normalizedProvider = provider.toLowerCase(); const effectiveTier = resolveEffectiveTier(tier, quota); const effectiveCodexBadge = @@ -202,7 +204,7 @@ export function AccountSurfaceCard({ {normalizedProvider === 'codex' ? effectiveCodexBadge?.label && ( { + it('keeps sensitive account title attributes available outside privacy mode', () => { + const { container } = render( + + ); + + expect(screen.getByText('person@example.com')).toHaveAttribute('title', 'person@example.com'); + expect(container.querySelector('[title="Business"]')).toBeInTheDocument(); + expect(container.querySelector('[title="Workspace abcdef12"]')).toBeInTheDocument(); + }); + + it('removes sensitive account title attributes in privacy mode', () => { + const { container } = render( + <> + + + + ); + + expect(screen.getByText('person@example.com')).not.toHaveAttribute('title'); + expect(screen.getByText('codex@example.com')).not.toHaveAttribute('title'); + expect(container.querySelector('[title="Business"]')).not.toBeInTheDocument(); + expect(container.querySelector('[title="Workspace abcdef12"]')).not.toBeInTheDocument(); + expect(container.querySelector('[title*="Enterprise"]')).not.toBeInTheDocument(); + }); +});