From a3859170fe18911024c7d9cb5ce3a8610d8e4a4d Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Thu, 3 Jul 2025 03:15:06 +0400 Subject: [PATCH 1/3] fix(secret-folders): delete folder by ID --- .../secret-folder/secret-folder-service.ts | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index 793179b44..6c2040e2d 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -478,12 +478,25 @@ export const secretFolderServiceFactory = ({ parentId: string; idOrName: string; }) => { - const targetFolder = await folderDAL.findOne({ - envId: env.id, - [uuidValidate(idOrName) ? "id" : "name"]: idOrName, - parentId, - isReserved: false - }); + let targetFolder = await folderDAL + .findOne({ + envId: env.id, + name: idOrName, + parentId, + isReserved: false + }) + .catch(() => null); + + if (!targetFolder) { + targetFolder = await folderDAL + .findOne({ + envId: env.id, + id: idOrName, + parentId, + isReserved: false + }) + .catch(() => null); + } if (!targetFolder) { throw new NotFoundError({ message: `Target folder not found` }); @@ -589,18 +602,40 @@ export const secretFolderServiceFactory = ({ await $checkFolderPolicy({ projectId, env, parentId: parentFolder.id, idOrName }); + let folderToDelete = await folderDAL + .findOne({ + envId: env.id, + name: idOrName, + parentId: parentFolder.id, + isReserved: false + }) + .catch(() => null); + + if (!folderToDelete) { + folderToDelete = await folderDAL + .findOne({ + envId: env.id, + id: idOrName, + parentId: parentFolder.id, + isReserved: false + }) + .catch(() => null); + } + + if (!folderToDelete) { + throw new NotFoundError({ message: `Folder with ID '${idOrName}' not found` }); + } + const [doc] = await folderDAL.delete( { envId: env.id, - [uuidValidate(idOrName) ? "id" : "name"]: idOrName, + id: folderToDelete.id, parentId: parentFolder.id, isReserved: false }, tx ); - if (!doc) throw new NotFoundError({ message: `Failed to delete folder with ID '${idOrName}', not found` }); - const folderVersions = await folderVersionDAL.findLatestFolderVersions([doc.id], tx); await folderCommitService.createCommit( From 0139064aaa296752123e3c50b59397be8bf830c7 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Thu, 3 Jul 2025 03:17:10 +0400 Subject: [PATCH 2/3] Update secret-folder-service.ts --- backend/src/services/secret-folder/secret-folder-service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index 6c2040e2d..462a844f1 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -487,7 +487,7 @@ export const secretFolderServiceFactory = ({ }) .catch(() => null); - if (!targetFolder) { + if (!targetFolder && uuidValidate(idOrName)) { targetFolder = await folderDAL .findOne({ envId: env.id, @@ -611,7 +611,7 @@ export const secretFolderServiceFactory = ({ }) .catch(() => null); - if (!folderToDelete) { + if (!folderToDelete && uuidValidate(idOrName)) { folderToDelete = await folderDAL .findOne({ envId: env.id, From 527a727c1cee38a0c961f769fa5e9ff5a87089e3 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard Date: Thu, 3 Jul 2025 03:28:21 +0400 Subject: [PATCH 3/3] fix: ts issue --- backend/src/services/secret-folder/secret-folder-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index 462a844f1..e06cfcb01 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -519,7 +519,7 @@ export const secretFolderServiceFactory = ({ } // Find the target folder in the folderPaths to get its full details - const targetFolderWithPath = folderPaths.find((f) => f.id === targetFolder.id); + const targetFolderWithPath = folderPaths.find((f) => f.id === targetFolder!.id); if (!targetFolderWithPath) { throw new NotFoundError({ message: `Target folder path not found` }); }