From 19548772df38f37ed5272575561d28911476c083 Mon Sep 17 00:00:00 2001 From: jarek Date: Fri, 14 Aug 2026 15:59:11 +0200 Subject: [PATCH] reject duplicate secret provider name with a 400 --- src/routes/api/secret-providers/+server.ts | 8 +++++--- src/routes/api/secret-providers/[id]/+server.ts | 10 +++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/routes/api/secret-providers/+server.ts b/src/routes/api/secret-providers/+server.ts index 6433a42..4759716 100644 --- a/src/routes/api/secret-providers/+server.ts +++ b/src/routes/api/secret-providers/+server.ts @@ -44,15 +44,17 @@ export const POST: RequestHandler = async (event) => { return json({ error: 'Config is required' }, { status: 400 }); } + const existing = await getSecretProviders(); + if (existing.some((p) => p.name.trim() === name)) { + return json({ error: 'A secret provider with this name already exists' }, { status: 400 }); + } + const provider = await createSecretProvider({ type, name, config }); await auditSecretProvider(event, 'create', provider.id, provider.name, { type }); // Never return the decrypted config. return json(provider, { status: 201 }); } catch (error: any) { console.error('Error creating secret provider:', error); - if (error.message?.includes('UNIQUE') || error.message?.includes('unique')) { - return json({ error: 'A secret provider with this name already exists' }, { status: 400 }); - } return json({ error: 'Failed to create secret provider' }, { status: 500 }); } }; diff --git a/src/routes/api/secret-providers/[id]/+server.ts b/src/routes/api/secret-providers/[id]/+server.ts index 9be4023..23e11f7 100644 --- a/src/routes/api/secret-providers/[id]/+server.ts +++ b/src/routes/api/secret-providers/[id]/+server.ts @@ -66,6 +66,13 @@ export const PUT: RequestHandler = async (event) => { return json({ error: 'Config must be an object' }, { status: 400 }); } + if (name !== undefined && name !== existing.name) { + const all = await getSecretProviders(); + if (all.some((p) => p.id !== id && p.name.trim() === name)) { + return json({ error: 'A secret provider with this name already exists' }, { status: 400 }); + } + } + const updated = await updateSecretProvider(id, { name, type, config }); if (!updated) { return json({ error: 'Secret provider not found' }, { status: 404 }); @@ -81,9 +88,6 @@ export const PUT: RequestHandler = async (event) => { return json(updated); } catch (error: any) { console.error('Error updating secret provider:', error); - if (error.message?.includes('UNIQUE') || error.message?.includes('unique')) { - return json({ error: 'A secret provider with this name already exists' }, { status: 400 }); - } return json({ error: 'Failed to update secret provider' }, { status: 500 }); } };