From c894952e84c22349266612063595451bcb6c11e2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Mon, 11 Sep 2023 13:01:49 +0530 Subject: [PATCH] fix: resovled batch function not working with folders --- .../src/controllers/v2/secretsController.ts | 10 +++--- .../src/controllers/v3/secretsController.ts | 33 ++++++++++++++++--- backend/src/helpers/secrets.ts | 6 ++-- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index 1088152df..0ecd88cf8 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -89,15 +89,17 @@ export const batchSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(workspaceId) }); - const folders = await Folder.findOne({ workspace: workspaceId, environment }); - - if (secretPath) { + if (secretPath !== "/") { folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); } - if (folders && folderId !== "root") { + if (folderId !== "root") { + const folders = await Folder.findOne({ workspace: workspaceId, environment }); + if (!folders) throw BadRequestError({ message: "Folder not found" }); + const folder = searchByFolderIdWithDir(folders.nodes, folderId as string); if (!folder?.folder) throw BadRequestError({ message: "Folder not found" }); + secretPath = path.join( "/", ...folder.dir.map(({ name }) => name).filter((name) => name !== "root") diff --git a/backend/src/controllers/v3/secretsController.ts b/backend/src/controllers/v3/secretsController.ts index e2b405483..696f23f75 100644 --- a/backend/src/controllers/v3/secretsController.ts +++ b/backend/src/controllers/v3/secretsController.ts @@ -7,7 +7,7 @@ import { containsGlobPatterns, repackageSecretToRaw } from "../../helpers/secret import { encryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto"; import { getAllImportedSecrets } from "../../services/SecretImportService"; import { Folder, IServiceTokenData } from "../../models"; -import { getFolderByPath } from "../../services/FolderService"; +import { getFolderByPath, getFolderWithPathFromId } from "../../services/FolderService"; import { BadRequestError } from "../../utils/errors"; import { validateRequest } from "../../helpers/validation"; import * as reqValidator from "../../validation/secrets"; @@ -27,9 +27,13 @@ import { PERMISSION_READ_SECRETS, PERMISSION_WRITE_SECRETS } from "../../variabl * @param res */ export const getSecretsRaw = async (req: Request, res: Response) => { + const validatedData = await validateRequest(reqValidator.GetSecretsRawV3, req); let { - query: { secretPath, environment, workspaceId, include_imports: includeImports, folderId } - } = await validateRequest(reqValidator.GetSecretsRawV3, req); + query: { secretPath, environment, workspaceId } + } = validatedData; + const { + query: { folderId, include_imports: includeImports } + } = validatedData; // if the service token has single scope, it will get all secrets for that scope by default const serviceTokenDetails: IServiceTokenData = req?.serviceTokenData; @@ -44,6 +48,13 @@ export const getSecretsRaw = async (req: Request, res: Response) => { workspaceId = serviceTokenDetails.workspace.toString(); } + if (folderId && folderId !== "root") { + const folder = await Folder.findOne({ workspace: workspaceId, environment }); + if (!folder) throw BadRequestError({ message: "Folder not found" }); + + secretPath = getFolderWithPathFromId(folder.nodes, folderId).folderPath; + } + if (req.user?._id) { const { permission } = await getUserProjectPermissions(req.user._id, workspaceId); ForbiddenError.from(permission).throwUnlessCan( @@ -367,9 +378,21 @@ export const deleteSecretByNameRaw = async (req: Request, res: Response) => { * @param res */ export const getSecrets = async (req: Request, res: Response) => { + const validatedData = await validateRequest(reqValidator.GetSecretsV3, req); const { - query: { secretPath, environment, workspaceId, include_imports: includeImports, folderId } - } = await validateRequest(reqValidator.GetSecretsV3, req); + query: { environment, workspaceId, include_imports: includeImports, folderId } + } = validatedData; + + let { + query: { secretPath } + } = validatedData; + + if (folderId && folderId !== "root") { + const folder = await Folder.findOne({ workspace: workspaceId, environment }); + if (!folder) throw BadRequestError({ message: "Folder not found" }); + + secretPath = getFolderWithPathFromId(folder.nodes, folderId).folderPath; + } if (req.user?._id) { const { permission } = await getUserProjectPermissions(req.user._id, workspaceId); diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 510da7dd9..3799dc1e7 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -578,8 +578,10 @@ export const getSecretsHelper = async ({ } } - const numberOfSignupSecrets = (secrets.filter((secret) => secret?.metadata?.source === "signup")).length; - const atLeastOneNonSignUpSecret = (secrets.length - numberOfSignupSecrets > 0) + const numberOfSignupSecrets = secrets.filter( + (secret) => secret?.metadata?.source === "signup" + ).length; + const atLeastOneNonSignUpSecret = secrets.length - numberOfSignupSecrets > 0; if (postHogClient && atLeastOneNonSignUpSecret) { const shouldCapture = authData.userAgent !== K8_USER_AGENT_NAME || shouldRecordK8Event;