From 51e5c25e16a8ee1de53cdbb9bd4f3af67df7d1d8 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 4 Jan 2024 00:55:03 -0500 Subject: [PATCH] update imports/service token crud --- .../controllers/v1/secretImpsController.ts | 23 +++++++++++++++---- .../v2/serviceTokenDataController.ts | 10 +++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/backend/src/controllers/v1/secretImpsController.ts b/backend/src/controllers/v1/secretImpsController.ts index 14c99bb03..5db7a2f0a 100644 --- a/backend/src/controllers/v1/secretImpsController.ts +++ b/backend/src/controllers/v1/secretImpsController.ts @@ -111,11 +111,17 @@ export const createSecretImp = async (req: Request, res: Response) => { authData: req.authData, workspaceId: new Types.ObjectId(workspaceId) }); - + ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Create, subject(ProjectPermissionSub.Secrets, { environment, secretPath: directory }) ); + + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionActions.Create, + subject(ProjectPermissionSub.Secrets, { environment: secretImport.environment, secretPath: secretImport.secretPath }) + ); + } const folders = await Folder.findOne({ @@ -323,7 +329,7 @@ export const updateSecretImport = async (req: Request, res: Response) => { authData: req.authData, workspaceId: importSecDoc.workspace }); - + ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Edit, subject(ProjectPermissionSub.Secrets, { @@ -331,6 +337,13 @@ export const updateSecretImport = async (req: Request, res: Response) => { secretPath }) ); + + secretImports.forEach(({ environment, secretPath }) => { + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionActions.Create, + subject(ProjectPermissionSub.Secrets, { environment, secretPath }) + ); + }) } const orderBefore = importSecDoc.imports; @@ -453,7 +466,7 @@ export const deleteSecretImport = async (req: Request, res: Response) => { authData: req.authData, workspaceId: importSecDoc.workspace }); - + ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Delete, subject(ProjectPermissionSub.Secrets, { @@ -620,7 +633,7 @@ export const getAllSecretsFromImport = async (req: Request, res: Response) => { authData: req.authData, workspaceId: new Types.ObjectId(workspaceId) }); - + ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Read, subject(ProjectPermissionSub.Secrets, { @@ -677,7 +690,7 @@ export const getAllSecretsFromImport = async (req: Request, res: Response) => { authData: req.authData, workspaceId: importSecDoc.workspace }); - + ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Read, subject(ProjectPermissionSub.Secrets, { diff --git a/backend/src/controllers/v2/serviceTokenDataController.ts b/backend/src/controllers/v2/serviceTokenDataController.ts index b49639d3f..19a412dce 100644 --- a/backend/src/controllers/v2/serviceTokenDataController.ts +++ b/backend/src/controllers/v2/serviceTokenDataController.ts @@ -13,7 +13,7 @@ import { ProjectPermissionSub, getAuthDataProjectPermissions } from "../../ee/services/ProjectRoleService"; -import { ForbiddenError } from "@casl/ability"; +import { ForbiddenError, subject } from "@casl/ability"; import { Types } from "mongoose"; /** @@ -86,6 +86,14 @@ export const createServiceTokenData = async (req: Request, res: Response) => { ProjectPermissionSub.ServiceTokens ); + scopes.forEach(({ environment, secretPath }) => { + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionActions.Create, + subject(ProjectPermissionSub.Secrets, { environment, secretPath: secretPath }) + ); + }) + + const secret = crypto.randomBytes(16).toString("hex"); const secretHash = await bcrypt.hash(secret, await getSaltRounds());