Skip to content

Commit 0c6eb47

Browse files
authored
fix: duplicate key name (#2158)
* fix: popup by name and index * fix: message duplicate key detected * fix: add test
1 parent d244cb5 commit 0c6eb47

3 files changed

Lines changed: 62 additions & 4 deletions

File tree

packages/api/src/utils/db-client.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,18 @@ export class DBClient {
525525
/** @type {PostgrestQueryBuilder<definitions['auth_key']>} */
526526
const query = this.client.from('auth_key')
527527

528+
const { data: dataExists } = await query
529+
.select()
530+
.match({
531+
user_id: key.userId,
532+
name: key.name,
533+
})
534+
.is('deleted_at', null)
535+
536+
if (dataExists?.length) {
537+
throw new Error('Duplicate key name.')
538+
}
539+
528540
const { data, error } = await query
529541
.upsert({
530542
name: key.name,

packages/api/test/db-client.spec.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,39 @@ test.serial('getUser should list only active keys', async (t) => {
5555
t.is(keys.length, 3)
5656
t.is(keys[1].name, 'key1')
5757
})
58+
59+
test.serial('createKey should not allow duplicates', async (t) => {
60+
// Arrange
61+
const client = await createClientWithUser(t)
62+
const config = getTestServiceConfig(t)
63+
const issuer1 = `did:eth:0x73573${Date.now()}`
64+
const token1 = await signJWT(
65+
{
66+
sub: issuer1,
67+
iss: 'nft-storage',
68+
iat: Date.now(),
69+
name: 'key1',
70+
},
71+
config.SALT
72+
)
73+
await client.client.createKey({
74+
name: 'key1',
75+
secret: token1,
76+
userId: client.userId,
77+
})
78+
let threw = false
79+
80+
// Act
81+
try {
82+
await client.client.createKey({
83+
name: 'key1',
84+
secret: token1,
85+
userId: client.userId,
86+
})
87+
} catch (e) {
88+
threw = true
89+
}
90+
91+
// Assert
92+
t.true(threw)
93+
})

packages/website/pages/manage.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ export default function ManageKeys({ user }) {
9999
</Button>
100100
)
101101

102+
/**
103+
* @param {string} keyName
104+
* @param {number} keyIndex
105+
*/
106+
const getButtonKey = (keyName, keyIndex) => {
107+
return `${keyName}-${keyIndex}`
108+
}
109+
102110
return (
103111
<main className="bg-nsgreen grow">
104112
<div className="max-w-7xl mx-auto py-4 px-6 sm:px-16">
@@ -190,7 +198,7 @@ export default function ManageKeys({ user }) {
190198
</td>
191199
<td className="shrink-cell center-cell">
192200
<Popover
193-
isOpen={isActionMenuOpen === t[0]}
201+
isOpen={isActionMenuOpen === getButtonKey(t[0], k)}
194202
onClickOutside={(e) => {
195203
if (e.currentTarget !== null) {
196204
if (
@@ -262,13 +270,15 @@ export default function ManageKeys({ user }) {
262270
)}
263271
>
264272
<button
265-
onClick={() => setIsActionMenuOpen(t[0])}
273+
onClick={() =>
274+
setIsActionMenuOpen(getButtonKey(t[0], k))
275+
}
266276
className={`${
267-
isActionMenuOpen === t[0]
277+
isActionMenuOpen === getButtonKey(t[0], k)
268278
? 'actions-trigger--active'
269279
: ''
270280
} btn small actions-trigger`}
271-
data-key={t[0]}
281+
data-key={getButtonKey(t[0], k)}
272282
>
273283
Actions
274284
</button>

0 commit comments

Comments
 (0)