diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index e691e7417..84227b59e 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -188,32 +188,29 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { if (!val) return undefined; const result: { key?: string; value?: string }[] = []; - const pairs = val.split(","); + const pairs = val.split("|"); for (const pair of pairs) { - const pairResult: { key?: string; value?: string } = {}; - const parts = pair.split(/[:=]/).map((part) => part.trim()); + const keyValuePair: { key?: string; value?: string } = {}; + const parts = pair.split(/[,=]/); - for (let i = 0; i < parts.length - 1; i += 1) { - const current = parts[i].toLowerCase(); - const next = parts[i + 1]; + for (let i = 0; i < parts.length; i += 2) { + const identifier = parts[i].trim().toLowerCase(); + const value = parts[i + 1]?.trim(); - if (current === "key" && next) { - pairResult.key = next; - } else if (current === "value" && next) { - pairResult.value = next; + if (identifier === "key" && value) { + keyValuePair.key = value; + } else if (identifier === "value" && value) { + keyValuePair.value = value; } } - // Only add pair if at least one of key or value is present - if (pairResult.key || pairResult.value) { - result.push(pairResult); + if (keyValuePair.key && keyValuePair.value) { + result.push(keyValuePair); } } - if (!result.length) return undefined; - - return result; + return result.length ? result : undefined; }) .superRefine((metadata, ctx) => { if (metadata && !Array.isArray(metadata)) { diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts index 27a62a6d3..99980fba7 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-dal.ts @@ -417,9 +417,13 @@ export const secretV2BridgeDALFactory = (db: TDbClient) => { .where((qb) => { if (filters?.metadataFilter && filters.metadataFilter.length > 0) { filters.metadataFilter.forEach((meta) => { - void qb.where({ - ...(meta.key ? { [`${TableName.ResourceMetadata}.key` as string]: meta.key } : {}), - ...(meta.value ? { [`${TableName.ResourceMetadata}.value` as string]: meta.value } : {}) + void qb.whereExists((subQuery) => { + void subQuery + .select("secretId") + .from(TableName.ResourceMetadata) + .whereRaw(`"${TableName.ResourceMetadata}"."secretId" = "${TableName.SecretV2}"."id"`) + .where(`${TableName.ResourceMetadata}.key`, meta.key) + .where(`${TableName.ResourceMetadata}.value`, meta.value); }); }); }