Skip to content

Commit 282e8d2

Browse files
committed
fix(dashboard): mask publishable key in API response and UI by default
1 parent 86aadcd commit 282e8d2

2 files changed

Lines changed: 7 additions & 6 deletions

File tree

‎apps/dashboard-api/src/controllers/project.controller.js‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,7 @@ const sanitizeAuthProviders = (authProviders = {}) => {
168168
};
169169

170170
const sanitizeProjectResponse = (projectObj) => {
171-
if (projectObj.publishableKey && projectObj.publishableKey.startsWith('pk_live_')) {
172-
// Keep plaintext public key
173-
} else {
174-
projectObj.publishableKey = 'pk_live_••••••••';
175-
}
171+
projectObj.publishableKey = 'pk_live_••••••••';
176172
delete projectObj.secretKey;
177173
delete projectObj.secretKeyEncrypted;
178174
delete projectObj.jwtSecret;

‎apps/web-dashboard/src/pages/ProjectDetails.jsx‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,12 @@ function ProjectDetails() {
372372
<button onClick={() => handleRegenerateKey('publishable')} style={{ background: 'none', border: 'none', color: 'var(--color-text-muted)', fontSize: '0.7rem', cursor: 'pointer' }}>Roll</button>
373373
</div>
374374
<div style={{ display: 'flex', background: 'var(--color-bg-input)', border: '1px solid var(--color-border)', borderRadius: '6px', overflow: 'hidden' }}>
375-
<input readOnly value={project.publishableKey} style={{ flex: 1, background: 'transparent', border: 'none', color: 'var(--color-primary)', padding: '8px 12px', fontFamily: 'monospace', fontSize: '0.8rem' }} />
375+
<input readOnly value={project.publishableKey || 'pk_live_************************'} style={{ flex: 1, background: 'transparent', border: 'none', color: project.publishableKey?.includes('••••') ? '#666' : 'var(--color-primary)', padding: '8px 12px', fontFamily: 'monospace', fontSize: '0.8rem' }} />
376+
{project.publishableKey?.includes('••••') && (
377+
<span style={{ fontSize: '0.65rem', color: 'var(--color-text-muted)', alignSelf: 'center', paddingRight: '12px', whiteSpace: 'nowrap' }}>
378+
Regenerate to reveal
379+
</span>
380+
)}
376381
</div>
377382
</div>
378383

0 commit comments

Comments
 (0)