From b93aaffe7708393c902b87753e929469d3405b6d Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 10 May 2024 22:34:16 +0800 Subject: [PATCH] adjustment: updated to use project slug --- backend/src/lib/api-docs/constants.ts | 1 + backend/src/server/routes/index.ts | 4 +++- .../src/server/routes/v1/secret-folder-router.ts | 11 +++++------ .../secret-folder/secret-folder-service.ts | 15 +++++++++++++-- .../services/secret-folder/secret-folder-types.ts | 3 ++- frontend/src/hooks/api/secretFolders/queries.tsx | 6 +++--- frontend/src/hooks/api/secretFolders/types.ts | 1 + .../SecretOverviewPage/SecretOverviewPage.tsx | 5 +++-- 8 files changed, 31 insertions(+), 15 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 336385472..6f9cbac34 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -252,6 +252,7 @@ export const FOLDERS = { name: "The new name of the folder.", path: "The path of the folder to update.", directory: "The new directory of the folder to update. (Deprecated in favor of path)", + projectSlug: "The slug of the project where the folder is located.", workspaceId: "The ID of the project where the folder is located." }, DELETE: { diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 62dad3cf4..94ba5db55 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -538,8 +538,10 @@ export const registerRoutes = async ( folderDAL, folderVersionDAL, projectEnvDAL, - snapshotService + snapshotService, + projectDAL }); + const integrationAuthService = integrationAuthServiceFactory({ integrationAuthDAL, integrationDAL, diff --git a/backend/src/server/routes/v1/secret-folder-router.ts b/backend/src/server/routes/v1/secret-folder-router.ts index 1ca97c030..95cd47c7b 100644 --- a/backend/src/server/routes/v1/secret-folder-router.ts +++ b/backend/src/server/routes/v1/secret-folder-router.ts @@ -141,7 +141,7 @@ export const registerSecretFolderRouter = async (server: FastifyZodProvider) => } ], body: z.object({ - workspaceId: z.string().trim().describe(FOLDERS.UPDATE.workspaceId), + projectSlug: z.string().trim().describe(FOLDERS.UPDATE.projectSlug), folders: z .object({ id: z.string().describe(FOLDERS.UPDATE.folderId), @@ -160,20 +160,19 @@ export const registerSecretFolderRouter = async (server: FastifyZodProvider) => }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.API_KEY, AuthMode.SERVICE_TOKEN, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const { newFolders, oldFolders } = await server.services.folder.updateManyFolders({ - folders: req.body.folders, + const { newFolders, oldFolders, projectId } = await server.services.folder.updateManyFolders({ + ...req.body, actorId: req.permission.id, actor: req.permission.type, actorAuthMethod: req.permission.authMethod, - actorOrgId: req.permission.orgId, - projectId: req.body.workspaceId + actorOrgId: req.permission.orgId }); await Promise.all( req.body.folders.map(async (folder, ind) => { await server.services.auditLog.createAuditLog({ ...req.auditLogInfo, - projectId: req.body.workspaceId, + projectId, event: { type: EventType.UPDATE_FOLDER, metadata: { diff --git a/backend/src/services/secret-folder/secret-folder-service.ts b/backend/src/services/secret-folder/secret-folder-service.ts index 66e96e013..5caeea720 100644 --- a/backend/src/services/secret-folder/secret-folder-service.ts +++ b/backend/src/services/secret-folder/secret-folder-service.ts @@ -8,6 +8,7 @@ import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services import { TSecretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { BadRequestError } from "@app/lib/errors"; +import { TProjectDALFactory } from "../project/project-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TSecretFolderDALFactory } from "./secret-folder-dal"; import { @@ -25,6 +26,7 @@ type TSecretFolderServiceFactoryDep = { folderDAL: TSecretFolderDALFactory; projectEnvDAL: Pick; folderVersionDAL: TSecretFolderVersionDALFactory; + projectDAL: Pick; }; export type TSecretFolderServiceFactory = ReturnType; @@ -34,7 +36,8 @@ export const secretFolderServiceFactory = ({ snapshotService, permissionService, projectEnvDAL, - folderVersionDAL + folderVersionDAL, + projectDAL }: TSecretFolderServiceFactoryDep) => { const createFolder = async ({ projectId, @@ -125,11 +128,18 @@ export const secretFolderServiceFactory = ({ const updateManyFolders = async ({ actor, actorId, - projectId, + projectSlug, actorAuthMethod, actorOrgId, folders }: TUpdateManyFoldersDTO) => { + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) { + throw new BadRequestError({ message: "Project not found" }); + } + + const projectId = project.id; + const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -210,6 +220,7 @@ export const secretFolderServiceFactory = ({ await Promise.all(result.map(async (res) => snapshotService.performSnapshot(res.newFolder.parentId as string))); return { + projectId, newFolders: result.map((res) => res.newFolder), oldFolders: result.map((res) => res.oldFolder) }; diff --git a/backend/src/services/secret-folder/secret-folder-types.ts b/backend/src/services/secret-folder/secret-folder-types.ts index 18c677b49..1405f8bd7 100644 --- a/backend/src/services/secret-folder/secret-folder-types.ts +++ b/backend/src/services/secret-folder/secret-folder-types.ts @@ -14,13 +14,14 @@ export type TUpdateFolderDTO = { } & TProjectPermission; export type TUpdateManyFoldersDTO = { + projectSlug: string; folders: { environment: string; path: string; id: string; name: string; }[]; -} & TProjectPermission; +} & Omit; export type TDeleteFolderDTO = { environment: string; diff --git a/frontend/src/hooks/api/secretFolders/queries.tsx b/frontend/src/hooks/api/secretFolders/queries.tsx index 9bf266ccf..5bd3444d0 100644 --- a/frontend/src/hooks/api/secretFolders/queries.tsx +++ b/frontend/src/hooks/api/secretFolders/queries.tsx @@ -196,10 +196,10 @@ export const useUpdateFolderBatch = () => { const queryClient = useQueryClient(); return useMutation<{}, {}, TUpdateFolderBatchDTO>({ - mutationFn: async ({ projectId, folders }) => { + mutationFn: async ({ projectSlug, folders }) => { const { data } = await apiRequest.patch("/api/v1/folders/batch", { - folders, - workspaceId: projectId + projectSlug, + folders }); return data; diff --git a/frontend/src/hooks/api/secretFolders/types.ts b/frontend/src/hooks/api/secretFolders/types.ts index 0ae2cfef2..8fde9c63d 100644 --- a/frontend/src/hooks/api/secretFolders/types.ts +++ b/frontend/src/hooks/api/secretFolders/types.ts @@ -39,6 +39,7 @@ export type TDeleteFolderDTO = { export type TUpdateFolderBatchDTO = { projectId: string; + projectSlug: string; folders: { name: string; environment: string; diff --git a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx index af1ef5d7d..afe806c5e 100644 --- a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx +++ b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx @@ -278,8 +278,9 @@ export const SecretOverviewPage = () => { try { await updateFolderBatch({ - projectId: workspaceId, - folders: updatedFolders + projectSlug, + folders: updatedFolders, + projectId: workspaceId }); createNotification({ type: "success",