From c29cb667d76365032e207a839bdb27937d3949b8 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:49:47 +0100 Subject: [PATCH 01/61] Feat: Recursively get secrets from all nested secret paths --- backend/src/lib/api-docs/constants.ts | 1 + backend/src/server/routes/v3/secret-router.ts | 16 +++- backend/src/services/secret/secret-fns.ts | 69 +++++++++++++++- backend/src/services/secret/secret-service.ts | 81 ++++++++++++++++--- backend/src/services/secret/secret-types.ts | 1 + 5 files changed, 150 insertions(+), 18 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 8736e80c6..4a45dfb41 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -215,6 +215,7 @@ export const SECRETS = { export const RAW_SECRETS = { LIST: { + recursive: "Whether or not to fetch all secrets from the specified base path, and all of its subdirectories.", workspaceId: "The ID of the project to list secrets from.", workspaceSlug: "The slug of the project to list secrets from. This parameter is only usable by machine identities.", environment: "The slug of the environment to list secrets from.", diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index f69466328..8d3f08b61 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -157,6 +157,11 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { workspaceSlug: z.string().trim().optional().describe(RAW_SECRETS.LIST.workspaceSlug), environment: z.string().trim().optional().describe(RAW_SECRETS.LIST.environment), secretPath: z.string().trim().default("/").transform(removeTrailingSlash).describe(RAW_SECRETS.LIST.secretPath), + recursive: z + .enum(["true", "false"]) + .default("false") + .transform((value) => value === "true") + .describe(RAW_SECRETS.LIST.recursive), include_imports: z .enum(["true", "false"]) .default("false") @@ -165,7 +170,13 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { }), response: { 200: z.object({ - secrets: secretRawSchema.array(), + secrets: secretRawSchema + .merge( + z.object({ + secretPath: z.string().optional() + }) + ) + .array(), imports: z .object({ secretPath: z.string(), @@ -218,7 +229,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { actorAuthMethod: req.permission.authMethod, projectId: workspaceId, path: secretPath, - includeImports: req.query.include_imports + includeImports: req.query.include_imports, + recursive: req.query.recursive }); await server.services.auditLog.createAuditLog({ diff --git a/backend/src/services/secret/secret-fns.ts b/backend/src/services/secret/secret-fns.ts index 212bb01f0..b499f9365 100644 --- a/backend/src/services/secret/secret-fns.ts +++ b/backend/src/services/secret/secret-fns.ts @@ -9,6 +9,7 @@ import { TSecretBlindIndexes, TSecrets } from "@app/db/schemas"; +import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; import { getConfig } from "@app/lib/config/env"; import { buildSecretBlindIndexFromName, @@ -17,8 +18,10 @@ import { } from "@app/lib/crypto"; import { BadRequestError } from "@app/lib/errors"; import { groupBy, unique } from "@app/lib/fn"; +import { logger } from "@app/lib/logger"; import { getBotKeyFnFactory } from "../project-bot/project-bot-fns"; +import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; import { TSecretDALFactory } from "./secret-dal"; import { @@ -45,6 +48,68 @@ export const generateSecretBlindIndexBySalt = async (secretName: string, secretB return secretBlindIndex; }; +type TRecursivelyFetchSecretsFromFoldersArg = { + permissionService: Pick; + projectEnvDAL: Pick; + folderDAL: Pick; +}; + +export const recursivelyGetSecretPaths = ({ folderDAL, projectEnvDAL }: TRecursivelyFetchSecretsFromFoldersArg) => { + const getPaths = async (projectId: string, environment: string, currentPath: string) => { + let secretPaths: string[] = []; + + // Get secrets in the current folder. + try { + const folder = await folderDAL.findBySecretPath(projectId, environment, currentPath); + + if (!folder) { + throw new Error(`Base directory '${currentPath}' not found.`); + } + + secretPaths.push(currentPath); + } catch (error) { + logger.error(error, "Error fetching secrets from base directory"); + throw error; + } + + // List all subfolders in the current folder. + try { + const env = await projectEnvDAL.findOne({ projectId, slug: environment }); + const parentFolder = await folderDAL.findBySecretPath(projectId, environment, currentPath); + + if (!env) { + throw new Error(`Environment with not found`); + } + + if (!parentFolder) { + throw new Error(`Parent folder not found`); + } + + const folders = await folderDAL.find({ envId: env.id, parentId: parentFolder.id }); + + // Use Promise.all to handle recursive calls concurrently for efficiency. + const secretsFromSubFolders = await Promise.all( + folders.map(async (folder) => { + // Ensure the path is correctly formatted for the next level. + const subFolderPath = `${currentPath}${currentPath !== "/" ? "/" : ""}${folder.name}`; + + return getPaths(projectId, environment, subFolderPath); + }) + ); + + // Flatten the array of arrays and concatenate with the current secrets array. + secretPaths = secretPaths.concat(...secretsFromSubFolders); + } catch (error) { + logger.error(error, "Error fetching secrets from subdirectories"); + throw error; + } + + return secretPaths; + }; + + return getPaths; +}; + type TInterpolateSecretArg = { projectId: string; secretEncKey: string; @@ -202,9 +267,7 @@ export const interpolateSecrets = ({ projectId, secretEncKey, secretDAL, folderD ); // eslint-disable-next-line - secrets[key].value = secrets[key].skipMultilineEncoding - ? expandedVal - : formatMultiValueEnv(expandedVal); + secrets[key].value = secrets[key].skipMultilineEncoding ? expandedVal : formatMultiValueEnv(expandedVal); } return secrets; diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index f8fed95bb..6b71f7988 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -13,13 +13,20 @@ import { logger } from "@app/lib/logger"; import { ActorType } from "../auth/auth-type"; import { TProjectDALFactory } from "../project/project-dal"; import { TProjectBotServiceFactory } from "../project-bot/project-bot-service"; +import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TSecretBlindIndexDALFactory } from "../secret-blind-index/secret-blind-index-dal"; import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; import { TSecretImportDALFactory } from "../secret-import/secret-import-dal"; import { fnSecretsFromImports } from "../secret-import/secret-import-fns"; import { TSecretTagDALFactory } from "../secret-tag/secret-tag-dal"; import { TSecretDALFactory } from "./secret-dal"; -import { decryptSecretRaw, fnSecretBlindIndexCheck, fnSecretBulkInsert, fnSecretBulkUpdate } from "./secret-fns"; +import { + decryptSecretRaw, + fnSecretBlindIndexCheck, + fnSecretBulkInsert, + fnSecretBulkUpdate, + recursivelyGetSecretPaths +} from "./secret-fns"; import { TSecretQueueFactory } from "./secret-queue"; import { TAttachSecretTagsDTO, @@ -47,8 +54,12 @@ type TSecretServiceFactoryDep = { secretDAL: TSecretDALFactory; secretTagDAL: TSecretTagDALFactory; secretVersionDAL: TSecretVersionDALFactory; - folderDAL: Pick; projectDAL: Pick; + projectEnvDAL: Pick; + folderDAL: Pick< + TSecretFolderDALFactory, + "findBySecretPath" | "updateById" | "findById" | "findByManySecretPath" | "find" + >; secretBlindIndexDAL: TSecretBlindIndexDALFactory; permissionService: Pick; snapshotService: Pick; @@ -61,6 +72,7 @@ type TSecretServiceFactoryDep = { export type TSecretServiceFactory = ReturnType; export const secretServiceFactory = ({ secretDAL, + projectEnvDAL, secretTagDAL, secretVersionDAL, folderDAL, @@ -789,21 +801,64 @@ export const secretServiceFactory = ({ actorOrgId, actorAuthMethod, environment, - includeImports + includeImports, + recursive }: TGetSecretsRawDTO) => { const botKey = await projectBotService.getBotKey(projectId); if (!botKey) throw new BadRequestError({ message: "Project bot not found", name: "bot_not_found_error" }); - const { secrets, imports } = await getSecrets({ - actorId, - projectId, - environment, - actor, - actorOrgId, - actorAuthMethod, - path, - includeImports - }); + let secrets: Awaited>["secrets"]; + let imports: Awaited>["imports"]; + + if (recursive) { + const getPaths = recursivelyGetSecretPaths({ + permissionService, + folderDAL, + projectEnvDAL + }); + + const paths = await getPaths(projectId, environment, path); + + const result = await Promise.all( + paths.map(async (currentPath) => { + const secs = await getSecrets({ + actorId, + projectId, + environment, + actor, + actorOrgId, + actorAuthMethod, + path: currentPath, + includeImports + }); + + return { + secrets: { + ...secs.secrets, + secretPath: currentPath + }, + imports: secs.imports + }; + }) + ); + + secrets = result.flatMap((el) => el.secrets); + imports = result.flatMap((el) => el.imports || []); + } else { + const result = await getSecrets({ + actorId, + projectId, + environment, + actor, + actorOrgId, + actorAuthMethod, + path, + includeImports + }); + + secrets = result.secrets; + imports = result.imports; + } return { secrets: secrets.map((el) => decryptSecretRaw(el, botKey)), diff --git a/backend/src/services/secret/secret-types.ts b/backend/src/services/secret/secret-types.ts index efd4f0f8b..c6cacb255 100644 --- a/backend/src/services/secret/secret-types.ts +++ b/backend/src/services/secret/secret-types.ts @@ -140,6 +140,7 @@ export type TGetSecretsRawDTO = { path: string; environment: string; includeImports?: boolean; + recursive?: boolean; } & TProjectPermission; export type TGetASecretRawDTO = { From f91a6683c2984e6267cc7d9c70b2bf5d1f2166f1 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:10:56 +0100 Subject: [PATCH 02/61] Fix: Rename parameter --- backend/src/lib/api-docs/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 4a45dfb41..bb1b73a77 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -215,7 +215,7 @@ export const SECRETS = { export const RAW_SECRETS = { LIST: { - recursive: "Whether or not to fetch all secrets from the specified base path, and all of its subdirectories.", + deep: "Whether or not to fetch all secrets from the specified base path, and all of its subdirectories.", workspaceId: "The ID of the project to list secrets from.", workspaceSlug: "The slug of the project to list secrets from. This parameter is only usable by machine identities.", environment: "The slug of the environment to list secrets from.", From 9ff3210ed68415ce59c6937010abc253363535e6 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:11:36 +0100 Subject: [PATCH 03/61] Feat: Recursively get all secrets from inside path --- backend/src/server/routes/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index aea5baa94..6e59cd783 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -479,6 +479,7 @@ export const registerRoutes = async ( snapshotService, secretQueueService, secretImportDAL, + projectEnvDAL, projectBotService }); const sarService = secretApprovalRequestServiceFactory({ From 566f7e4c612231fb1704145f882b2615ff8bb084 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:12:22 +0100 Subject: [PATCH 04/61] Feat: Recursively get all secrets from inside path --- backend/src/server/routes/v3/secret-router.ts | 14 +- backend/src/services/secret/secret-fns.ts | 59 +++++- backend/src/services/secret/secret-service.ts | 193 +++++++++--------- 3 files changed, 166 insertions(+), 100 deletions(-) diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index 8d3f08b61..07dff0703 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -157,11 +157,11 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { workspaceSlug: z.string().trim().optional().describe(RAW_SECRETS.LIST.workspaceSlug), environment: z.string().trim().optional().describe(RAW_SECRETS.LIST.environment), secretPath: z.string().trim().default("/").transform(removeTrailingSlash).describe(RAW_SECRETS.LIST.secretPath), - recursive: z + deep: z .enum(["true", "false"]) .default("false") .transform((value) => value === "true") - .describe(RAW_SECRETS.LIST.recursive), + .describe(RAW_SECRETS.LIST.deep), include_imports: z .enum(["true", "false"]) .default("false") @@ -230,7 +230,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { projectId: workspaceId, path: secretPath, includeImports: req.query.include_imports, - recursive: req.query.recursive + deep: req.query.deep }); await server.services.auditLog.createAuditLog({ @@ -608,6 +608,10 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { workspaceId: z.string().trim(), environment: z.string().trim(), secretPath: z.string().trim().default("/").transform(removeTrailingSlash), + deep: z + .enum(["true", "false"]) + .default("false") + .transform((value) => value === "true"), include_imports: z .enum(["true", "false"]) .default("false") @@ -621,6 +625,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { _id: z.string(), workspace: z.string(), environment: z.string(), + secretPath: z.string().optional(), tags: SecretTagsSchema.pick({ id: true, slug: true, @@ -660,7 +665,8 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { environment: req.query.environment, projectId: req.query.workspaceId, path: req.query.secretPath, - includeImports: req.query.include_imports + includeImports: req.query.include_imports, + deep: req.query.deep }); await server.services.auditLog.createAuditLog({ diff --git a/backend/src/services/secret/secret-fns.ts b/backend/src/services/secret/secret-fns.ts index b499f9365..961f3fef6 100644 --- a/backend/src/services/secret/secret-fns.ts +++ b/backend/src/services/secret/secret-fns.ts @@ -1,4 +1,5 @@ /* eslint-disable no-await-in-loop */ +import { subject } from "@casl/ability"; import path from "path"; import { @@ -10,6 +11,7 @@ import { TSecrets } from "@app/db/schemas"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; +import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; import { getConfig } from "@app/lib/config/env"; import { buildSecretBlindIndexFromName, @@ -20,6 +22,7 @@ import { BadRequestError } from "@app/lib/errors"; import { groupBy, unique } from "@app/lib/fn"; import { logger } from "@app/lib/logger"; +import { ActorAuthMethod, ActorType } from "../auth/auth-type"; import { getBotKeyFnFactory } from "../project-bot/project-bot-fns"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TSecretFolderDALFactory } from "../secret-folder/secret-folder-dal"; @@ -54,8 +57,25 @@ type TRecursivelyFetchSecretsFromFoldersArg = { folderDAL: Pick; }; -export const recursivelyGetSecretPaths = ({ folderDAL, projectEnvDAL }: TRecursivelyFetchSecretsFromFoldersArg) => { - const getPaths = async (projectId: string, environment: string, currentPath: string) => { +type TGetPathsDTO = { + projectId: string; + environment: string; + currentPath: string; + + auth: { + actor: ActorType; + actorId: string; + actorAuthMethod: ActorAuthMethod; + actorOrgId: string | undefined; + }; +}; + +export const recursivelyGetSecretPaths = ({ + folderDAL, + projectEnvDAL, + permissionService +}: TRecursivelyFetchSecretsFromFoldersArg) => { + const getPaths = async ({ projectId, environment, currentPath }: Omit) => { let secretPaths: string[] = []; // Get secrets in the current folder. @@ -93,7 +113,7 @@ export const recursivelyGetSecretPaths = ({ folderDAL, projectEnvDAL }: TRecursi // Ensure the path is correctly formatted for the next level. const subFolderPath = `${currentPath}${currentPath !== "/" ? "/" : ""}${folder.name}`; - return getPaths(projectId, environment, subFolderPath); + return getPaths({ projectId, environment, currentPath: subFolderPath }); }) ); @@ -107,7 +127,32 @@ export const recursivelyGetSecretPaths = ({ folderDAL, projectEnvDAL }: TRecursi return secretPaths; }; - return getPaths; + return async ({ projectId, environment, currentPath, auth }: TGetPathsDTO) => { + const paths = await getPaths({ projectId, environment, currentPath }); + + const { permission } = await permissionService.getProjectPermission( + auth.actor, + auth.actorId, + projectId, + auth.actorAuthMethod, + auth.actorOrgId + ); + + const allowedPaths = paths.filter((p) => + // if its service token allow full access over imported one + auth.actor === ActorType.SERVICE + ? true + : permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.Secrets, { + environment, + secretPath: p + }) + ) + ); + + return allowedPaths; + }; }; type TInterpolateSecretArg = { @@ -275,7 +320,10 @@ export const interpolateSecrets = ({ projectId, secretEncKey, secretDAL, folderD return expandSecrets; }; -export const decryptSecretRaw = (secret: TSecrets & { workspace: string; environment: string }, key: string) => { +export const decryptSecretRaw = ( + secret: TSecrets & { workspace: string; environment: string; secretPath?: string }, + key: string +) => { const secretKey = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secret.secretKeyCiphertext, iv: secret.secretKeyIV, @@ -303,6 +351,7 @@ export const decryptSecretRaw = (secret: TSecrets & { workspace: string; environ return { secretKey, + secretPath: secret.secretPath, workspace: secret.workspace, environment: secret.environment, secretValue, diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index 6b71f7988..57ef22c56 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -1,3 +1,5 @@ +/* eslint-disable no-unreachable-loop */ +/* eslint-disable no-await-in-loop */ import { ForbiddenError, subject } from "@casl/ability"; import { SecretEncryptionAlgo, SecretKeyEncoding, SecretsSchema, SecretType } from "@app/db/schemas"; @@ -437,51 +439,98 @@ export const secretServiceFactory = ({ actor, actorOrgId, actorAuthMethod, - includeImports + includeImports, + deep }: TGetSecretsDTO) => { - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - projectId, - actorAuthMethod, - actorOrgId - ); - ForbiddenError.from(permission).throwUnlessCan( - ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { environment, secretPath: path }) - ); + const importsArray: Awaited> = []; + const secretsArray: (Awaited>[number] & { + secretPath: string; + environment: string; + workspace: string; + })[] = []; - const folder = await folderDAL.findBySecretPath(projectId, environment, path); - if (!folder) return { secrets: [], imports: [] }; - const folderId = folder.id; + let paths = [path]; - const secrets = await secretDAL.findByFolderId(folderId, actorId); + if (deep) { + const getPaths = recursivelyGetSecretPaths({ + permissionService, + folderDAL, + projectEnvDAL + }); + + const deepPaths = await getPaths({ + projectId, + environment, + currentPath: path, + auth: { + actor, + actorId, + actorAuthMethod, + actorOrgId + } + }); + + paths = deepPaths.length === 0 ? paths : deepPaths; + } + + for (const currentPath of paths) { + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.Secrets, { environment, secretPath: currentPath }) + ); + + const folder = await folderDAL.findBySecretPath(projectId, environment, currentPath); + if (!folder) return { secrets: [], imports: [] }; + const folderId = folder.id; + + const secrets = await secretDAL.findByFolderId(folderId, actorId); + if (includeImports) { + const secretImports = await secretImportDAL.find({ folderId }); + const allowedImports = secretImports.filter(({ importEnv, importPath }) => + // if its service token allow full access over imported one + actor === ActorType.SERVICE + ? true + : permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.Secrets, { + environment: importEnv.slug, + secretPath: importPath + }) + ) + ); + const importedSecrets = await fnSecretsFromImports({ + allowedImports, + secretDAL, + folderDAL + }); + + secretsArray.push( + ...secrets.map((secret) => ({ ...secret, secretPath: currentPath, workspace: projectId, environment })) + ); + importsArray.push(...importedSecrets); + } + secretsArray.push( + ...secrets.map((secret) => ({ ...secret, secretPath: currentPath, workspace: projectId, environment })) + ); + } if (includeImports) { - const secretImports = await secretImportDAL.find({ folderId }); - const allowedImports = secretImports.filter(({ importEnv, importPath }) => - // if its service token allow full access over imported one - actor === ActorType.SERVICE - ? true - : permission.can( - ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { - environment: importEnv.slug, - secretPath: importPath - }) - ) - ); - const importedSecrets = await fnSecretsFromImports({ - allowedImports, - secretDAL, - folderDAL - }); return { - secrets: secrets.map((el) => ({ ...el, workspace: projectId, environment })), - imports: importedSecrets + secrets: secretsArray, + imports: importsArray }; } - return { secrets: secrets.map((el) => ({ ...el, workspace: projectId, environment })) }; + + return { + secrets: secretsArray + }; }; const getSecretByName = async ({ @@ -802,70 +851,32 @@ export const secretServiceFactory = ({ actorAuthMethod, environment, includeImports, - recursive + deep }: TGetSecretsRawDTO) => { const botKey = await projectBotService.getBotKey(projectId); if (!botKey) throw new BadRequestError({ message: "Project bot not found", name: "bot_not_found_error" }); - let secrets: Awaited>["secrets"]; - let imports: Awaited>["imports"]; - - if (recursive) { - const getPaths = recursivelyGetSecretPaths({ - permissionService, - folderDAL, - projectEnvDAL - }); - - const paths = await getPaths(projectId, environment, path); - - const result = await Promise.all( - paths.map(async (currentPath) => { - const secs = await getSecrets({ - actorId, - projectId, - environment, - actor, - actorOrgId, - actorAuthMethod, - path: currentPath, - includeImports - }); - - return { - secrets: { - ...secs.secrets, - secretPath: currentPath - }, - imports: secs.imports - }; - }) - ); - - secrets = result.flatMap((el) => el.secrets); - imports = result.flatMap((el) => el.imports || []); - } else { - const result = await getSecrets({ - actorId, - projectId, - environment, - actor, - actorOrgId, - actorAuthMethod, - path, - includeImports - }); - - secrets = result.secrets; - imports = result.imports; - } + const { secrets, imports } = await getSecrets({ + actorId, + projectId, + environment, + actor, + actorOrgId, + actorAuthMethod, + path, + includeImports, + deep + }); return { secrets: secrets.map((el) => decryptSecretRaw(el, botKey)), imports: (imports || [])?.map(({ secrets: importedSecrets, ...el }) => ({ ...el, secrets: importedSecrets.map((sec) => - decryptSecretRaw({ ...sec, environment: el.environment, workspace: projectId }, botKey) + decryptSecretRaw( + { ...sec, environment: el.environment, workspace: projectId, secretPath: el.secretPath }, + botKey + ) ) })) }; From 46a638cc6348183e06128da366c3ab3751d8e4a9 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:12:40 +0100 Subject: [PATCH 05/61] FIx: Rename parameter from recursive to deep --- backend/src/services/secret/secret-types.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/services/secret/secret-types.ts b/backend/src/services/secret/secret-types.ts index c6cacb255..33e46b67f 100644 --- a/backend/src/services/secret/secret-types.ts +++ b/backend/src/services/secret/secret-types.ts @@ -74,6 +74,7 @@ export type TGetSecretsDTO = { path: string; environment: string; includeImports?: boolean; + deep?: boolean; } & TProjectPermission; export type TGetASecretDTO = { @@ -140,7 +141,7 @@ export type TGetSecretsRawDTO = { path: string; environment: string; includeImports?: boolean; - recursive?: boolean; + deep?: boolean; } & TProjectPermission; export type TGetASecretRawDTO = { From 88549f403042195e955cd4f86221b09bb50d1c4c Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:13:05 +0100 Subject: [PATCH 06/61] Feat: Deep search support --- cli/packages/api/api.go | 4 ++++ cli/packages/api/model.go | 1 + cli/packages/cmd/agent.go | 2 +- cli/packages/cmd/run.go | 8 +++++++- cli/packages/cmd/secrets.go | 17 +++++++++++++++-- cli/packages/models/cli.go | 1 + cli/packages/util/secrets.go | 15 +++++++++------ 7 files changed, 38 insertions(+), 10 deletions(-) diff --git a/cli/packages/api/api.go b/cli/packages/api/api.go index 38d82a0a5..38af4630e 100644 --- a/cli/packages/api/api.go +++ b/cli/packages/api/api.go @@ -277,6 +277,10 @@ func CallGetSecretsV3(httpClient *resty.Client, request GetEncryptedSecretsV3Req SetQueryParam("environment", request.Environment). SetQueryParam("workspaceId", request.WorkspaceId) + if request.DeepSearch { + httpRequest.SetQueryParam("deep", "true") + } + if request.IncludeImport { httpRequest.SetQueryParam("include_imports", "true") } diff --git a/cli/packages/api/model.go b/cli/packages/api/model.go index b49cb1581..1b91c8b64 100644 --- a/cli/packages/api/model.go +++ b/cli/packages/api/model.go @@ -291,6 +291,7 @@ type GetEncryptedSecretsV3Request struct { WorkspaceId string `json:"workspaceId"` SecretPath string `json:"secretPath"` IncludeImport bool `json:"include_imports"` + DeepSearch bool `json:"deep"` } type GetFoldersV1Request struct { diff --git a/cli/packages/cmd/agent.go b/cli/packages/cmd/agent.go index ce3f7a8b0..80f321396 100644 --- a/cli/packages/cmd/agent.go +++ b/cli/packages/cmd/agent.go @@ -332,7 +332,7 @@ func ParseAgentConfig(configFile []byte) (*Config, error) { func secretTemplateFunction(accessToken string, existingEtag string, currentEtag *string) func(string, string, string) ([]models.SingleEnvironmentVariable, error) { return func(projectID, envSlug, secretPath string) ([]models.SingleEnvironmentVariable, error) { - res, err := util.GetPlainTextSecretsViaMachineIdentity(accessToken, projectID, envSlug, secretPath, false) + res, err := util.GetPlainTextSecretsViaMachineIdentity(accessToken, projectID, envSlug, secretPath, false, false) if err != nil { return nil, err } diff --git a/cli/packages/cmd/run.go b/cli/packages/cmd/run.go index d008af1ec..f6e675096 100644 --- a/cli/packages/cmd/run.go +++ b/cli/packages/cmd/run.go @@ -98,7 +98,12 @@ var runCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports}, projectConfigDir) + deepSearch, err := cmd.Flags().GetBool("deep") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports, DeepSearch: deepSearch}, projectConfigDir) if err != nil { util.HandleError(err, "Could not fetch secrets", "If you are using a service token to fetch secrets, please ensure it is valid") @@ -202,6 +207,7 @@ func init() { runCmd.Flags().StringP("env", "e", "dev", "Set the environment (dev, prod, etc.) from which your secrets should be pulled from") runCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets") runCmd.Flags().Bool("include-imports", true, "Import linked secrets ") + runCmd.Flags().Bool("deep", false, "Fetch secrets from all sub-folders") runCmd.Flags().Bool("secret-overriding", true, "Prioritizes personal secrets, if any, with the same name over shared secrets") runCmd.Flags().StringP("command", "c", "", "chained commands to execute (e.g. \"npm install && npm run dev; echo ...\")") runCmd.Flags().StringP("tags", "t", "", "filter secrets by tag slugs ") diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index cf9c89b47..1db565b76 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -63,6 +63,13 @@ var secretsCmd = &cobra.Command{ util.HandleError(err) } + deepSearch, err := cmd.Flags().GetBool("deep") + if err != nil { + util.HandleError(err) + } + + fmt.Printf("Is deep search: %v\n", deepSearch) + tagSlugs, err := cmd.Flags().GetString("tags") if err != nil { util.HandleError(err, "Unable to parse flag") @@ -73,7 +80,7 @@ var secretsCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports}, "") + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: includeImports, DeepSearch: deepSearch}, "") if err != nil { util.HandleError(err) } @@ -413,12 +420,17 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse path flag") } + deepSearch, err := cmd.Flags().GetBool("deep") + if err != nil { + util.HandleError(err, "Unable to parse deep flag") + } + showOnlyValue, err := cmd.Flags().GetBool("raw-value") if err != nil { util.HandleError(err, "Unable to parse path flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: true}, "") + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, SecretsPath: secretsPath, IncludeImport: true, DeepSearch: deepSearch}, "") if err != nil { util.HandleError(err, "To fetch all secrets") } @@ -727,6 +739,7 @@ func init() { secretsCmd.PersistentFlags().String("env", "dev", "Used to select the environment name on which actions should be taken on") secretsCmd.Flags().Bool("expand", true, "Parse shell parameter expansions in your secrets") secretsCmd.Flags().Bool("include-imports", true, "Imported linked secrets ") + secretsCmd.Flags().Bool("deep", false, "Fetch secrets from all sub-folders") secretsCmd.PersistentFlags().StringP("tags", "t", "", "filter secrets by tag slugs") secretsCmd.Flags().String("path", "/", "get secrets within a folder path") rootCmd.AddCommand(secretsCmd) diff --git a/cli/packages/models/cli.go b/cli/packages/models/cli.go index 4a7dc782a..69319e2b2 100644 --- a/cli/packages/models/cli.go +++ b/cli/packages/models/cli.go @@ -93,6 +93,7 @@ type GetAllSecretsParameters struct { WorkspaceId string SecretsPath string IncludeImport bool + DeepSearch bool } type GetAllFoldersParameters struct { diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 6f56bc84a..89d094f43 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -17,7 +17,7 @@ import ( "github.com/rs/zerolog/log" ) -func GetPlainTextSecretsViaServiceToken(fullServiceToken string, environment string, secretPath string, includeImports bool) ([]models.SingleEnvironmentVariable, api.GetServiceTokenDetailsResponse, error) { +func GetPlainTextSecretsViaServiceToken(fullServiceToken string, environment string, secretPath string, includeImports bool, deepSearch bool) ([]models.SingleEnvironmentVariable, api.GetServiceTokenDetailsResponse, error) { serviceTokenParts := strings.SplitN(fullServiceToken, ".", 4) if len(serviceTokenParts) < 4 { return nil, api.GetServiceTokenDetailsResponse{}, fmt.Errorf("invalid service token entered. Please double check your service token and try again") @@ -49,6 +49,7 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string, environment str Environment: environment, SecretPath: secretPath, IncludeImport: includeImports, + DeepSearch: deepSearch, }) if err != nil { @@ -80,7 +81,7 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string, environment str return plainTextSecrets, serviceTokenDetails, nil } -func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, workspaceId string, environmentName string, tagSlugs string, secretsPath string, includeImports bool) ([]models.SingleEnvironmentVariable, error) { +func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, workspaceId string, environmentName string, tagSlugs string, secretsPath string, includeImports bool, deepSearch bool) ([]models.SingleEnvironmentVariable, error) { httpClient := resty.New() httpClient.SetAuthToken(JTWToken). SetHeader("Accept", "application/json") @@ -125,6 +126,7 @@ func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, work WorkspaceId: workspaceId, Environment: environmentName, IncludeImport: includeImports, + DeepSearch: deepSearch, // TagSlugs: tagSlugs, } @@ -152,7 +154,7 @@ func GetPlainTextSecretsViaJTW(JTWToken string, receiversPrivateKey string, work return plainTextSecrets, nil } -func GetPlainTextSecretsViaMachineIdentity(accessToken string, workspaceId string, environmentName string, secretsPath string, includeImports bool) (models.PlaintextSecretResult, error) { +func GetPlainTextSecretsViaMachineIdentity(accessToken string, workspaceId string, environmentName string, secretsPath string, includeImports bool, deepSearch bool) (models.PlaintextSecretResult, error) { httpClient := resty.New() httpClient.SetAuthToken(accessToken). SetHeader("Accept", "application/json") @@ -161,6 +163,7 @@ func GetPlainTextSecretsViaMachineIdentity(accessToken string, workspaceId strin WorkspaceId: workspaceId, Environment: environmentName, IncludeImport: includeImports, + DeepSearch: deepSearch, // TagSlugs: tagSlugs, } @@ -329,7 +332,7 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters, projectCo } secretsToReturn, errorToReturn = GetPlainTextSecretsViaJTW(loggedInUserDetails.UserCredentials.JTWToken, loggedInUserDetails.UserCredentials.PrivateKey, infisicalDotJson.WorkspaceId, - params.Environment, params.TagSlugs, params.SecretsPath, params.IncludeImport) + params.Environment, params.TagSlugs, params.SecretsPath, params.IncludeImport, params.DeepSearch) log.Debug().Msgf("GetAllEnvironmentVariables: Trying to fetch secrets JTW token [err=%s]", errorToReturn) backupSecretsEncryptionKey := []byte(loggedInUserDetails.UserCredentials.PrivateKey)[0:32] @@ -350,10 +353,10 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters, projectCo } else { if params.InfisicalToken != "" { log.Debug().Msg("Trying to fetch secrets using service token") - secretsToReturn, _, errorToReturn = GetPlainTextSecretsViaServiceToken(params.InfisicalToken, params.Environment, params.SecretsPath, params.IncludeImport) + secretsToReturn, _, errorToReturn = GetPlainTextSecretsViaServiceToken(params.InfisicalToken, params.Environment, params.SecretsPath, params.IncludeImport, params.DeepSearch) } else if params.UniversalAuthAccessToken != "" { log.Debug().Msg("Trying to fetch secrets using universal auth") - res, err := GetPlainTextSecretsViaMachineIdentity(params.UniversalAuthAccessToken, params.WorkspaceId, params.Environment, params.SecretsPath, params.IncludeImport) + res, err := GetPlainTextSecretsViaMachineIdentity(params.UniversalAuthAccessToken, params.WorkspaceId, params.Environment, params.SecretsPath, params.IncludeImport, params.DeepSearch) errorToReturn = err secretsToReturn = res.Secrets From 3befd90723a7212e83d359a5d4e115b4da0ad242 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Sun, 24 Mar 2024 17:10:22 +0100 Subject: [PATCH 07/61] Fix: Refactor to in-memory approach --- backend/src/services/secret/secret-fns.ts | 117 ++++++++++++---------- 1 file changed, 62 insertions(+), 55 deletions(-) diff --git a/backend/src/services/secret/secret-fns.ts b/backend/src/services/secret/secret-fns.ts index 961f3fef6..3c7c9680c 100644 --- a/backend/src/services/secret/secret-fns.ts +++ b/backend/src/services/secret/secret-fns.ts @@ -8,6 +8,7 @@ import { SecretType, TableName, TSecretBlindIndexes, + TSecretFolders, TSecrets } from "@app/db/schemas"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; @@ -20,7 +21,6 @@ import { } from "@app/lib/crypto"; import { BadRequestError } from "@app/lib/errors"; import { groupBy, unique } from "@app/lib/fn"; -import { logger } from "@app/lib/logger"; import { ActorAuthMethod, ActorType } from "../auth/auth-type"; import { getBotKeyFnFactory } from "../project-bot/project-bot-fns"; @@ -53,8 +53,8 @@ export const generateSecretBlindIndexBySalt = async (secretName: string, secretB type TRecursivelyFetchSecretsFromFoldersArg = { permissionService: Pick; - projectEnvDAL: Pick; folderDAL: Pick; + projectEnvDAL: Pick; }; type TGetPathsDTO = { @@ -70,65 +70,73 @@ type TGetPathsDTO = { }; }; +// Introduce a new interface for mapping parent IDs to their children +interface FolderMap { + [parentId: string]: TSecretFolders[]; +} + export const recursivelyGetSecretPaths = ({ folderDAL, projectEnvDAL, permissionService }: TRecursivelyFetchSecretsFromFoldersArg) => { - const getPaths = async ({ projectId, environment, currentPath }: Omit) => { - let secretPaths: string[] = []; + const buildHierarchy = (folders: TSecretFolders[]): FolderMap => { + const map: FolderMap = {}; + map.null = []; // Initialize mapping for root directory - // Get secrets in the current folder. - try { - const folder = await folderDAL.findBySecretPath(projectId, environment, currentPath); - - if (!folder) { - throw new Error(`Base directory '${currentPath}' not found.`); + folders.forEach((folder) => { + const parentId = folder.parentId || "null"; + if (!map[parentId]) { + map[parentId] = []; } + map[parentId].push(folder); + }); - secretPaths.push(currentPath); - } catch (error) { - logger.error(error, "Error fetching secrets from base directory"); - throw error; - } + return map; + }; - // List all subfolders in the current folder. - try { - const env = await projectEnvDAL.findOne({ projectId, slug: environment }); - const parentFolder = await folderDAL.findBySecretPath(projectId, environment, currentPath); + const generatePaths = (map: FolderMap, parentId: string = "null", basePath: string = ""): string[] => { + const children = map[parentId || "null"] || []; + let paths: string[] = []; - if (!env) { - throw new Error(`Environment with not found`); - } + children.forEach((child) => { + // Determine if this is the root folder of the environment. If no parentId is present and the name is root, it's the root folder + const isRootFolder = child.name === "root" && !child.parentId; - if (!parentFolder) { - throw new Error(`Parent folder not found`); - } + // Form the current path based on the base path and the current child + // eslint-disable-next-line no-nested-ternary + const currPath = basePath === "" ? (isRootFolder ? "/" : `/${child.name}`) : `${basePath}/${child.name}`; - const folders = await folderDAL.find({ envId: env.id, parentId: parentFolder.id }); + paths.push(currPath); // Add the current path - // Use Promise.all to handle recursive calls concurrently for efficiency. - const secretsFromSubFolders = await Promise.all( - folders.map(async (folder) => { - // Ensure the path is correctly formatted for the next level. - const subFolderPath = `${currentPath}${currentPath !== "/" ? "/" : ""}${folder.name}`; + // Recursively generate paths for children, passing down the formatted pathh + const childPaths = generatePaths(map, child.id, currPath); + paths = paths.concat(childPaths); + }); - return getPaths({ projectId, environment, currentPath: subFolderPath }); - }) - ); - - // Flatten the array of arrays and concatenate with the current secrets array. - secretPaths = secretPaths.concat(...secretsFromSubFolders); - } catch (error) { - logger.error(error, "Error fetching secrets from subdirectories"); - throw error; - } - - return secretPaths; + return paths; }; return async ({ projectId, environment, currentPath, auth }: TGetPathsDTO) => { - const paths = await getPaths({ projectId, environment, currentPath }); + const env = await projectEnvDAL.findOne({ + projectId, + slug: environment + }); + + if (!env) { + throw new Error(`'${environment}' environment not found in project with ID ${projectId}`); + } + + // Fetch all folders in env once with a single query + const folders = await folderDAL.find({ + envId: env.id + }); + + // Build the folder hierarchy map + const folderMap = buildHierarchy(folders); + + // Generate the paths paths and normalize the root path toe / + const paths = generatePaths(folderMap).map((p) => (p === "/" ? p : p.substring(1))); const { permission } = await permissionService.getProjectPermission( auth.actor, @@ -138,17 +146,16 @@ export const recursivelyGetSecretPaths = ({ auth.actorOrgId ); - const allowedPaths = paths.filter((p) => - // if its service token allow full access over imported one - auth.actor === ActorType.SERVICE - ? true - : permission.can( - ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { - environment, - secretPath: p - }) - ) + // Filter out paths that the user does not have permission to access, and paths that are not in the current path + const allowedPaths = paths.filter( + (p) => + permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.Secrets, { + environment, + secretPath: p + }) + ) && p.startsWith(currentPath === "/" ? "" : currentPath) ); return allowedPaths; From 1e1b5d655ec73659bd73a251d0b782e4fb90707a Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:15:29 +0100 Subject: [PATCH 08/61] Fix: Refactored secret fetching to be more performant --- backend/src/services/secret/secret-service.ts | 108 +++++++++--------- 1 file changed, 53 insertions(+), 55 deletions(-) diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index 57ef22c56..0b2d6262e 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -67,7 +67,7 @@ type TSecretServiceFactoryDep = { snapshotService: Pick; secretQueueService: Pick; projectBotService: Pick; - secretImportDAL: Pick; + secretImportDAL: Pick; secretVersionTagDAL: Pick; }; @@ -442,14 +442,15 @@ export const secretServiceFactory = ({ includeImports, deep }: TGetSecretsDTO) => { - const importsArray: Awaited> = []; - const secretsArray: (Awaited>[number] & { - secretPath: string; - environment: string; - workspace: string; - })[] = []; + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); - let paths = [path]; + let paths: { folderId: string; path: string }[] = []; if (deep) { const getPaths = recursivelyGetSecretPaths({ @@ -471,65 +472,62 @@ export const secretServiceFactory = ({ }); paths = deepPaths.length === 0 ? paths : deepPaths; - } + } else { + const folder = await folderDAL.findBySecretPath(projectId, environment, path); + if (!folder) return { secrets: [], imports: [] }; + paths = [{ folderId: folder.id, path }]; - for (const currentPath of paths) { - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - projectId, - actorAuthMethod, - actorOrgId - ); ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { environment, secretPath: currentPath }) - ); - - const folder = await folderDAL.findBySecretPath(projectId, environment, currentPath); - if (!folder) return { secrets: [], imports: [] }; - const folderId = folder.id; - - const secrets = await secretDAL.findByFolderId(folderId, actorId); - if (includeImports) { - const secretImports = await secretImportDAL.find({ folderId }); - const allowedImports = secretImports.filter(({ importEnv, importPath }) => - // if its service token allow full access over imported one - actor === ActorType.SERVICE - ? true - : permission.can( - ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { - environment: importEnv.slug, - secretPath: importPath - }) - ) - ); - const importedSecrets = await fnSecretsFromImports({ - allowedImports, - secretDAL, - folderDAL - }); - - secretsArray.push( - ...secrets.map((secret) => ({ ...secret, secretPath: currentPath, workspace: projectId, environment })) - ); - importsArray.push(...importedSecrets); - } - secretsArray.push( - ...secrets.map((secret) => ({ ...secret, secretPath: currentPath, workspace: projectId, environment })) + subject(ProjectPermissionSub.Secrets, { environment, secretPath: folder.path }) ); } + const groupedPaths = groupBy(paths, (p) => p.folderId); + + const secrets = await secretDAL.findByFolderIds( + paths.map((p) => p.folderId), + actorId + ); + if (includeImports) { + const secretImports = await secretImportDAL.findByFolderIds(paths.map((p) => p.folderId)); + const allowedImports = secretImports.filter(({ importEnv, importPath }) => + // if its service token allow full access over imported one + actor === ActorType.SERVICE + ? true + : permission.can( + ProjectPermissionActions.Read, + subject(ProjectPermissionSub.Secrets, { + environment: importEnv.slug, + secretPath: importPath + }) + ) + ); + const importedSecrets = await fnSecretsFromImports({ + allowedImports, + secretDAL, + folderDAL + }); + return { - secrets: secretsArray, - imports: importsArray + secrets: secrets.map((secret) => ({ + ...secret, + workspace: projectId, + environment, + secretPath: groupedPaths[secret.folderId][0].path + })), + imports: importedSecrets }; } return { - secrets: secretsArray + secrets: secrets.map((secret) => ({ + ...secret, + workspace: projectId, + environment, + secretPath: groupedPaths[secret.folderId][0].path + })) }; }; From 50082e192cd56c203a0597256c664bc7e467b4c6 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:26:30 +0100 Subject: [PATCH 09/61] Feat: Recursively get all secrets, findByFolderIds DLA --- .../secret-import/secret-import-dal.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/src/services/secret-import/secret-import-dal.ts b/backend/src/services/secret-import/secret-import-dal.ts index f9c6f1be7..cbc8936e1 100644 --- a/backend/src/services/secret-import/secret-import-dal.ts +++ b/backend/src/services/secret-import/secret-import-dal.ts @@ -70,9 +70,31 @@ export const secretImportDALFactory = (db: TDbClient) => { } }; + const findByFolderIds = async (folderIds: string[], tx?: Knex) => { + try { + const docs = await (tx || db)(TableName.SecretImport) + .whereIn("folderId", folderIds) + .join(TableName.Environment, `${TableName.SecretImport}.importEnv`, `${TableName.Environment}.id`) + .select( + db.ref("*").withSchema(TableName.SecretImport) as unknown as keyof TSecretImports, + db.ref("slug").withSchema(TableName.Environment), + db.ref("name").withSchema(TableName.Environment), + db.ref("id").withSchema(TableName.Environment).as("envId") + ) + .orderBy("position", "asc"); + return docs.map(({ envId, slug, name, ...el }) => ({ + ...el, + importEnv: { id: envId, slug, name } + })); + } catch (error) { + throw new DatabaseError({ error, name: "Find secret imports" }); + } + }; + return { ...secretImportOrm, find, + findByFolderIds, findLastImportPosition, updateAllPosition }; From 812fe5cf313baa0f0361fbbd036e05ed61481db7 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:26:55 +0100 Subject: [PATCH 10/61] Feat: Recursively get all secrets --- backend/src/services/secret/secret-dal.ts | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/backend/src/services/secret/secret-dal.ts b/backend/src/services/secret/secret-dal.ts index 504174765..8a5970b83 100644 --- a/backend/src/services/secret/secret-dal.ts +++ b/backend/src/services/secret/secret-dal.ts @@ -171,6 +171,50 @@ export const secretDALFactory = (db: TDbClient) => { } }; + const findByFolderIds = async (folderIds: string[], userId?: string, tx?: Knex) => { + try { + // check if not uui then userId id is null (corner case because service token's ID is not UUI in effort to keep backwards compatibility from mongo) + if (userId && !uuidValidate(userId)) { + // eslint-disable-next-line no-param-reassign + userId = undefined; + } + + const secs = await (tx || db)(TableName.Secret) + .whereIn("folderId", folderIds) + .where((bd) => { + void bd.whereNull("userId").orWhere({ userId: userId || null }); + }) + .leftJoin(TableName.JnSecretTag, `${TableName.Secret}.id`, `${TableName.JnSecretTag}.${TableName.Secret}Id`) + .leftJoin(TableName.SecretTag, `${TableName.JnSecretTag}.${TableName.SecretTag}Id`, `${TableName.SecretTag}.id`) + .select(selectAllTableCols(TableName.Secret)) + .select(db.ref("id").withSchema(TableName.SecretTag).as("tagId")) + .select(db.ref("color").withSchema(TableName.SecretTag).as("tagColor")) + .select(db.ref("slug").withSchema(TableName.SecretTag).as("tagSlug")) + .select(db.ref("name").withSchema(TableName.SecretTag).as("tagName")) + .orderBy("id", "asc"); + const data = sqlNestRelationships({ + data: secs, + key: "id", + parentMapper: (el) => ({ _id: el.id, ...SecretsSchema.parse(el) }), + childrenMapper: [ + { + key: "tagId", + label: "tags" as const, + mapper: ({ tagId: id, tagColor: color, tagSlug: slug, tagName: name }) => ({ + id, + color, + slug, + name + }) + } + ] + }); + return data; + } catch (error) { + throw new DatabaseError({ error, name: "get all secret" }); + } + }; + const findByBlindIndexes = async ( folderId: string, blindIndexes: Array<{ blindIndex: string; type: SecretType }>, @@ -207,6 +251,7 @@ export const secretDALFactory = (db: TDbClient) => { bulkUpdateNoVersionIncrement, getSecretTags, findByFolderId, + findByFolderIds, findByBlindIndexes }; }; From e5136c9ef5cdef2c7e1edf598f13006cb9eaede0 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:27:11 +0100 Subject: [PATCH 11/61] Feat: Recursively get all secrets --- backend/src/services/secret/secret-fns.ts | 33 ++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/backend/src/services/secret/secret-fns.ts b/backend/src/services/secret/secret-fns.ts index 3c7c9680c..e7e7374d0 100644 --- a/backend/src/services/secret/secret-fns.ts +++ b/backend/src/services/secret/secret-fns.ts @@ -95,9 +95,13 @@ export const recursivelyGetSecretPaths = ({ return map; }; - const generatePaths = (map: FolderMap, parentId: string = "null", basePath: string = ""): string[] => { + const generatePaths = ( + map: FolderMap, + parentId: string = "null", + basePath: string = "" + ): { path: string; folderId: string }[] => { const children = map[parentId || "null"] || []; - let paths: string[] = []; + let paths: { path: string; folderId: string }[] = []; children.forEach((child) => { // Determine if this is the root folder of the environment. If no parentId is present and the name is root, it's the root folder @@ -107,11 +111,19 @@ export const recursivelyGetSecretPaths = ({ // eslint-disable-next-line no-nested-ternary const currPath = basePath === "" ? (isRootFolder ? "/" : `/${child.name}`) : `${basePath}/${child.name}`; - paths.push(currPath); // Add the current path + paths.push({ + path: currPath, + folderId: child.id + }); // Add the current path // Recursively generate paths for children, passing down the formatted pathh const childPaths = generatePaths(map, child.id, currPath); - paths = paths.concat(childPaths); + paths = paths.concat( + childPaths.map((p) => ({ + path: p.path, + folderId: p.folderId + })) + ); }); return paths; @@ -135,8 +147,11 @@ export const recursivelyGetSecretPaths = ({ // Build the folder hierarchy map const folderMap = buildHierarchy(folders); - // Generate the paths paths and normalize the root path toe / - const paths = generatePaths(folderMap).map((p) => (p === "/" ? p : p.substring(1))); + // Generate the paths paths and normalize the root path to / + const paths = generatePaths(folderMap).map((p) => ({ + path: p.path === "/" ? p.path : p.path.substring(1), + folderId: p.folderId + })); const { permission } = await permissionService.getProjectPermission( auth.actor, @@ -148,14 +163,14 @@ export const recursivelyGetSecretPaths = ({ // Filter out paths that the user does not have permission to access, and paths that are not in the current path const allowedPaths = paths.filter( - (p) => + (folder) => permission.can( ProjectPermissionActions.Read, subject(ProjectPermissionSub.Secrets, { environment, - secretPath: p + secretPath: folder.path }) - ) && p.startsWith(currentPath === "/" ? "" : currentPath) + ) && folder.path.startsWith(currentPath === "/" ? "" : currentPath) ); return allowedPaths; From 2e8680c5d403ed68f33648ecde7b6d918ad42b14 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:30:56 +0100 Subject: [PATCH 12/61] Update secret-service.ts --- backend/src/services/secret/secret-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index 0b2d6262e..f030ecee1 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -471,7 +471,7 @@ export const secretServiceFactory = ({ } }); - paths = deepPaths.length === 0 ? paths : deepPaths; + if (!deepPaths) return { secrets: [], imports: [] }; } else { const folder = await folderDAL.findBySecretPath(projectId, environment, path); if (!folder) return { secrets: [], imports: [] }; From 4f05e4ce932e6b188b3dbc3305ff5b9dbf594b4d Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Tue, 26 Mar 2024 19:41:48 +0100 Subject: [PATCH 13/61] Fix test case --- backend/src/services/secret/secret-service.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index f030ecee1..7c002de64 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -473,14 +473,15 @@ export const secretServiceFactory = ({ if (!deepPaths) return { secrets: [], imports: [] }; } else { - const folder = await folderDAL.findBySecretPath(projectId, environment, path); - if (!folder) return { secrets: [], imports: [] }; - paths = [{ folderId: folder.id, path }]; - ForbiddenError.from(permission).throwUnlessCan( ProjectPermissionActions.Read, - subject(ProjectPermissionSub.Secrets, { environment, secretPath: folder.path }) + subject(ProjectPermissionSub.Secrets, { environment, secretPath: path }) ); + + const folder = await folderDAL.findBySecretPath(projectId, environment, path); + if (!folder) return { secrets: [], imports: [] }; + + paths = [{ folderId: folder.id, path }]; } const groupedPaths = groupBy(paths, (p) => p.folderId); From 84204c3c37847e2f92a8959e4cc4e007aaa2a363 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 15:51:33 +0530 Subject: [PATCH 14/61] feat(server): added new user additional migration and schemas --- backend/src/@types/knex.d.ts | 8 +++++ ...85040_project-user-additional-privilege.ts | 31 +++++++++++++++++ backend/src/db/schemas/index.ts | 1 + backend/src/db/schemas/models.ts | 1 + .../project-user-additional-privilege.ts | 33 +++++++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 backend/src/db/migrations/20240313185040_project-user-additional-privilege.ts create mode 100644 backend/src/db/schemas/project-user-additional-privilege.ts diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index 29d526e52..9b4bfec96 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -92,6 +92,9 @@ import { TProjects, TProjectsInsert, TProjectsUpdate, + TProjectUserAdditionalPrivilege, + TProjectUserAdditionalPrivilegeInsert, + TProjectUserAdditionalPrivilegeUpdate, TProjectUserMembershipRoles, TProjectUserMembershipRolesInsert, TProjectUserMembershipRolesUpdate, @@ -239,6 +242,11 @@ declare module "knex/types/tables" { TProjectUserMembershipRolesUpdate >; [TableName.ProjectRoles]: Knex.CompositeTableType; + [TableName.ProjectUserAdditionalPrivilege]: Knex.CompositeTableType< + TProjectUserAdditionalPrivilege, + TProjectUserAdditionalPrivilegeInsert, + TProjectUserAdditionalPrivilegeUpdate + >; [TableName.ProjectKeys]: Knex.CompositeTableType; [TableName.Secret]: Knex.CompositeTableType; [TableName.SecretBlindIndex]: Knex.CompositeTableType< diff --git a/backend/src/db/migrations/20240313185040_project-user-additional-privilege.ts b/backend/src/db/migrations/20240313185040_project-user-additional-privilege.ts new file mode 100644 index 000000000..0d9d81507 --- /dev/null +++ b/backend/src/db/migrations/20240313185040_project-user-additional-privilege.ts @@ -0,0 +1,31 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; +import { createOnUpdateTrigger, dropOnUpdateTrigger } from "../utils"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasTable(TableName.ProjectUserAdditionalPrivilege))) { + await knex.schema.createTable(TableName.ProjectUserAdditionalPrivilege, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.string("name").notNullable(); + t.string("slug", 60).notNullable(); + t.string("description"); + t.uuid("projectMembershipId").notNullable(); + t.foreign("projectMembershipId").references("id").inTable(TableName.ProjectMembership).onDelete("CASCADE"); + t.boolean("isTemporary").notNullable().defaultTo(false); + t.string("temporaryMode"); + t.string("temporaryRange"); // could be cron or relative time like 1H or 1minute etc + t.datetime("temporaryAccessStartTime"); + t.datetime("temporaryAccessEndTime"); + t.jsonb("permissions").notNullable(); + t.timestamps(true, true, true); + }); + } + + await createOnUpdateTrigger(knex, TableName.ProjectUserAdditionalPrivilege); +} + +export async function down(knex: Knex): Promise { + await dropOnUpdateTrigger(knex, TableName.ProjectUserAdditionalPrivilege); + await knex.schema.dropTableIfExists(TableName.ProjectUserAdditionalPrivilege); +} diff --git a/backend/src/db/schemas/index.ts b/backend/src/db/schemas/index.ts index efa80cfac..96993dc10 100644 --- a/backend/src/db/schemas/index.ts +++ b/backend/src/db/schemas/index.ts @@ -28,6 +28,7 @@ export * from "./project-environments"; export * from "./project-keys"; export * from "./project-memberships"; export * from "./project-roles"; +export * from "./project-user-additional-privilege"; export * from "./project-user-membership-roles"; export * from "./projects"; export * from "./saml-configs"; diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index bda66682e..8af8951fd 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -20,6 +20,7 @@ export enum TableName { Environment = "project_environments", ProjectMembership = "project_memberships", ProjectRoles = "project_roles", + ProjectUserAdditionalPrivilege = "project_user_additional_privilege", ProjectUserMembershipRole = "project_user_membership_roles", ProjectKeys = "project_keys", Secret = "secrets", diff --git a/backend/src/db/schemas/project-user-additional-privilege.ts b/backend/src/db/schemas/project-user-additional-privilege.ts new file mode 100644 index 000000000..c20d83543 --- /dev/null +++ b/backend/src/db/schemas/project-user-additional-privilege.ts @@ -0,0 +1,33 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { TImmutableDBKeys } from "./models"; + +export const ProjectUserAdditionalPrivilegeSchema = z.object({ + id: z.string().uuid(), + name: z.string(), + slug: z.string(), + description: z.string().nullable().optional(), + projectMembershipId: z.string().uuid(), + isTemporary: z.boolean().default(false), + temporaryMode: z.string().nullable().optional(), + temporaryRange: z.string().nullable().optional(), + temporaryAccessStartTime: z.date().nullable().optional(), + temporaryAccessEndTime: z.date().nullable().optional(), + permissions: z.unknown(), + createdAt: z.date(), + updatedAt: z.date() +}); + +export type TProjectUserAdditionalPrivilege = z.infer; +export type TProjectUserAdditionalPrivilegeInsert = Omit< + z.input, + TImmutableDBKeys +>; +export type TProjectUserAdditionalPrivilegeUpdate = Partial< + Omit, TImmutableDBKeys> +>; From a908471e66fb65f51726e2c055fb44b1fdd93526 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 15:53:49 +0530 Subject: [PATCH 15/61] feat(server): completed user additional privilege services --- .../ee/services/permission/permission-dal.ts | 57 +++++- .../services/permission/permission-service.ts | 12 +- .../project-user-additional-privilege-dal.ts | 10 + ...oject-user-additional-privilege-service.ts | 175 ++++++++++++++++++ ...project-user-additional-privilege-types.ts | 44 +++++ 5 files changed, 291 insertions(+), 7 deletions(-) create mode 100644 backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal.ts create mode 100644 backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-service.ts create mode 100644 backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-types.ts diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index fc0a85ac6..dda4bee50 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -56,6 +56,11 @@ export const permissionDALFactory = (db: TDbClient) => { `${TableName.ProjectUserMembershipRole}.customRoleId`, `${TableName.ProjectRoles}.id` ) + .leftJoin( + TableName.ProjectUserAdditionalPrivilege, + `${TableName.ProjectUserAdditionalPrivilege}.projectMembershipId`, + `${TableName.ProjectMembership}.id` + ) .join(TableName.Project, `${TableName.ProjectMembership}.projectId`, `${TableName.Project}.id`) .join(TableName.Organization, `${TableName.Project}.orgId`, `${TableName.Organization}.id`) .where("userId", userId) @@ -69,9 +74,22 @@ export const permissionDALFactory = (db: TDbClient) => { db.ref("updatedAt").withSchema(TableName.ProjectMembership).as("membershipUpdatedAt"), db.ref("authEnforced").withSchema(TableName.Organization).as("orgAuthEnforced"), db.ref("orgId").withSchema(TableName.Project), - db.ref("slug").withSchema(TableName.ProjectRoles).as("customRoleSlug") - ) - .select("permissions"); + db.ref("slug").withSchema(TableName.ProjectRoles).as("customRoleSlug"), + db.ref("permissions").withSchema(TableName.ProjectRoles), + db.ref("id").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApId"), + db.ref("permissions").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApPermissions"), + db.ref("temporaryMode").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApTemporaryMode"), + db.ref("isTemporary").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApIsTemporary"), + db.ref("temporaryRange").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApTemporaryRange"), + db + .ref("temporaryAccessStartTime") + .withSchema(TableName.ProjectUserAdditionalPrivilege) + .as("userApTemporaryAccessStartTime"), + db + .ref("temporaryAccessEndTime") + .withSchema(TableName.ProjectUserAdditionalPrivilege) + .as("userApTemporaryAccessEndTime") + ); const permission = sqlNestRelationships({ data: docs, @@ -102,15 +120,44 @@ export const permissionDALFactory = (db: TDbClient) => { permissions: z.unknown(), customRoleSlug: z.string().optional().nullable() }).parse(data) + }, + { + key: "userApId", + label: "additionalPrivileges" as const, + mapper: ({ + userApId, + userApPermissions, + userApIsTemporary, + userApTemporaryMode, + userApTemporaryRange, + userApTemporaryAccessEndTime, + userApTemporaryAccessStartTime + }) => ({ + id: userApId, + permissions: userApPermissions, + temporaryRange: userApTemporaryRange, + temporaryMode: userApTemporaryMode, + temporaryAccessEndTime: userApTemporaryAccessEndTime, + temporaryAccessStartTime: userApTemporaryAccessStartTime, + isTemporary: userApIsTemporary + }) } ] }); // when introducting cron mode change it here - const activeRoles = permission?.[0]?.roles.filter( + const activeRoles = permission?.[0]?.roles?.filter( ({ isTemporary, temporaryAccessEndTime }) => !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) ); - return permission?.[0] ? { ...permission[0], roles: activeRoles } : undefined; + + const activeAdditionalPrivileges = permission?.[0]?.additionalPrivileges?.filter( + ({ isTemporary, temporaryAccessEndTime }) => + !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) + ); + + return permission?.[0] + ? { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges } + : undefined; } catch (error) { throw new DatabaseError({ error, name: "GetProjectPermission" }); } diff --git a/backend/src/ee/services/permission/permission-service.ts b/backend/src/ee/services/permission/permission-service.ts index d632be3df..8062a1c43 100644 --- a/backend/src/ee/services/permission/permission-service.ts +++ b/backend/src/ee/services/permission/permission-service.ts @@ -198,9 +198,17 @@ export const permissionServiceFactory = ({ validateOrgSAML(authMethod, membership.orgAuthEnforced); + // join two permissions and pass to build the final permission set + const rolePermissions = userProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || []; + const additionalPrivileges = + userProjectPermission.additionalPrivileges?.map(({ permissions }) => ({ + role: ProjectMembershipRole.Custom, + permissions + })) || []; + return { - permission: buildProjectPermission(membership.roles), - membership, + permission: buildProjectPermission(rolePermissions.concat(additionalPrivileges)), + membership: userProjectPermission, hasRole: (role: string) => membership.roles.findIndex(({ role: slug, customRoleSlug }) => role === slug || slug === customRoleSlug) !== -1 }; diff --git a/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal.ts b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal.ts new file mode 100644 index 000000000..6c15d2d5d --- /dev/null +++ b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal.ts @@ -0,0 +1,10 @@ +import { TDbClient } from "@app/db"; +import { TableName } from "@app/db/schemas"; +import { ormify } from "@app/lib/knex"; + +export type TProjectUserAdditionalPrivilegeDALFactory = ReturnType; + +export const projectUserAdditionalPrivilegeDALFactory = (db: TDbClient) => { + const orm = ormify(db, TableName.ProjectUserAdditionalPrivilege); + return orm; +}; diff --git a/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-service.ts b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-service.ts new file mode 100644 index 000000000..e1f3ba823 --- /dev/null +++ b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-service.ts @@ -0,0 +1,175 @@ +import { ForbiddenError } from "@casl/ability"; +import ms from "ms"; + +import { BadRequestError } from "@app/lib/errors"; +import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; + +import { TPermissionServiceFactory } from "../permission/permission-service"; +import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; +import { TProjectUserAdditionalPrivilegeDALFactory } from "./project-user-additional-privilege-dal"; +import { + ProjectUserAdditionalPrivilegeTemporaryMode, + TCreateUserPrivilegeDTO, + TDeleteUserPrivilegeDTO, + TGetUserPrivilegeDetailsDTO, + TUpdateUserPrivilegeDTO +} from "./project-user-additional-privilege-types"; + +type TProjectUserAdditionalPrivilegeServiceFactoryDep = { + projectUserAdditionalPrivilegeDAL: TProjectUserAdditionalPrivilegeDALFactory; + projectMembershipDAL: Pick; + permissionService: Pick; +}; + +export type TProjectUserAdditionalPrivilegeServiceFactory = ReturnType< + typeof projectUserAdditionalPrivilegeServiceFactory +>; + +export const projectUserAdditionalPrivilegeServiceFactory = ({ + projectUserAdditionalPrivilegeDAL, + projectMembershipDAL, + permissionService +}: TProjectUserAdditionalPrivilegeServiceFactoryDep) => { + const create = async ({ + name, + slug, + actor, + actorId, + permissions: customPermission, + actorOrgId, + description, + projectMembershipId, + ...dto + }: TCreateUserPrivilegeDTO) => { + const projectMembership = await projectMembershipDAL.findById(projectMembershipId); + if (!projectMembership) throw new BadRequestError({ message: "Project membership not found" }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Member); + + const existingSlug = await projectUserAdditionalPrivilegeDAL.findOne({ slug, projectMembershipId }); + if (existingSlug) throw new BadRequestError({ message: "Additional privilege of provided slug exist" }); + + if (!dto.isTemporary) { + const additionalPrivilege = await projectUserAdditionalPrivilegeDAL.create({ + projectMembershipId, + slug, + permissions: customPermission, + name, + description + }); + return additionalPrivilege; + } + + const relativeTempAllocatedTimeInMs = ms(dto.temporaryRange); + const additionalPrivilege = await projectUserAdditionalPrivilegeDAL.create({ + projectMembershipId, + slug, + permissions: customPermission, + name, + description, + isTemporary: true, + temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative, + temporaryRange: dto.temporaryRange, + temporaryAccessStartTime: new Date(dto.temporaryAccessStartTime), + temporaryAccessEndTime: new Date(new Date(dto.temporaryAccessStartTime).getTime() + relativeTempAllocatedTimeInMs) + }); + return additionalPrivilege; + }; + + const updateById = async ({ privilegeId, actorOrgId, actor, actorId, ...dto }: TUpdateUserPrivilegeDTO) => { + const userPrivilege = await projectUserAdditionalPrivilegeDAL.findById(privilegeId); + if (!userPrivilege) throw new BadRequestError({ message: "User additional privilege not found" }); + + const projectMembership = await projectMembershipDAL.findById(userPrivilege.projectMembershipId); + if (!projectMembership) throw new BadRequestError({ message: "Project membership not found" }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Member); + + if (dto?.slug) { + const existingSlug = await projectUserAdditionalPrivilegeDAL.findOne({ + slug: dto.slug, + projectMembershipId: projectMembership.id + }); + if (existingSlug && existingSlug.id !== userPrivilege.id) + throw new BadRequestError({ message: "Additional privilege of provided slug exist" }); + } + + const isTemporary = typeof dto?.isTemporary !== "undefined" ? dto.isTemporary : userPrivilege.isTemporary; + if (isTemporary) { + const temporaryAccessStartTime = dto?.temporaryAccessStartTime || userPrivilege?.temporaryAccessStartTime; + const temporaryRange = dto?.temporaryRange || userPrivilege?.temporaryRange; + const additionalPrivilege = await projectUserAdditionalPrivilegeDAL.updateById(userPrivilege.id, { + ...dto, + temporaryAccessStartTime: new Date(temporaryAccessStartTime || ""), + temporaryAccessEndTime: new Date(new Date(temporaryAccessStartTime || "").getTime() + ms(temporaryRange || "")) + }); + return additionalPrivilege; + } + + const additionalPrivilege = await projectUserAdditionalPrivilegeDAL.updateById(userPrivilege.id, { + ...dto, + isTemporary: false, + temporaryAccessStartTime: null, + temporaryAccessEndTime: null, + temporaryRange: null, + temporaryMode: null + }); + return additionalPrivilege; + }; + + const deleteById = async ({ actorId, actor, actorOrgId, privilegeId }: TDeleteUserPrivilegeDTO) => { + const userPrivilege = await projectUserAdditionalPrivilegeDAL.findById(privilegeId); + if (!userPrivilege) throw new BadRequestError({ message: "User additional privilege not found" }); + + const projectMembership = await projectMembershipDAL.findById(userPrivilege.projectMembershipId); + if (!projectMembership) throw new BadRequestError({ message: "Project membership not found" }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Member); + + const deletedPrivilege = await projectUserAdditionalPrivilegeDAL.deleteById(userPrivilege.id); + return deletedPrivilege; + }; + + const getPrivilegeDetailsById = async ({ privilegeId, actorOrgId, actor, actorId }: TGetUserPrivilegeDetailsDTO) => { + const userPrivilege = await projectUserAdditionalPrivilegeDAL.findById(privilegeId); + if (!userPrivilege) throw new BadRequestError({ message: "User additional privilege not found" }); + + const projectMembership = await projectMembershipDAL.findById(userPrivilege.projectMembershipId); + if (!projectMembership) throw new BadRequestError({ message: "Project membership not found" }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Member); + + return userPrivilege; + }; + + return { + create, + updateById, + deleteById, + getPrivilegeDetailsById + }; +}; diff --git a/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-types.ts b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-types.ts new file mode 100644 index 000000000..efc8e81b1 --- /dev/null +++ b/backend/src/ee/services/project-user-additional-privilege/project-user-additional-privilege-types.ts @@ -0,0 +1,44 @@ +import { TProjectPermission } from "@app/lib/types"; + +export enum ProjectUserAdditionalPrivilegeTemporaryMode { + Relative = "relative" +} + +export type TCreateUserPrivilegeDTO = ( + | { + permissions: unknown; + projectMembershipId: string; + name: string; + slug: string; + description?: string; + isTemporary: false; + } + | { + permissions: unknown; + projectMembershipId: string; + name: string; + slug: string; + description?: string; + isTemporary: true; + temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative; + temporaryRange: string; + temporaryAccessStartTime: string; + } +) & + Omit; + +export type TUpdateUserPrivilegeDTO = { privilegeId: string } & Omit & + Partial<{ + permissions: unknown; + name: string; + slug: string; + description?: string; + isTemporary: boolean; + temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative; + temporaryRange: string; + temporaryAccessStartTime: string; + }>; + +export type TDeleteUserPrivilegeDTO = Omit & { privilegeId: string }; + +export type TGetUserPrivilegeDetailsDTO = Omit & { privilegeId: string }; From a5039494cd4ee063d25bd952e81a2a19b654f09f Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 15:54:32 +0530 Subject: [PATCH 16/61] feat(server): completed routes for user additional privilege --- backend/src/@types/fastify.d.ts | 2 + backend/src/ee/routes/v1/index.ts | 7 + .../v1/user-additional-privilege-router.ts | 142 ++++++++++++++++++ backend/src/server/routes/index.ts | 11 +- .../routes/v1/project-membership-router.ts | 14 ++ .../src/server/routes/v1/project-router.ts | 14 ++ .../project-membership-dal.ts | 50 +++++- 7 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 backend/src/ee/routes/v1/user-additional-privilege-router.ts diff --git a/backend/src/@types/fastify.d.ts b/backend/src/@types/fastify.d.ts index 9ed72e782..54e220abf 100644 --- a/backend/src/@types/fastify.d.ts +++ b/backend/src/@types/fastify.d.ts @@ -8,6 +8,7 @@ import { TDynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secr import { TLdapConfigServiceFactory } from "@app/ee/services/ldap-config/ldap-config-service"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; +import { TProjectUserAdditionalPrivilegeServiceFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-service"; import { TSamlConfigServiceFactory } from "@app/ee/services/saml-config/saml-config-service"; import { TScimServiceFactory } from "@app/ee/services/scim/scim-service"; import { TSecretApprovalPolicyServiceFactory } from "@app/ee/services/secret-approval-policy/secret-approval-policy-service"; @@ -121,6 +122,7 @@ declare module "fastify" { telemetry: TTelemetryServiceFactory; dynamicSecret: TDynamicSecretServiceFactory; dynamicSecretLease: TDynamicSecretLeaseServiceFactory; + projectUserAdditionalPrivilege: TProjectUserAdditionalPrivilegeServiceFactory; }; // this is exclusive use for middlewares in which we need to inject data // everywhere else access using service layer diff --git a/backend/src/ee/routes/v1/index.ts b/backend/src/ee/routes/v1/index.ts index b3fafcfdf..0d7b45ded 100644 --- a/backend/src/ee/routes/v1/index.ts +++ b/backend/src/ee/routes/v1/index.ts @@ -15,6 +15,7 @@ import { registerSecretScanningRouter } from "./secret-scanning-router"; import { registerSecretVersionRouter } from "./secret-version-router"; import { registerSnapshotRouter } from "./snapshot-router"; import { registerTrustedIpRouter } from "./trusted-ip-router"; +import { registerUserAdditionalPrivilegeRouter } from "./user-additional-privilege-router"; export const registerV1EERoutes = async (server: FastifyZodProvider) => { // org role starts with organization @@ -51,4 +52,10 @@ export const registerV1EERoutes = async (server: FastifyZodProvider) => { await server.register(registerSecretScanningRouter, { prefix: "/secret-scanning" }); await server.register(registerSecretRotationRouter, { prefix: "/secret-rotations" }); await server.register(registerSecretVersionRouter, { prefix: "/secret" }); + await server.register( + async (privilegeRouter) => { + await privilegeRouter.register(registerUserAdditionalPrivilegeRouter, { prefix: "/users" }); + }, + { prefix: "/additional-privilege" } + ); }; diff --git a/backend/src/ee/routes/v1/user-additional-privilege-router.ts b/backend/src/ee/routes/v1/user-additional-privilege-router.ts new file mode 100644 index 000000000..fe40ee259 --- /dev/null +++ b/backend/src/ee/routes/v1/user-additional-privilege-router.ts @@ -0,0 +1,142 @@ +import ms from "ms"; +import { z } from "zod"; + +import { ProjectUserAdditionalPrivilegeSchema } from "@app/db/schemas"; +import { ProjectUserAdditionalPrivilegeTemporaryMode } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-types"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { AuthMode } from "@app/services/auth/auth-type"; + +export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodProvider) => { + server.route({ + url: "/", + method: "POST", + schema: { + body: z.union([ + z.object({ + projectMembershipId: z.string(), + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.literal(false).default(false) + }), + z.object({ + projectMembershipId: z.string(), + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.literal(true), + temporaryMode: z.nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode), + temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), + temporaryAccessStartTime: z.string().datetime() + }) + ]), + response: { + 200: z.object({ + privilege: ProjectUserAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const privilege = await server.services.projectUserAdditionalPrivilege.create({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + ...req.body, + permissions: JSON.stringify(req.body.permissions) + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "PATCH", + schema: { + params: z.object({ + privilegeId: z.string() + }), + body: z + .object({ + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.boolean(), + temporaryMode: z.nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode), + temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), + temporaryAccessStartTime: z.string().datetime() + }) + .partial(), + response: { + 200: z.object({ + privilege: ProjectUserAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const privilege = await server.services.projectUserAdditionalPrivilege.updateById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + ...req.body, + permissions: req.body.permissions ? JSON.stringify(req.body.permissions) : undefined, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "DELETE", + schema: { + params: z.object({ + privilegeId: z.string() + }), + response: { + 200: z.object({ + privilege: ProjectUserAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const privilege = await server.services.projectUserAdditionalPrivilege.deleteById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "GET", + schema: { + params: z.object({ + privilegeId: z.string() + }), + response: { + 200: z.object({ + privilege: ProjectUserAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const privilege = await server.services.projectUserAdditionalPrivilege.getPrivilegeDetailsById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); +}; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 940c414e8..4599a732b 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -17,6 +17,8 @@ import { licenseDALFactory } from "@app/ee/services/license/license-dal"; import { licenseServiceFactory } from "@app/ee/services/license/license-service"; import { permissionDALFactory } from "@app/ee/services/permission/permission-dal"; import { permissionServiceFactory } from "@app/ee/services/permission/permission-service"; +import { projectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal"; +import { projectUserAdditionalPrivilegeServiceFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-service"; import { samlConfigDALFactory } from "@app/ee/services/saml-config/saml-config-dal"; import { samlConfigServiceFactory } from "@app/ee/services/saml-config/saml-config-service"; import { scimDALFactory } from "@app/ee/services/scim/scim-dal"; @@ -149,6 +151,7 @@ export const registerRoutes = async ( const projectDAL = projectDALFactory(db); const projectMembershipDAL = projectMembershipDALFactory(db); + const projectUserAdditionalPrivilegeDAL = projectUserAdditionalPrivilegeDALFactory(db); const projectUserMembershipRoleDAL = projectUserMembershipRoleDALFactory(db); const projectRoleDAL = projectRoleDALFactory(db); const projectEnvDAL = projectEnvDALFactory(db); @@ -345,6 +348,11 @@ export const registerRoutes = async ( projectRoleDAL, licenseService }); + const projectUserAdditionalPrivilegeService = projectUserAdditionalPrivilegeServiceFactory({ + permissionService, + projectMembershipDAL, + projectUserAdditionalPrivilegeDAL + }); const projectKeyService = projectKeyServiceFactory({ permissionService, projectKeyDAL, @@ -638,7 +646,8 @@ export const registerRoutes = async ( trustedIp: trustedIpService, scim: scimService, secretBlindIndex: secretBlindIndexService, - telemetry: telemetryService + telemetry: telemetryService, + projectUserAdditionalPrivilege: projectUserAdditionalPrivilegeService }); server.decorate("store", { diff --git a/backend/src/server/routes/v1/project-membership-router.ts b/backend/src/server/routes/v1/project-membership-router.ts index 9e2f5bd22..ea0559463 100644 --- a/backend/src/server/routes/v1/project-membership-router.ts +++ b/backend/src/server/routes/v1/project-membership-router.ts @@ -40,6 +40,20 @@ export const registerProjectMembershipRouter = async (server: FastifyZodProvider lastName: true, id: true }).merge(UserEncryptionKeysSchema.pick({ publicKey: true })), + additionalPrivileges: z.array( + z.object({ + id: z.string(), + name: z.string(), + slug: z.string(), + description: z.string().optional().nullable(), + isTemporary: z.boolean(), + temporaryMode: z.string().optional().nullable(), + temporaryRange: z.string().nullable().optional(), + temporaryAccessStartTime: z.date().nullable().optional(), + temporaryAccessEndTime: z.date().nullable().optional(), + createdAt: z.date() + }) + ), roles: z.array( z.object({ id: z.string(), diff --git a/backend/src/server/routes/v1/project-router.ts b/backend/src/server/routes/v1/project-router.ts index 55f1fdda9..95619a510 100644 --- a/backend/src/server/routes/v1/project-router.ts +++ b/backend/src/server/routes/v1/project-router.ts @@ -73,6 +73,20 @@ export const registerProjectRouter = async (server: FastifyZodProvider) => { lastName: true, id: true }).merge(UserEncryptionKeysSchema.pick({ publicKey: true })), + additionalPrivileges: z.array( + z.object({ + id: z.string(), + name: z.string(), + slug: z.string(), + description: z.string().optional().nullable(), + isTemporary: z.boolean(), + temporaryMode: z.string().optional().nullable(), + temporaryRange: z.string().nullable().optional(), + temporaryAccessStartTime: z.date().nullable().optional(), + temporaryAccessEndTime: z.date().nullable().optional(), + createdAt: z.date() + }) + ), roles: z.array( z.object({ id: z.string(), diff --git a/backend/src/services/project-membership/project-membership-dal.ts b/backend/src/services/project-membership/project-membership-dal.ts index 8faab487e..fae6c26ba 100644 --- a/backend/src/services/project-membership/project-membership-dal.ts +++ b/backend/src/services/project-membership/project-membership-dal.ts @@ -29,6 +29,11 @@ export const projectMembershipDALFactory = (db: TDbClient) => { `${TableName.ProjectUserMembershipRole}.customRoleId`, `${TableName.ProjectRoles}.id` ) + .leftJoin( + TableName.ProjectUserAdditionalPrivilege, + `${TableName.ProjectMembership}.id`, + `${TableName.ProjectUserAdditionalPrivilege}.projectMembershipId` + ) .select( db.ref("id").withSchema(TableName.ProjectMembership), db.ref("isGhost").withSchema(TableName.Users), @@ -47,7 +52,23 @@ export const projectMembershipDALFactory = (db: TDbClient) => { db.ref("isTemporary").withSchema(TableName.ProjectUserMembershipRole), db.ref("temporaryRange").withSchema(TableName.ProjectUserMembershipRole), db.ref("temporaryAccessStartTime").withSchema(TableName.ProjectUserMembershipRole), - db.ref("temporaryAccessEndTime").withSchema(TableName.ProjectUserMembershipRole) + db.ref("temporaryAccessEndTime").withSchema(TableName.ProjectUserMembershipRole), + db.ref("id").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApId"), + db.ref("name").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApName"), + db.ref("description").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApDescription"), + db.ref("slug").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApSlug"), + db.ref("temporaryMode").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApTemporaryMode"), + db.ref("isTemporary").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApIsTemporary"), + db.ref("createdAt").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApCreatedAt"), + db.ref("temporaryRange").withSchema(TableName.ProjectUserAdditionalPrivilege).as("userApTemporaryRange"), + db + .ref("temporaryAccessStartTime") + .withSchema(TableName.ProjectUserAdditionalPrivilege) + .as("userApTemporaryAccessStartTime"), + db + .ref("temporaryAccessEndTime") + .withSchema(TableName.ProjectUserAdditionalPrivilege) + .as("userApTemporaryAccessEndTime") ) .where({ isGhost: false }); @@ -87,6 +108,33 @@ export const projectMembershipDALFactory = (db: TDbClient) => { temporaryAccessStartTime, isTemporary }) + }, + { + label: "additionalPrivileges" as const, + key: "userApId", + mapper: ({ + userApId, + userApDescription, + userApName, + userApSlug, + userApIsTemporary, + userApTemporaryMode, + userApTemporaryRange, + userApTemporaryAccessEndTime, + userApTemporaryAccessStartTime, + userApCreatedAt + }) => ({ + id: userApId, + name: userApName, + description: userApDescription, + slug: userApSlug, + temporaryRange: userApTemporaryRange, + temporaryMode: userApTemporaryMode, + temporaryAccessEndTime: userApTemporaryAccessEndTime, + temporaryAccessStartTime: userApTemporaryAccessStartTime, + isTemporary: userApIsTemporary, + createdAt: userApCreatedAt + }) } ] }); From edbe1c8eae1bc60259e70a0f69f30ef3bd68b6c8 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 15:55:48 +0530 Subject: [PATCH 17/61] feat(ui): hook for new user additional privilege --- frontend/src/hooks/api/index.tsx | 1 + .../projectUserAdditionalPrivilege/index.tsx | 7 +++ .../mutation.tsx | 62 +++++++++++++++++++ .../queries.tsx | 31 ++++++++++ .../projectUserAdditionalPrivilege/types.tsx | 48 ++++++++++++++ frontend/src/hooks/api/users/types.ts | 12 ++++ frontend/src/hooks/api/workspace/queries.tsx | 7 +++ 7 files changed, 168 insertions(+) create mode 100644 frontend/src/hooks/api/projectUserAdditionalPrivilege/index.tsx create mode 100644 frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx create mode 100644 frontend/src/hooks/api/projectUserAdditionalPrivilege/queries.tsx create mode 100644 frontend/src/hooks/api/projectUserAdditionalPrivilege/types.tsx diff --git a/frontend/src/hooks/api/index.tsx b/frontend/src/hooks/api/index.tsx index 48d85c285..8ea1985df 100644 --- a/frontend/src/hooks/api/index.tsx +++ b/frontend/src/hooks/api/index.tsx @@ -12,6 +12,7 @@ export * from "./integrations"; export * from "./keys"; export * from "./ldapConfig"; export * from "./organization"; +export * from "./projectUserAdditionalPrivilege"; export * from "./roles"; export * from "./scim"; export * from "./secretApproval"; diff --git a/frontend/src/hooks/api/projectUserAdditionalPrivilege/index.tsx b/frontend/src/hooks/api/projectUserAdditionalPrivilege/index.tsx new file mode 100644 index 000000000..53512c52b --- /dev/null +++ b/frontend/src/hooks/api/projectUserAdditionalPrivilege/index.tsx @@ -0,0 +1,7 @@ +export { + useCreateProjectUserAdditionalPrivilege, + useDeleteProjectUserAdditionalPrivilege, + useUpdateProjectUserAdditionalPrivilege +} from "./mutation"; +export { useGetProjectUserPrivilegeDetails } from "./queries"; +export type { TProjectUserPrivilege } from "./types"; diff --git a/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx new file mode 100644 index 000000000..135920e0e --- /dev/null +++ b/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx @@ -0,0 +1,62 @@ +import { packRules } from "@casl/ability/extra"; +import { useMutation, useQueryClient } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { workspaceKeys } from "../workspace/queries"; +import { + TCreateProjectUserPrivilegeDTO, + TDeleteProjectUserPrivilegeDTO, + TProjectUserPrivilege, + TUpdateProjectUserPrivlegeDTO +} from "./types"; + +export const useCreateProjectUserAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation<{ privilege: TProjectUserPrivilege }, {}, TCreateProjectUserPrivilegeDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.post("/api/v1/additional-privilege/users", { + ...dto, + permissions: packRules(dto.permissions) + }); + return data.privilege; + }, + onSuccess: (_, { workspaceId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceUsers(workspaceId)); + } + }); +}; + +export const useUpdateProjectUserAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation<{ privilege: TProjectUserPrivilege }, {}, TUpdateProjectUserPrivlegeDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.patch( + `/api/v1/additional-privilege/users/${dto.privilegeId}`, + { ...dto, permissions: dto.permissions ? packRules(dto.permissions) : undefined } + ); + return data.privilege; + }, + onSuccess: (_, { workspaceId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceUsers(workspaceId)); + } + }); +}; + +export const useDeleteProjectUserAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation<{ privilege: TProjectUserPrivilege }, {}, TDeleteProjectUserPrivilegeDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.delete( + `/api/v1/additional-privilege/users/${dto.privilegeId}` + ); + return data.privilege; + }, + onSuccess: (_, { workspaceId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceUsers(workspaceId)); + } + }); +}; diff --git a/frontend/src/hooks/api/projectUserAdditionalPrivilege/queries.tsx b/frontend/src/hooks/api/projectUserAdditionalPrivilege/queries.tsx new file mode 100644 index 000000000..1f814d411 --- /dev/null +++ b/frontend/src/hooks/api/projectUserAdditionalPrivilege/queries.tsx @@ -0,0 +1,31 @@ +import { PackRule, unpackRules } from "@casl/ability/extra"; +import { useQuery } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { TProjectPermission } from "../roles/types"; +import { TProjectUserPrivilege } from "./types"; + +export const projectUserPrivilegeKeys = { + details: (privilegeId: string) => ["project-user-privilege", { privilegeId }] as const +}; + +const fetchProjectUserPrivilegeDetails = async (privilegeId: string) => { + const { + data: { privilege } + } = await apiRequest.get<{ + privilege: Omit & { permissions: unknown }; + }>(`/api/v1/additional-privilege/users/${privilegeId}`); + return { + ...privilege, + permissions: unpackRules(privilege.permissions as PackRule[]) + }; +}; + +export const useGetProjectUserPrivilegeDetails = (privilegeId: string) => { + return useQuery({ + enabled: Boolean(privilegeId), + queryKey: projectUserPrivilegeKeys.details(privilegeId), + queryFn: () => fetchProjectUserPrivilegeDetails(privilegeId) + }); +}; diff --git a/frontend/src/hooks/api/projectUserAdditionalPrivilege/types.tsx b/frontend/src/hooks/api/projectUserAdditionalPrivilege/types.tsx new file mode 100644 index 000000000..c8e78db43 --- /dev/null +++ b/frontend/src/hooks/api/projectUserAdditionalPrivilege/types.tsx @@ -0,0 +1,48 @@ +import { TProjectPermission } from "../roles/types"; + +export enum ProjectUserAdditionalPrivilegeTemporaryMode { + Relative = "relative" +} + +export type TProjectUserPrivilege = { + projectMembershipId: string; + slug: string; + name: string; + isTemporary: boolean; + id: string; + createdAt: Date; + updatedAt: Date; + description?: string | null | undefined; + temporaryMode?: string | null | undefined; + temporaryRange?: string | null | undefined; + temporaryAccessStartTime?: string | null | undefined; + temporaryAccessEndTime?: Date | null | undefined; + permissions?: TProjectPermission[]; +}; + +export type TCreateProjectUserPrivilegeDTO = { + projectMembershipId: string; + slug: string; + name: string; + workspaceId: string; + description?: string; + isTemporary?: boolean; + temporaryMode?: ProjectUserAdditionalPrivilegeTemporaryMode; + temporaryRange?: string; + temporaryAccessStartTime?: string; + permissions: TProjectPermission[]; +}; + +export type TUpdateProjectUserPrivlegeDTO = { + privilegeId: string; + workspaceId: string; +} & Partial>; + +export type TDeleteProjectUserPrivilegeDTO = { + privilegeId: string; + workspaceId: string; +}; + +export type TGetProejctUserPrivilegeDetails = { + privilegeId: string; +}; diff --git a/frontend/src/hooks/api/users/types.ts b/frontend/src/hooks/api/users/types.ts index edc3bdf9e..326bb71c0 100644 --- a/frontend/src/hooks/api/users/types.ts +++ b/frontend/src/hooks/api/users/types.ts @@ -76,6 +76,18 @@ export type TWorkspaceUser = { }; inviteEmail: string; organization: string; + additionalPrivileges: { + id: string; + name: string; + description: string | null | undefined; + slug: string; + temporaryRange: string | null | undefined; + temporaryMode: string | null | undefined; + temporaryAccessEndTime: string | null | undefined; + temporaryAccessStartTime: string | null | undefined; + isTemporary: boolean; + createdAt: string; + }[]; roles: { id: string; role: "owner" | "admin" | "member" | "no-access" | "custom"; diff --git a/frontend/src/hooks/api/workspace/queries.tsx b/frontend/src/hooks/api/workspace/queries.tsx index 001454233..30e341a6a 100644 --- a/frontend/src/hooks/api/workspace/queries.tsx +++ b/frontend/src/hooks/api/workspace/queries.tsx @@ -315,6 +315,13 @@ export const useGetWorkspaceUsers = (workspaceId: string) => { ); return users; }, + select: (data) => + data.map((el) => ({ + ...el, + additionalPrivileges: el.additionalPrivileges.sort((a, b) => + a.createdAt.localeCompare(b.createdAt) + ) + })), enabled: true }); }; From 81cf19cb4ad1bec8e00be18b2ac0b53f340df24b Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 15:56:16 +0530 Subject: [PATCH 18/61] feat(ui): completed ui for user additional privilege --- frontend/src/components/v2/Tag/Tag.tsx | 1 + .../views/Project/MembersPage/MembersPage.tsx | 10 +- .../AdditionalPrivilegeForm.tsx | 283 ++++++++++++++++++ .../AdditionalPrivilegeSection.tsx | 181 +++++++++++ .../AdditionalPrivilegeTemporaryAccess.tsx | 193 ++++++++++++ .../AdditionalPrivilegeSection/index.tsx | 1 + .../MemberListTab/MemberListTab.tsx | 171 ++++++++--- .../MultiEnvProjectPermission.tsx | 13 +- .../ProjectRoleModifySection.tsx | 2 + 9 files changed, 794 insertions(+), 61 deletions(-) create mode 100644 frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx diff --git a/frontend/src/components/v2/Tag/Tag.tsx b/frontend/src/components/v2/Tag/Tag.tsx index 5f3771f62..7210e388b 100644 --- a/frontend/src/components/v2/Tag/Tag.tsx +++ b/frontend/src/components/v2/Tag/Tag.tsx @@ -20,6 +20,7 @@ const tagVariants = cva( green: "bg-primary-800 text-white" }, size: { + xs: "text-xs px-1 py-0.5", sm: "px-2 py-0.5" } } diff --git a/frontend/src/views/Project/MembersPage/MembersPage.tsx b/frontend/src/views/Project/MembersPage/MembersPage.tsx index b565d426c..66c01f773 100644 --- a/frontend/src/views/Project/MembersPage/MembersPage.tsx +++ b/frontend/src/views/Project/MembersPage/MembersPage.tsx @@ -32,15 +32,7 @@ export const MembersPage = withProjectPermission( Project Roles - - - + diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx new file mode 100644 index 000000000..c0d649942 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx @@ -0,0 +1,283 @@ +import { useForm } from "react-hook-form"; +import { faElementor } from "@fortawesome/free-brands-svg-icons"; +import { + faAnchorLock, + faArrowLeft, + faBook, + faCog, + faKey, + faLock, + faNetworkWired, + faPuzzlePiece, + faServer, + faShield, + faTags, + faUser, + faUsers +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; +import { Button, FormControl, Input } from "@app/components/v2"; +import { ProjectPermissionSub } from "@app/context"; +import { + useCreateProjectUserAdditionalPrivilege, + useGetProjectUserPrivilegeDetails, + useUpdateProjectUserAdditionalPrivilege +} from "@app/hooks/api"; + +import { MultiEnvProjectPermission } from "../ProjectRoleListTab/components/ProjectRoleModifySection/MultiEnvProjectPermission"; +import { + formRolePermission2API, + formSchema, + rolePermission2Form, + // rolePermission2Form, + TFormSchema +} from "../ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.utils"; +import { SecretRollbackPermission } from "../ProjectRoleListTab/components/ProjectRoleModifySection/SecretRollbackPermission"; +import { SingleProjectPermission } from "../ProjectRoleListTab/components/ProjectRoleModifySection/SingleProjectPermission"; +import { WsProjectPermission } from "../ProjectRoleListTab/components/ProjectRoleModifySection/WsProjectPermission"; + +const SINGLE_PERMISSION_LIST = [ + { + title: "Integrations", + subtitle: "Integration management control", + icon: faPuzzlePiece, + formName: "integrations" + }, + { + title: "Secret Protect policy", + subtitle: "Manage policies for secret protection for unauthorized secret changes", + icon: faShield, + formName: ProjectPermissionSub.SecretApproval + }, + { + title: "Roles", + subtitle: "Role management control", + icon: faUsers, + formName: "role" + }, + { + title: "Project Members", + subtitle: "Project members management control", + icon: faUser, + formName: "member" + }, + { + title: "Machine identity management", + subtitle: "Add, view, update and remove (machine) identities from the project", + icon: faServer, + formName: "identity" + }, + { + title: "Webhooks", + subtitle: "Webhook management control", + icon: faAnchorLock, + formName: "webhooks" + }, + { + title: "Service Tokens", + subtitle: "Token management control", + icon: faKey, + formName: "service-tokens" + }, + { + title: "Settings", + subtitle: "Settings control", + icon: faCog, + formName: "settings" + }, + { + title: "Environments", + subtitle: "Environment management control", + icon: faElementor, + formName: "environments" + }, + { + title: "Tags", + subtitle: "Tag management control", + icon: faTags, + formName: "tags" + }, + { + title: "Audit Logs", + subtitle: "Audit log management control", + icon: faBook, + formName: "audit-logs" + }, + { + title: "IP Allowlist", + subtitle: "IP allowlist management control", + icon: faNetworkWired, + formName: "ip-allowlist" + } +] as const; + +type Props = { + onGoBack: VoidFunction; + isIdentity?: boolean; + privilegeId?: string; + workspaceId: string; + // isIdentity true -> actorId is identity Id + // isIdentity false -> actorId is projectMembershipId + actorId: string; +}; + +export const AdditionalPrivilegeForm = ({ onGoBack, privilegeId, actorId, workspaceId }: Props) => { + const { createNotification } = useNotificationContext(); + const isNewRole = !privilegeId; + + const { data: projectUserPrivilegeDetails } = useGetProjectUserPrivilegeDetails( + privilegeId || "" + ); + + const { + handleSubmit, + register, + formState: { isSubmitting, isDirty, errors }, + setValue, + getValues, + control + } = useForm({ + resolver: zodResolver(formSchema), + values: projectUserPrivilegeDetails && { + ...projectUserPrivilegeDetails, + description: projectUserPrivilegeDetails.description || "", + permissions: rolePermission2Form(projectUserPrivilegeDetails.permissions) + } + }); + + const createProjectUserAdditionalPrivilege = useCreateProjectUserAdditionalPrivilege(); + const updateProjectUserAdditionalPrivilege = useUpdateProjectUserAdditionalPrivilege(); + + const handleRoleUpdate = async (el: TFormSchema) => { + try { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + privilegeId: privilegeId as string, + workspaceId + }); + createNotification({ type: "success", text: "Successfully update privilege" }); + onGoBack(); + } catch (err) { + console.log(err); + createNotification({ type: "error", text: "Failed to update privilege" }); + } + }; + + const handleFormSubmit = async (el: TFormSchema) => { + if (!isNewRole) { + await handleRoleUpdate(el); + return; + } + + try { + await createProjectUserAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + projectMembershipId: actorId, + workspaceId + }); + createNotification({ type: "success", text: "Created new privilege" }); + onGoBack(); + } catch (err) { + console.log(err); + createNotification({ type: "error", text: "Failed to create privilege" }); + } + }; + + return ( +
+
+
+

+ {isNewRole ? "New" : "Edit"} user additional privilege +

+ +
+

+ Select multiple privilege that can be granted to the user +

+
+ + + + + + + + + +
+
+

Add Privilege

+
+
+
+ +
+
+ +
+ {SINGLE_PERMISSION_LIST.map(({ title, subtitle, icon, formName }) => ( +
+ +
+ ))} +
+ +
+
+
+ + +
+
+
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx new file mode 100644 index 000000000..c13af0b98 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx @@ -0,0 +1,181 @@ +import { + faArrowLeft, + faPencil, + faPlus, + faTrash, + faUserShield +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { motion } from "framer-motion"; + +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; +import { + Button, + DeleteActionModal, + EmptyState, + IconButton, + Tag, + Tooltip +} from "@app/components/v2"; +import { useWorkspace } from "@app/context"; +import { usePopUp } from "@app/hooks"; +import { useDeleteProjectUserAdditionalPrivilege } from "@app/hooks/api"; +import { TWorkspaceUser } from "@app/hooks/api/types"; + +import { AdditionalPrivilegeForm } from "./AdditionalPrivilegeForm"; +import { AdditionalPrivilegeTemporaryAccess } from "./AdditionalPrivilegeTemporaryAccess"; + +type Props = { + onGoBack: VoidFunction; + name: string; + projectMembershipId: string; + privileges: TWorkspaceUser["additionalPrivileges"]; +}; + +export const AdditionalPrivilegeSection = ({ + onGoBack, + privileges = [], + projectMembershipId, + name +}: Props) => { + const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ + "modifyPrivilege", + "deletePrivilege" + ] as const); + const { createNotification } = useNotificationContext(); + const deleteProjectUserAdditionalPrivilege = useDeleteProjectUserAdditionalPrivilege(); + const { currentWorkspace } = useWorkspace(); + const workspaceId = currentWorkspace?.id || ""; + + const onPrivilegeDelete = async (privilegeId: string) => { + try { + await deleteProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId, + workspaceId + }); + handlePopUpClose("deletePrivilege"); + createNotification({ + type: "success", + text: "Successfully removed user privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to delete user privilege" + }); + } + }; + + if (popUp.modifyPrivilege.isOpen) { + const privilegeDetails = popUp?.modifyPrivilege?.data as { + id: string; + }; + + return ( + + handlePopUpClose("modifyPrivilege")} + privilegeId={privilegeDetails?.id} + workspaceId={workspaceId} + actorId={projectMembershipId} + /> + + ); + } + + return ( + +
+

+ Additional Privileges - {name} +

+
+ + +
+
+
+ {privileges.length === 0 && ( + + )} + {privileges.map(({ id, name: privilegeName, description, slug, ...dto }) => ( +
+
+
+ {privilegeName} + + {slug} + +
+
{description}
+
+
+ + handlePopUpOpen("modifyPrivilege", { id })} + > + + + + + handlePopUpOpen("deletePrivilege", { name: privilegeName, id })} + > + + + + +
+
+ ))} +
+ handlePopUpToggle("deletePrivilege", isOpen)} + deleteKey="delete" + onDeleteApproved={async () => + onPrivilegeDelete((popUp?.deletePrivilege.data as { id: string }).id) + } + /> +
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx new file mode 100644 index 000000000..718a7de55 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx @@ -0,0 +1,193 @@ +import { Controller, useForm } from "react-hook-form"; +import { faClock } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { twMerge } from "tailwind-merge"; +import { z } from "zod"; + +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; +import { + Button, + FormControl, + IconButton, + Input, + Popover, + PopoverContent, + PopoverTrigger, + Tag, + Tooltip +} from "@app/components/v2"; +import { usePopUp } from "@app/hooks"; +import { useUpdateProjectUserAdditionalPrivilege } from "@app/hooks/api"; +import { ProjectUserAdditionalPrivilegeTemporaryMode } from "@app/hooks/api/projectUserAdditionalPrivilege/types"; + +const temporaryRoleFormSchema = z.object({ + temporaryRange: z.string().min(1, "Required") +}); + +type TTemporaryRoleFormSchema = z.infer; + +type TTemporaryRoleFormProps = { + privilegeId: string; + workspaceId: string; + temporaryConfig?: { + isTemporary?: boolean; + temporaryAccessEndTime?: string | null; + temporaryAccessStartTime?: string | null; + temporaryRange?: string | null; + }; +}; + +export const AdditionalPrivilegeTemporaryAccess = ({ + temporaryConfig: defaultValues = {}, + workspaceId, + privilegeId +}: TTemporaryRoleFormProps) => { + const { popUp, handlePopUpToggle } = usePopUp(["setTempRole"] as const); + const { createNotification } = useNotificationContext(); + const { control, handleSubmit } = useForm({ + resolver: zodResolver(temporaryRoleFormSchema), + values: { + temporaryRange: defaultValues.temporaryRange || "1h" + } + }); + const isTemporaryFieldValue = defaultValues.isTemporary; + const isExpired = + isTemporaryFieldValue && new Date() > new Date(defaultValues.temporaryAccessEndTime || ""); + + const updateProjectUserAdditionalPrivilege = useUpdateProjectUserAdditionalPrivilege(); + + const handleGrantTemporaryAccess = async (el: TTemporaryRoleFormSchema) => { + try { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + workspaceId, + isTemporary: true, + temporaryRange: el.temporaryRange, + temporaryAccessStartTime: new Date().toISOString(), + temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative + }); + createNotification({ type: "success", text: "Successfully updated access" }); + handlePopUpToggle("setTempRole"); + } catch (err) { + console.log(err); + createNotification({ type: "error", text: "Failed to update access" }); + } + }; + + const handleRevokeTemporaryAccess = async () => { + try { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + workspaceId, + isTemporary: false + }); + createNotification({ type: "success", text: "Successfully updated access" }); + handlePopUpToggle("setTempRole"); + } catch (err) { + console.log(err); + createNotification({ type: "error", text: "Failed to update access" }); + } + }; + + return ( + { + handlePopUpToggle("setTempRole", isOpen); + }} + > + + + + + + + + +
+
+ Configure timed access +
+ {isExpired && Expired} + ( + + 1m, 2h, 3d.{" "} + + More + + + } + > + + + )} + /> +
+ + {isTemporaryFieldValue && ( + + )} +
+
+
+
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx new file mode 100644 index 000000000..42c37441d --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx @@ -0,0 +1 @@ +export { AdditionalPrivilegeSection } from "./AdditionalPrivilegeSection"; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx index 342b3b920..fdf5a7309 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx @@ -2,9 +2,17 @@ import { useMemo, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import Link from "next/link"; -import { faMagnifyingGlass, faPlus, faUsers, faXmark } from "@fortawesome/free-solid-svg-icons"; +import { + faMagnifyingGlass, + faPlus, + faUsers, + faUserShield, + faXmark +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; +import { motion } from "framer-motion"; +import { twMerge } from "tailwind-merge"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; @@ -48,6 +56,7 @@ import { } from "@app/hooks/api"; import { ProjectVersion } from "@app/hooks/api/workspace/types"; +import { AdditionalPrivilegeSection } from "../AdditionalPrivilegeSection"; import { MemberRoles } from "./MemberRoles"; const addMemberFormSchema = z.object({ @@ -77,7 +86,8 @@ export const MemberListTab = () => { const { handlePopUpToggle, popUp, handlePopUpOpen, handlePopUpClose } = usePopUp([ "addMember", "removeMember", - "upgradePlan" + "upgradePlan", + "additionalPrivilege" ] as const); const { @@ -185,8 +195,41 @@ export const MemberListTab = () => { ); }, [orgUsers, members]); + if (popUp.additionalPrivilege.isOpen) { + const privilegeDetails = popUp?.additionalPrivilege?.data as { + name: string; + index: number; + projectMembershipId: string; + }; + + return ( + + handlePopUpClose("additionalPrivilege")} + privileges={members?.[privilegeDetails.index]?.additionalPrivileges || []} + name={privilegeDetails.name} + projectMembershipId={privilegeDetails.projectMembershipId} + /> + + ); + } + return ( -
+

Members

@@ -223,58 +266,90 @@ export const MemberListTab = () => { {isMembersLoading && } {!isMembersLoading && - filterdUsers?.map(({ user: u, inviteEmail, id: membershipId, roles }) => { - const name = u ? `${u.firstName} ${u.lastName}` : "-"; - const email = u?.email || inviteEmail; + filterdUsers?.map( + ( + { user: u, inviteEmail, id: membershipId, roles, additionalPrivileges }, + index + ) => { + const name = u ? `${u.firstName} ${u.lastName}` : "-"; + const email = u?.email || inviteEmail; + const hasAdditionalPrivilege = Boolean(additionalPrivileges.length); - return ( - - {name} - {email} - - - {(isAllowed) => ( - - handlePopUpOpen("upgradePlan", { description }) - } - membershipId={membershipId} - /> - )} - - - - {userId !== u?.id && ( + return ( + + {name} + {email} + {(isAllowed) => ( - - handlePopUpOpen("removeMember", { username: u.username }) + + handlePopUpOpen("upgradePlan", { description }) } - > - - + membershipId={membershipId} + /> )} - )} - - - ); - })} + + + {userId !== u?.id && ( +
+ + {(isAllowed) => ( + + handlePopUpOpen("additionalPrivilege", { + name: `${user.firstName} ${user.lastName || ""}`, + index, + projectMembershipId: membershipId + }) + } + > + + + )} + + + {(isAllowed) => ( + + handlePopUpOpen("removeMember", { username: u.username }) + } + > + + + )} + +
+ )} + + + ); + } + )} {!isMembersLoading && filterdUsers?.length === 0 && ( @@ -355,6 +430,6 @@ export const MemberListTab = () => { onOpenChange={(isOpen) => handlePopUpToggle("upgradePlan", isOpen)} text={(popUp.upgradePlan?.data as { description: string })?.description} /> -
+
); }; diff --git a/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/MultiEnvProjectPermission.tsx b/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/MultiEnvProjectPermission.tsx index db18822f4..188d81c65 100644 --- a/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/MultiEnvProjectPermission.tsx +++ b/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/MultiEnvProjectPermission.tsx @@ -1,5 +1,5 @@ import { useMemo } from "react"; -import { Control, Controller, UseFormSetValue, useWatch } from "react-hook-form"; +import { Control, Controller, UseFormGetValues, UseFormSetValue, useWatch } from "react-hook-form"; import { IconProp } from "@fortawesome/fontawesome-svg-core"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { motion } from "framer-motion"; @@ -28,6 +28,7 @@ type Props = { formName: "secrets"; isNonEditable?: boolean; setValue: UseFormSetValue; + getValue: UseFormGetValues; control: Control; title: string; subtitle: string; @@ -44,6 +45,7 @@ enum Permission { export const MultiEnvProjectPermission = ({ isNonEditable, setValue, + getValue, control, formName, title, @@ -69,9 +71,12 @@ export const MultiEnvProjectPermission = ({ const handlePermissionChange = (val: Permission) => { switch (val) { - case Permission.NoAccess: - setValue(`permissions.${formName}`, undefined, { shouldDirty: true }); + case Permission.NoAccess: { + const permissions = getValue("permissions"); + if (permissions) delete permissions[formName]; + setValue("permissions", permissions, { shouldDirty: true }); break; + } case Permission.FullAccess: setValue( `permissions.${formName}`, @@ -101,7 +106,7 @@ export const MultiEnvProjectPermission = ({ className={twMerge( "rounded-md bg-mineshaft-800 px-10 py-6", (selectedPermissionCategory !== Permission.NoAccess || isCustom) && - "border-l-2 border-primary-600" + "border-l-2 border-primary-600" )} >
diff --git a/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.tsx b/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.tsx index cf2e7e8b9..4349b0913 100644 --- a/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.tsx +++ b/frontend/src/views/Project/MembersPage/components/ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.tsx @@ -128,6 +128,7 @@ export const ProjectRoleModifySection = ({ role, onGoBack }: Props) => { register, formState: { isSubmitting, isDirty, errors }, setValue, + getValues, control } = useForm({ defaultValues: role ? { ...role, permissions: rolePermission2Form(role.permissions) } : {}, @@ -226,6 +227,7 @@ export const ProjectRoleModifySection = ({ role, onGoBack }: Props) => {
Date: Fri, 15 Mar 2024 21:18:11 +0530 Subject: [PATCH 19/61] feat(server): completed identity additional privilege --- backend/src/@types/fastify.d.ts | 2 + backend/src/@types/knex.d.ts | 8 + ...3_machine-identity-additional-privilege.ts | 34 +++ .../identity-project-additional-privilege.ts | 33 +++ backend/src/db/schemas/index.ts | 1 + backend/src/db/schemas/models.ts | 1 + ...ity-project-additional-privilege-router.ts | 171 ++++++++++++ backend/src/ee/routes/v1/index.ts | 2 + ...entity-project-additional-privilege-dal.ts | 12 + ...ty-project-additional-privilege-service.ts | 259 ++++++++++++++++++ ...tity-project-additional-privilege-types.ts | 51 ++++ backend/src/server/routes/index.ts | 11 +- .../routes/v2/identity-project-router.ts | 14 + .../identity-project/identity-project-dal.ts | 56 +++- 14 files changed, 653 insertions(+), 2 deletions(-) create mode 100644 backend/src/db/migrations/20240315102813_machine-identity-additional-privilege.ts create mode 100644 backend/src/db/schemas/identity-project-additional-privilege.ts create mode 100644 backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts create mode 100644 backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal.ts create mode 100644 backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts create mode 100644 backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts diff --git a/backend/src/@types/fastify.d.ts b/backend/src/@types/fastify.d.ts index 54e220abf..0a9aff8f0 100644 --- a/backend/src/@types/fastify.d.ts +++ b/backend/src/@types/fastify.d.ts @@ -5,6 +5,7 @@ import { TAuditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-se import { TCreateAuditLogDTO } from "@app/ee/services/audit-log/audit-log-types"; import { TDynamicSecretServiceFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-service"; import { TDynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-service"; +import { TIdentityProjectAdditionalPrivilegeServiceFactory } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service"; import { TLdapConfigServiceFactory } from "@app/ee/services/ldap-config/ldap-config-service"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; @@ -123,6 +124,7 @@ declare module "fastify" { dynamicSecret: TDynamicSecretServiceFactory; dynamicSecretLease: TDynamicSecretLeaseServiceFactory; projectUserAdditionalPrivilege: TProjectUserAdditionalPrivilegeServiceFactory; + identityProjectAdditionalPrivilege: TIdentityProjectAdditionalPrivilegeServiceFactory; }; // this is exclusive use for middlewares in which we need to inject data // everywhere else access using service layer diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index 9b4bfec96..7c14eb781 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -38,6 +38,9 @@ import { TIdentityOrgMemberships, TIdentityOrgMembershipsInsert, TIdentityOrgMembershipsUpdate, + TIdentityProjectAdditionalPrivilege, + TIdentityProjectAdditionalPrivilegeInsert, + TIdentityProjectAdditionalPrivilegeUpdate, TIdentityProjectMembershipRole, TIdentityProjectMembershipRoleInsert, TIdentityProjectMembershipRoleUpdate, @@ -302,6 +305,11 @@ declare module "knex/types/tables" { TIdentityProjectMembershipRoleInsert, TIdentityProjectMembershipRoleUpdate >; + [TableName.IdentityProjectAdditionalPrivilege]: Knex.CompositeTableType< + TIdentityProjectAdditionalPrivilege, + TIdentityProjectAdditionalPrivilegeInsert, + TIdentityProjectAdditionalPrivilegeUpdate + >; [TableName.ScimToken]: Knex.CompositeTableType; [TableName.SecretApprovalPolicy]: Knex.CompositeTableType< TSecretApprovalPolicies, diff --git a/backend/src/db/migrations/20240315102813_machine-identity-additional-privilege.ts b/backend/src/db/migrations/20240315102813_machine-identity-additional-privilege.ts new file mode 100644 index 000000000..143fa6bdd --- /dev/null +++ b/backend/src/db/migrations/20240315102813_machine-identity-additional-privilege.ts @@ -0,0 +1,34 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; +import { createOnUpdateTrigger, dropOnUpdateTrigger } from "../utils"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasTable(TableName.IdentityProjectAdditionalPrivilege))) { + await knex.schema.createTable(TableName.IdentityProjectAdditionalPrivilege, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.string("name").notNullable(); + t.string("slug", 60).notNullable(); + t.string("description"); + t.uuid("projectMembershipId").notNullable(); + t.foreign("projectMembershipId") + .references("id") + .inTable(TableName.IdentityProjectMembership) + .onDelete("CASCADE"); + t.boolean("isTemporary").notNullable().defaultTo(false); + t.string("temporaryMode"); + t.string("temporaryRange"); // could be cron or relative time like 1H or 1minute etc + t.datetime("temporaryAccessStartTime"); + t.datetime("temporaryAccessEndTime"); + t.jsonb("permissions").notNullable(); + t.timestamps(true, true, true); + }); + } + + await createOnUpdateTrigger(knex, TableName.IdentityProjectAdditionalPrivilege); +} + +export async function down(knex: Knex): Promise { + await dropOnUpdateTrigger(knex, TableName.IdentityProjectAdditionalPrivilege); + await knex.schema.dropTableIfExists(TableName.IdentityProjectAdditionalPrivilege); +} diff --git a/backend/src/db/schemas/identity-project-additional-privilege.ts b/backend/src/db/schemas/identity-project-additional-privilege.ts new file mode 100644 index 000000000..0e548dd93 --- /dev/null +++ b/backend/src/db/schemas/identity-project-additional-privilege.ts @@ -0,0 +1,33 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { TImmutableDBKeys } from "./models"; + +export const IdentityProjectAdditionalPrivilegeSchema = z.object({ + id: z.string().uuid(), + name: z.string(), + slug: z.string(), + description: z.string().nullable().optional(), + projectMembershipId: z.string().uuid(), + isTemporary: z.boolean().default(false), + temporaryMode: z.string().nullable().optional(), + temporaryRange: z.string().nullable().optional(), + temporaryAccessStartTime: z.date().nullable().optional(), + temporaryAccessEndTime: z.date().nullable().optional(), + permissions: z.unknown(), + createdAt: z.date(), + updatedAt: z.date() +}); + +export type TIdentityProjectAdditionalPrivilege = z.infer; +export type TIdentityProjectAdditionalPrivilegeInsert = Omit< + z.input, + TImmutableDBKeys +>; +export type TIdentityProjectAdditionalPrivilegeUpdate = Partial< + Omit, TImmutableDBKeys> +>; diff --git a/backend/src/db/schemas/index.ts b/backend/src/db/schemas/index.ts index 96993dc10..361ae2e0d 100644 --- a/backend/src/db/schemas/index.ts +++ b/backend/src/db/schemas/index.ts @@ -10,6 +10,7 @@ export * from "./git-app-org"; export * from "./identities"; export * from "./identity-access-tokens"; export * from "./identity-org-memberships"; +export * from "./identity-project-additional-privilege"; export * from "./identity-project-membership-role"; export * from "./identity-project-memberships"; export * from "./identity-ua-client-secrets"; diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index 8af8951fd..3cb11d694 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -44,6 +44,7 @@ export enum TableName { IdentityOrgMembership = "identity_org_memberships", IdentityProjectMembership = "identity_project_memberships", IdentityProjectMembershipRole = "identity_project_membership_role", + IdentityProjectAdditionalPrivilege = "identity_project_additional_privilege", ScimToken = "scim_tokens", SecretApprovalPolicy = "secret_approval_policies", SecretApprovalPolicyApprover = "secret_approval_policies_approvers", diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts new file mode 100644 index 000000000..622b003dd --- /dev/null +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -0,0 +1,171 @@ +import ms from "ms"; +import { z } from "zod"; + +import { IdentityProjectAdditionalPrivilegeSchema } from "@app/db/schemas"; +import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { AuthMode } from "@app/services/auth/auth-type"; + +export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: FastifyZodProvider) => { + server.route({ + url: "/", + method: "POST", + schema: { + body: z.union([ + z.object({ + identityId: z.string(), + projectId: z.string(), + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.literal(false).default(false) + }), + z.object({ + identityId: z.string(), + projectId: z.string(), + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.literal(true), + temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), + temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), + temporaryAccessStartTime: z.string().datetime() + }) + ]), + response: { + 200: z.object({ + privilege: IdentityProjectAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privilege = await server.services.identityProjectAdditionalPrivilege.create({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + ...req.body, + permissions: JSON.stringify(req.body.permissions) + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "PATCH", + schema: { + params: z.object({ + privilegeId: z.string() + }), + body: z + .object({ + slug: z.string().max(60).trim(), + name: z.string().trim(), + description: z.string().trim().optional(), + permissions: z.any().array(), + isTemporary: z.boolean(), + temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), + temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), + temporaryAccessStartTime: z.string().datetime() + }) + .partial(), + response: { + 200: z.object({ + privilege: IdentityProjectAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privilege = await server.services.identityProjectAdditionalPrivilege.updateById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + ...req.body, + permissions: req.body.permissions ? JSON.stringify(req.body.permissions) : undefined, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "DELETE", + schema: { + params: z.object({ + privilegeId: z.string() + }), + response: { + 200: z.object({ + privilege: IdentityProjectAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privilege = await server.services.identityProjectAdditionalPrivilege.deleteById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); + + server.route({ + url: "/:privilegeId", + method: "GET", + schema: { + params: z.object({ + privilegeId: z.string() + }), + response: { + 200: z.object({ + privilege: IdentityProjectAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privilege = await server.services.identityProjectAdditionalPrivilege.getPrivilegeDetailsById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + privilegeId: req.params.privilegeId + }); + return { privilege }; + } + }); + + server.route({ + url: "/permissions", + method: "POST", + schema: { + body: z.object({ + identityId: z.string(), + projectId: z.string() + }), + response: { + 200: z.object({ + privileges: IdentityProjectAdditionalPrivilegeSchema.array() + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privileges = await server.services.identityProjectAdditionalPrivilege.listIdentityProjectPrivileges({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + projectId: req.body.projectId, + identityId: req.body.identityId + }); + return { privileges }; + } + }); +}; diff --git a/backend/src/ee/routes/v1/index.ts b/backend/src/ee/routes/v1/index.ts index 0d7b45ded..72021c81f 100644 --- a/backend/src/ee/routes/v1/index.ts +++ b/backend/src/ee/routes/v1/index.ts @@ -1,5 +1,6 @@ import { registerDynamicSecretLeaseRouter } from "./dynamic-secret-lease-router"; import { registerDynamicSecretRouter } from "./dynamic-secret-router"; +import { registerIdentityProjectAdditionalPrivilegeRouter } from "./identity-project-additional-privilege-router"; import { registerLdapRouter } from "./ldap-router"; import { registerLicenseRouter } from "./license-router"; import { registerOrgRoleRouter } from "./org-role-router"; @@ -55,6 +56,7 @@ export const registerV1EERoutes = async (server: FastifyZodProvider) => { await server.register( async (privilegeRouter) => { await privilegeRouter.register(registerUserAdditionalPrivilegeRouter, { prefix: "/users" }); + await privilegeRouter.register(registerIdentityProjectAdditionalPrivilegeRouter, { prefix: "/identity" }); }, { prefix: "/additional-privilege" } ); diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal.ts new file mode 100644 index 000000000..26252f2d1 --- /dev/null +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal.ts @@ -0,0 +1,12 @@ +import { TDbClient } from "@app/db"; +import { TableName } from "@app/db/schemas"; +import { ormify } from "@app/lib/knex"; + +export type TIdentityProjectAdditionalPrivilegeDALFactory = ReturnType< + typeof identityProjectAdditionalPrivilegeDALFactory +>; + +export const identityProjectAdditionalPrivilegeDALFactory = (db: TDbClient) => { + const orm = ormify(db, TableName.IdentityProjectAdditionalPrivilege); + return orm; +}; diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts new file mode 100644 index 000000000..59729917c --- /dev/null +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts @@ -0,0 +1,259 @@ +import { ForbiddenError } from "@casl/ability"; +import ms from "ms"; + +import { isAtLeastAsPrivileged } from "@app/lib/casl"; +import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors"; +import { ActorType } from "@app/services/auth/auth-type"; +import { TIdentityProjectDALFactory } from "@app/services/identity-project/identity-project-dal"; + +import { TPermissionServiceFactory } from "../permission/permission-service"; +import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; +import { TIdentityProjectAdditionalPrivilegeDALFactory } from "./identity-project-additional-privilege-dal"; +import { + IdentityProjectAdditionalPrivilegeTemporaryMode, + TCreateIdentityPrivilegeDTO, + TDeleteIdentityPrivilegeDTO, + TGetIdentityPrivilegeDetailsDTO, + TListIdentityPrivilegesDTO, + TUpdateIdentityPrivilegeDTO +} from "./identity-project-additional-privilege-types"; + +type TIdentityProjectAdditionalPrivilegeServiceFactoryDep = { + identityProjectAdditionalPrivilegeDAL: TIdentityProjectAdditionalPrivilegeDALFactory; + identityProjectDAL: Pick; + permissionService: Pick; +}; + +export type TIdentityProjectAdditionalPrivilegeServiceFactory = ReturnType< + typeof identityProjectAdditionalPrivilegeServiceFactory +>; + +export const identityProjectAdditionalPrivilegeServiceFactory = ({ + identityProjectAdditionalPrivilegeDAL, + identityProjectDAL, + permissionService +}: TIdentityProjectAdditionalPrivilegeServiceFactoryDep) => { + const create = async ({ + name, + slug, + actor, + actorId, + projectId, + identityId, + permissions: customPermission, + actorOrgId, + description, + ...dto + }: TCreateIdentityPrivilegeDTO) => { + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); + if (!identityProjectMembership) + throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + identityProjectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); + const { permission: identityRolePermission } = await permissionService.getProjectPermission( + ActorType.IDENTITY, + identityId, + identityProjectMembership.projectId, + actorOrgId + ); + const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); + if (!hasRequiredPriviledges) + throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + const existingSlug = await identityProjectAdditionalPrivilegeDAL.findOne({ + slug, + projectMembershipId: identityProjectMembership.id + }); + if (existingSlug) throw new BadRequestError({ message: "Additional privilege of provided slug exist" }); + + if (!dto.isTemporary) { + const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.create({ + projectMembershipId: identityProjectMembership.id, + slug, + permissions: customPermission, + name, + description + }); + return additionalPrivilege; + } + + const relativeTempAllocatedTimeInMs = ms(dto.temporaryRange); + const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.create({ + projectMembershipId: identityProjectMembership.id, + slug, + permissions: customPermission, + name, + description, + isTemporary: true, + temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative, + temporaryRange: dto.temporaryRange, + temporaryAccessStartTime: new Date(dto.temporaryAccessStartTime), + temporaryAccessEndTime: new Date(new Date(dto.temporaryAccessStartTime).getTime() + relativeTempAllocatedTimeInMs) + }); + return additionalPrivilege; + }; + + const updateById = async ({ privilegeId, actorOrgId, actor, actorId, ...dto }: TUpdateIdentityPrivilegeDTO) => { + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + + const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); + if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + identityProjectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); + const { permission: identityRolePermission } = await permissionService.getProjectPermission( + ActorType.IDENTITY, + identityProjectMembership.identityId, + identityProjectMembership.projectId, + actorOrgId + ); + const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); + if (!hasRequiredPriviledges) + throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + if (dto?.slug) { + const existingSlug = await identityProjectAdditionalPrivilegeDAL.findOne({ + slug: dto.slug, + projectMembershipId: identityProjectMembership.id + }); + if (existingSlug && existingSlug.id !== identityPrivilege.id) + throw new BadRequestError({ message: "Additional privilege of provided slug exist" }); + } + + const isTemporary = typeof dto?.isTemporary !== "undefined" ? dto.isTemporary : identityPrivilege.isTemporary; + if (isTemporary) { + const temporaryAccessStartTime = dto?.temporaryAccessStartTime || identityPrivilege?.temporaryAccessStartTime; + const temporaryRange = dto?.temporaryRange || identityPrivilege?.temporaryRange; + const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.updateById(identityPrivilege.id, { + ...dto, + temporaryAccessStartTime: new Date(temporaryAccessStartTime || ""), + temporaryAccessEndTime: new Date(new Date(temporaryAccessStartTime || "").getTime() + ms(temporaryRange || "")) + }); + return additionalPrivilege; + } + + const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.updateById(identityPrivilege.id, { + ...dto, + isTemporary: false, + temporaryAccessStartTime: null, + temporaryAccessEndTime: null, + temporaryRange: null, + temporaryMode: null + }); + return additionalPrivilege; + }; + + const deleteById = async ({ actorId, actor, actorOrgId, privilegeId }: TDeleteIdentityPrivilegeDTO) => { + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + + const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); + if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + identityProjectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); + const { permission: identityRolePermission } = await permissionService.getProjectPermission( + ActorType.IDENTITY, + identityProjectMembership.identityId, + identityProjectMembership.projectId, + actorOrgId + ); + const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); + if (!hasRequiredPriviledges) + throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + const deletedPrivilege = await identityProjectAdditionalPrivilegeDAL.deleteById(identityPrivilege.id); + return deletedPrivilege; + }; + + const getPrivilegeDetailsById = async ({ + privilegeId, + actorOrgId, + actor, + actorId + }: TGetIdentityPrivilegeDetailsDTO) => { + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + + const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); + if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + identityProjectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); + const { permission: identityRolePermission } = await permissionService.getProjectPermission( + ActorType.IDENTITY, + identityProjectMembership.identityId, + identityProjectMembership.projectId, + actorOrgId + ); + const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); + if (!hasRequiredPriviledges) + throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + return identityPrivilege; + }; + + const listIdentityProjectPrivileges = async ({ + projectId, + identityId, + actorOrgId, + actor, + actorId + }: TListIdentityPrivilegesDTO) => { + const identityProjectMembership = await identityProjectDAL.findOne({ projectId, identityId }); + if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + identityProjectMembership.projectId, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); + const { permission: identityRolePermission } = await permissionService.getProjectPermission( + ActorType.IDENTITY, + identityProjectMembership.identityId, + identityProjectMembership.projectId, + actorOrgId + ); + const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); + if (!hasRequiredPriviledges) + throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + const identityPrivileges = await identityProjectAdditionalPrivilegeDAL.find({ + projectMembershipId: identityProjectMembership.id + }); + if (!identityPrivileges) throw new BadRequestError({ message: "Identity additional privilege not found" }); + return identityPrivileges; + }; + + return { + create, + updateById, + deleteById, + getPrivilegeDetailsById, + listIdentityProjectPrivileges + }; +}; diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts new file mode 100644 index 000000000..76a8ffb62 --- /dev/null +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts @@ -0,0 +1,51 @@ +import { TProjectPermission } from "@app/lib/types"; + +export enum IdentityProjectAdditionalPrivilegeTemporaryMode { + Relative = "relative" +} + +export type TCreateIdentityPrivilegeDTO = ( + | { + permissions: unknown; + identityId: string; + projectId: string; + name: string; + slug: string; + description?: string; + isTemporary: false; + } + | { + permissions: unknown; + identityId: string; + projectId: string; + name: string; + slug: string; + description?: string; + isTemporary: true; + temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative; + temporaryRange: string; + temporaryAccessStartTime: string; + } +) & + Omit; + +export type TUpdateIdentityPrivilegeDTO = { privilegeId: string } & Omit & + Partial<{ + permissions: unknown; + name: string; + slug: string; + description?: string; + isTemporary: boolean; + temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative; + temporaryRange: string; + temporaryAccessStartTime: string; + }>; + +export type TDeleteIdentityPrivilegeDTO = Omit & { privilegeId: string }; + +export type TGetIdentityPrivilegeDetailsDTO = Omit & { privilegeId: string }; + +export type TListIdentityPrivilegesDTO = Omit & { + identityId: string; + projectId: string; +}; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 4599a732b..c33f62029 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -11,6 +11,8 @@ import { buildDynamicSecretProviders } from "@app/ee/services/dynamic-secret/pro import { dynamicSecretLeaseDALFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-dal"; import { dynamicSecretLeaseQueueServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-queue"; import { dynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-service"; +import { identityProjectAdditionalPrivilegeDALFactory } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal"; +import { identityProjectAdditionalPrivilegeServiceFactory } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service"; import { ldapConfigDALFactory } from "@app/ee/services/ldap-config/ldap-config-dal"; import { ldapConfigServiceFactory } from "@app/ee/services/ldap-config/ldap-config-service"; import { licenseDALFactory } from "@app/ee/services/license/license-dal"; @@ -177,6 +179,7 @@ export const registerRoutes = async ( const identityOrgMembershipDAL = identityOrgDALFactory(db); const identityProjectDAL = identityProjectDALFactory(db); const identityProjectMembershipRoleDAL = identityProjectMembershipRoleDALFactory(db); + const identityProjectAdditionalPrivilegeDAL = identityProjectAdditionalPrivilegeDALFactory(db); const identityUaDAL = identityUaDALFactory(db); const identityUaClientSecretDAL = identityUaClientSecretDALFactory(db); @@ -556,6 +559,11 @@ export const registerRoutes = async ( identityProjectMembershipRoleDAL, projectRoleDAL }); + const identityProjectAdditionalPrivilegeService = identityProjectAdditionalPrivilegeServiceFactory({ + identityProjectAdditionalPrivilegeDAL, + permissionService, + identityProjectDAL + }); const identityUaService = identityUaServiceFactory({ identityOrgMembershipDAL, permissionService, @@ -647,7 +655,8 @@ export const registerRoutes = async ( scim: scimService, secretBlindIndex: secretBlindIndexService, telemetry: telemetryService, - projectUserAdditionalPrivilege: projectUserAdditionalPrivilegeService + projectUserAdditionalPrivilege: projectUserAdditionalPrivilegeService, + identityProjectAdditionalPrivilege: identityProjectAdditionalPrivilegeService }); server.decorate("store", { diff --git a/backend/src/server/routes/v2/identity-project-router.ts b/backend/src/server/routes/v2/identity-project-router.ts index d170f87e6..81a59e995 100644 --- a/backend/src/server/routes/v2/identity-project-router.ts +++ b/backend/src/server/routes/v2/identity-project-router.ts @@ -156,6 +156,20 @@ export const registerIdentityProjectRouter = async (server: FastifyZodProvider) identityId: z.string(), createdAt: z.date(), updatedAt: z.date(), + additionalPrivileges: z.array( + z.object({ + id: z.string(), + name: z.string(), + slug: z.string(), + description: z.string().optional().nullable(), + isTemporary: z.boolean(), + temporaryMode: z.string().optional().nullable(), + temporaryRange: z.string().nullable().optional(), + temporaryAccessStartTime: z.date().nullable().optional(), + temporaryAccessEndTime: z.date().nullable().optional(), + createdAt: z.date() + }) + ), roles: z.array( z.object({ id: z.string(), diff --git a/backend/src/services/identity-project/identity-project-dal.ts b/backend/src/services/identity-project/identity-project-dal.ts index dd3ba04f4..b6de21d05 100644 --- a/backend/src/services/identity-project/identity-project-dal.ts +++ b/backend/src/services/identity-project/identity-project-dal.ts @@ -25,6 +25,11 @@ export const identityProjectDALFactory = (db: TDbClient) => { `${TableName.IdentityProjectMembershipRole}.customRoleId`, `${TableName.ProjectRoles}.id` ) + .leftJoin( + TableName.IdentityProjectAdditionalPrivilege, + `${TableName.IdentityProjectMembership}.id`, + `${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId` + ) .select( db.ref("id").withSchema(TableName.IdentityProjectMembership), db.ref("createdAt").withSchema(TableName.IdentityProjectMembership), @@ -42,7 +47,29 @@ export const identityProjectDALFactory = (db: TDbClient) => { db.ref("isTemporary").withSchema(TableName.IdentityProjectMembershipRole), db.ref("temporaryRange").withSchema(TableName.IdentityProjectMembershipRole), db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole), - db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole) + db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole), + db.ref("id").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApId"), + db.ref("name").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApName"), + db.ref("description").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApDescription"), + db.ref("slug").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApSlug"), + db + .ref("temporaryMode") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryMode"), + db.ref("isTemporary").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApIsTemporary"), + db.ref("createdAt").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApCreatedAt"), + db + .ref("temporaryRange") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryRange"), + db + .ref("temporaryAccessStartTime") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryAccessStartTime"), + db + .ref("temporaryAccessEndTime") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryAccessEndTime") ); const members = sqlNestRelationships({ @@ -86,6 +113,33 @@ export const identityProjectDALFactory = (db: TDbClient) => { temporaryAccessStartTime, isTemporary }) + }, + { + label: "additionalPrivileges" as const, + key: "identityApId", + mapper: ({ + identityApId, + identityApDescription, + identityApName, + identityApSlug, + identityApIsTemporary, + identityApTemporaryMode, + identityApTemporaryRange, + identityApCreatedAt, + identityApTemporaryAccessEndTime, + identityApTemporaryAccessStartTime + }) => ({ + id: identityApId, + name: identityApName, + description: identityApDescription, + slug: identityApSlug, + temporaryRange: identityApTemporaryRange, + temporaryMode: identityApTemporaryMode, + temporaryAccessEndTime: identityApTemporaryAccessEndTime, + temporaryAccessStartTime: identityApTemporaryAccessStartTime, + isTemporary: identityApIsTemporary, + createdAt: identityApCreatedAt + }) } ] }); From 5f84de039f532a6c0335e8560bbbeab0778293c2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 21:19:09 +0530 Subject: [PATCH 20/61] feat(ui): finished ui for identity additional privilege --- frontend/src/hooks/api/identities/types.ts | 12 + .../index.tsx | 7 + .../mutation.tsx | 74 +++++ .../queries.tsx | 31 ++ .../types.tsx | 48 +++ frontend/src/hooks/api/index.tsx | 1 + .../AdditionalPrivilegeForm.tsx | 73 +++-- .../AdditionalPrivilegeSection.tsx | 46 ++- .../AdditionalPrivilegeTemporaryAccess.tsx | 56 +++- .../components/IdentityTab/IdentityTab.tsx | 281 +++++++++++++++++- .../{IdentitySection => }/IdentityModal.tsx | 0 .../{IdentitySection => }/IdentityRoles.tsx | 0 .../IdentitySection/IdentitySection.tsx | 107 ------- .../IdentitySection/IdentityTable.tsx | 108 ------- .../components/IdentitySection/index.tsx | 1 - .../IdentityTab/components/index.tsx | 1 - .../MemberListTab/MemberListTab.tsx | 2 +- 17 files changed, 569 insertions(+), 279 deletions(-) create mode 100644 frontend/src/hooks/api/identityProjectAdditionalPrivilege/index.tsx create mode 100644 frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx create mode 100644 frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx create mode 100644 frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx rename frontend/src/views/Project/MembersPage/components/IdentityTab/components/{IdentitySection => }/IdentityModal.tsx (100%) rename frontend/src/views/Project/MembersPage/components/IdentityTab/components/{IdentitySection => }/IdentityRoles.tsx (100%) delete mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentitySection.tsx delete mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityTable.tsx delete mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/index.tsx delete mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/index.tsx diff --git a/frontend/src/hooks/api/identities/types.ts b/frontend/src/hooks/api/identities/types.ts index fd3e88614..b8829f798 100644 --- a/frontend/src/hooks/api/identities/types.ts +++ b/frontend/src/hooks/api/identities/types.ts @@ -41,6 +41,18 @@ export type IdentityMembership = { temporaryAccessStartTime: string | null; temporaryAccessEndTime: string | null; }[]; + additionalPrivileges: { + id: string; + name: string; + description: string | null | undefined; + slug: string; + temporaryRange: string | null | undefined; + temporaryMode: string | null | undefined; + temporaryAccessEndTime: string | null | undefined; + temporaryAccessStartTime: string | null | undefined; + isTemporary: boolean; + createdAt: string; + }[]; createdAt: string; updatedAt: string; }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/index.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/index.tsx new file mode 100644 index 000000000..401a06a72 --- /dev/null +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/index.tsx @@ -0,0 +1,7 @@ +export { + useCreateIdentityProjectAdditionalPrivilege, + useDeleteIdentityProjectAdditionalPrivilege, + useUpdateIdentityProjectAdditionalPrivilege +} from "./mutation"; +export { useGetIdentityProjectPrivilegeDetails } from "./queries"; +export type { TIdentityProjectPrivilege } from "./types"; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx new file mode 100644 index 000000000..420d29485 --- /dev/null +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx @@ -0,0 +1,74 @@ +import { packRules } from "@casl/ability/extra"; +import { useMutation, useQueryClient } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { workspaceKeys } from "../workspace/queries"; +import { + TCreateIdentityProjectPrivilegeDTO, + TDeleteIdentityProjectPrivilegeDTO, + TIdentityProjectPrivilege, + TUpdateIdentityProjectPrivlegeDTO +} from "./types"; + +export const useCreateIdentityProjectAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation< + { privilege: TIdentityProjectPrivilege }, + {}, + TCreateIdentityProjectPrivilegeDTO + >({ + mutationFn: async (dto) => { + const { data } = await apiRequest.post("/api/v1/additional-privilege/identity", { + ...dto, + permissions: packRules(dto.permissions) + }); + return data.privilege; + }, + onSuccess: (_, { projectId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + } + }); +}; + +export const useUpdateIdentityProjectAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation< + { privilege: TIdentityProjectPrivilege }, + {}, + TUpdateIdentityProjectPrivlegeDTO + >({ + mutationFn: async (dto) => { + const { data } = await apiRequest.patch( + `/api/v1/additional-privilege/identity/${dto.privilegeId}`, + { ...dto, permissions: dto.permissions ? packRules(dto.permissions) : undefined } + ); + return data.privilege; + }, + onSuccess: (_, { projectId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + } + }); +}; + +export const useDeleteIdentityProjectAdditionalPrivilege = () => { + const queryClient = useQueryClient(); + + return useMutation< + { privilege: TIdentityProjectPrivilege }, + {}, + TDeleteIdentityProjectPrivilegeDTO + >({ + mutationFn: async (dto) => { + const { data } = await apiRequest.delete( + `/api/v1/additional-privilege/identity/${dto.privilegeId}` + ); + return data.privilege; + }, + onSuccess: (_, { projectId }) => { + queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + } + }); +}; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx new file mode 100644 index 000000000..2bbd71c70 --- /dev/null +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx @@ -0,0 +1,31 @@ +import { PackRule, unpackRules } from "@casl/ability/extra"; +import { useQuery } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { TProjectPermission } from "../roles/types"; +import { TIdentityProjectPrivilege } from "./types"; + +export const identitiyProjectPrivilegeKeys = { + details: (privilegeId: string) => ["project-user-privilege", { privilegeId }] as const +}; + +const fetchIdentityProjectPrivilegeDetails = async (privilegeId: string) => { + const { + data: { privilege } + } = await apiRequest.get<{ + privilege: Omit & { permissions: unknown }; + }>(`/api/v1/additional-privilege/identity/${privilegeId}`); + return { + ...privilege, + permissions: unpackRules(privilege.permissions as PackRule[]) + }; +}; + +export const useGetIdentityProjectPrivilegeDetails = (privilegeId: string) => { + return useQuery({ + enabled: Boolean(privilegeId), + queryKey: identitiyProjectPrivilegeKeys.details(privilegeId), + queryFn: () => fetchIdentityProjectPrivilegeDetails(privilegeId) + }); +}; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx new file mode 100644 index 000000000..3362e3301 --- /dev/null +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx @@ -0,0 +1,48 @@ +import { TProjectPermission } from "../roles/types"; + +export enum IdentityProjectAdditionalPrivilegeTemporaryMode { + Relative = "relative" +} + +export type TIdentityProjectPrivilege = { + projectMembershipId: string; + slug: string; + name: string; + isTemporary: boolean; + id: string; + createdAt: Date; + updatedAt: Date; + description?: string | null | undefined; + temporaryMode?: string | null | undefined; + temporaryRange?: string | null | undefined; + temporaryAccessStartTime?: string | null | undefined; + temporaryAccessEndTime?: Date | null | undefined; + permissions?: TProjectPermission[]; +}; + +export type TCreateIdentityProjectPrivilegeDTO = { + identityId: string; + projectId: string; + slug: string; + name: string; + description?: string; + isTemporary?: boolean; + temporaryMode?: IdentityProjectAdditionalPrivilegeTemporaryMode; + temporaryRange?: string; + temporaryAccessStartTime?: string; + permissions: TProjectPermission[]; +}; + +export type TUpdateIdentityProjectPrivlegeDTO = { + privilegeId: string; + projectId: string; +} & Partial>; + +export type TDeleteIdentityProjectPrivilegeDTO = { + privilegeId: string; + projectId: string; +}; + +export type TGetIdentityProejctPrivilegeDetails = { + privilegeId: string; +}; diff --git a/frontend/src/hooks/api/index.tsx b/frontend/src/hooks/api/index.tsx index 8ea1985df..ed89b51ba 100644 --- a/frontend/src/hooks/api/index.tsx +++ b/frontend/src/hooks/api/index.tsx @@ -6,6 +6,7 @@ export * from "./bots"; export * from "./dynamicSecret"; export * from "./dynamicSecretLease"; export * from "./identities"; +export * from "./identityProjectAdditionalPrivilege"; export * from "./incidentContacts"; export * from "./integrationAuth"; export * from "./integrations"; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx index c0d649942..06d4f4b71 100644 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx @@ -22,8 +22,11 @@ import { useNotificationContext } from "@app/components/context/Notifications/No import { Button, FormControl, Input } from "@app/components/v2"; import { ProjectPermissionSub } from "@app/context"; import { + useCreateIdentityProjectAdditionalPrivilege, useCreateProjectUserAdditionalPrivilege, + useGetIdentityProjectPrivilegeDetails, useGetProjectUserPrivilegeDetails, + useUpdateIdentityProjectAdditionalPrivilege, useUpdateProjectUserAdditionalPrivilege } from "@app/hooks/api"; @@ -32,7 +35,6 @@ import { formRolePermission2API, formSchema, rolePermission2Form, - // rolePermission2Form, TFormSchema } from "../ProjectRoleListTab/components/ProjectRoleModifySection/ProjectRoleModifySection.utils"; import { SecretRollbackPermission } from "../ProjectRoleListTab/components/ProjectRoleModifySection/SecretRollbackPermission"; @@ -124,14 +126,26 @@ type Props = { actorId: string; }; -export const AdditionalPrivilegeForm = ({ onGoBack, privilegeId, actorId, workspaceId }: Props) => { +export const AdditionalPrivilegeForm = ({ + onGoBack, + privilegeId, + actorId, + workspaceId, + isIdentity +}: Props) => { const { createNotification } = useNotificationContext(); const isNewRole = !privilegeId; const { data: projectUserPrivilegeDetails } = useGetProjectUserPrivilegeDetails( - privilegeId || "" + privilegeId && !isIdentity ? privilegeId : "" ); + const { data: identityProjectPrivilegeDetails } = useGetIdentityProjectPrivilegeDetails( + isIdentity && privilegeId ? privilegeId : "" + ); + + const privileges = isIdentity ? identityProjectPrivilegeDetails : projectUserPrivilegeDetails; + const { handleSubmit, register, @@ -141,24 +155,36 @@ export const AdditionalPrivilegeForm = ({ onGoBack, privilegeId, actorId, worksp control } = useForm({ resolver: zodResolver(formSchema), - values: projectUserPrivilegeDetails && { - ...projectUserPrivilegeDetails, - description: projectUserPrivilegeDetails.description || "", - permissions: rolePermission2Form(projectUserPrivilegeDetails.permissions) + values: privileges && { + ...privileges, + description: privileges.description || "", + permissions: rolePermission2Form(privileges.permissions) } }); const createProjectUserAdditionalPrivilege = useCreateProjectUserAdditionalPrivilege(); const updateProjectUserAdditionalPrivilege = useUpdateProjectUserAdditionalPrivilege(); + const createIdentityProjectAdditionalPrivilege = useCreateIdentityProjectAdditionalPrivilege(); + const updateIdentityProjectAdditionalPrivilege = useUpdateIdentityProjectAdditionalPrivilege(); + const handleRoleUpdate = async (el: TFormSchema) => { try { - await updateProjectUserAdditionalPrivilege.mutateAsync({ - ...el, - permissions: formRolePermission2API(el.permissions), - privilegeId: privilegeId as string, - workspaceId - }); + if (isIdentity) { + await updateIdentityProjectAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + privilegeId: privilegeId as string, + projectId: workspaceId + }); + } else { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + privilegeId: privilegeId as string, + workspaceId + }); + } createNotification({ type: "success", text: "Successfully update privilege" }); onGoBack(); } catch (err) { @@ -174,12 +200,21 @@ export const AdditionalPrivilegeForm = ({ onGoBack, privilegeId, actorId, worksp } try { - await createProjectUserAdditionalPrivilege.mutateAsync({ - ...el, - permissions: formRolePermission2API(el.permissions), - projectMembershipId: actorId, - workspaceId - }); + if (isIdentity) { + await createIdentityProjectAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + identityId: actorId, + projectId: workspaceId + }); + } else { + await createProjectUserAdditionalPrivilege.mutateAsync({ + ...el, + permissions: formRolePermission2API(el.permissions), + projectMembershipId: actorId, + workspaceId + }); + } createNotification({ type: "success", text: "Created new privilege" }); onGoBack(); } catch (err) { diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx index c13af0b98..75869761f 100644 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx @@ -19,7 +19,10 @@ import { } from "@app/components/v2"; import { useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; -import { useDeleteProjectUserAdditionalPrivilege } from "@app/hooks/api"; +import { + useDeleteIdentityProjectAdditionalPrivilege, + useDeleteProjectUserAdditionalPrivilege +} from "@app/hooks/api"; import { TWorkspaceUser } from "@app/hooks/api/types"; import { AdditionalPrivilegeForm } from "./AdditionalPrivilegeForm"; @@ -28,40 +31,51 @@ import { AdditionalPrivilegeTemporaryAccess } from "./AdditionalPrivilegeTempora type Props = { onGoBack: VoidFunction; name: string; - projectMembershipId: string; + isIdentity?: boolean; + // isIdentity id - identity id else projectMembershipId + actorId: string; privileges: TWorkspaceUser["additionalPrivileges"]; }; export const AdditionalPrivilegeSection = ({ onGoBack, privileges = [], - projectMembershipId, - name + actorId, + name, + isIdentity }: Props) => { const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ "modifyPrivilege", "deletePrivilege" ] as const); const { createNotification } = useNotificationContext(); - const deleteProjectUserAdditionalPrivilege = useDeleteProjectUserAdditionalPrivilege(); const { currentWorkspace } = useWorkspace(); const workspaceId = currentWorkspace?.id || ""; + const deleteProjectUserAdditionalPrivilege = useDeleteProjectUserAdditionalPrivilege(); + const deleteProjectIdentityAdditionalPrivilege = useDeleteIdentityProjectAdditionalPrivilege(); const onPrivilegeDelete = async (privilegeId: string) => { try { - await deleteProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId, - workspaceId - }); + if (isIdentity) { + await deleteProjectIdentityAdditionalPrivilege.mutateAsync({ + privilegeId, + projectId: workspaceId + }); + } else { + await deleteProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId, + workspaceId + }); + } handlePopUpClose("deletePrivilege"); createNotification({ type: "success", - text: "Successfully removed user privilege" + text: "Successfully removed privilege" }); } catch (err) { createNotification({ type: "error", - text: "Failed to delete user privilege" + text: "Failed to delete privilege" }); } }; @@ -83,7 +97,8 @@ export const AdditionalPrivilegeSection = ({ onGoBack={() => handlePopUpClose("modifyPrivilege")} privilegeId={privilegeDetails?.id} workspaceId={workspaceId} - actorId={projectMembershipId} + isIdentity={isIdentity} + actorId={actorId} /> ); @@ -119,7 +134,11 @@ export const AdditionalPrivilegeSection = ({
{privileges.length === 0 && ( - + )} {privileges.map(({ id, name: privilegeName, description, slug, ...dto }) => (
; type TTemporaryRoleFormProps = { privilegeId: string; workspaceId: string; + isIdentity?: boolean; temporaryConfig?: { isTemporary?: boolean; temporaryAccessEndTime?: string | null; @@ -41,7 +46,8 @@ type TTemporaryRoleFormProps = { export const AdditionalPrivilegeTemporaryAccess = ({ temporaryConfig: defaultValues = {}, workspaceId, - privilegeId + privilegeId, + isIdentity }: TTemporaryRoleFormProps) => { const { popUp, handlePopUpToggle } = usePopUp(["setTempRole"] as const); const { createNotification } = useNotificationContext(); @@ -56,17 +62,29 @@ export const AdditionalPrivilegeTemporaryAccess = ({ isTemporaryFieldValue && new Date() > new Date(defaultValues.temporaryAccessEndTime || ""); const updateProjectUserAdditionalPrivilege = useUpdateProjectUserAdditionalPrivilege(); + const updateProjectIdentityAdditionalPrivilege = useUpdateIdentityProjectAdditionalPrivilege(); const handleGrantTemporaryAccess = async (el: TTemporaryRoleFormSchema) => { try { - await updateProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - workspaceId, - isTemporary: true, - temporaryRange: el.temporaryRange, - temporaryAccessStartTime: new Date().toISOString(), - temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative - }); + if (isIdentity) { + await updateProjectIdentityAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + projectId: workspaceId, + isTemporary: true, + temporaryRange: el.temporaryRange, + temporaryAccessStartTime: new Date().toISOString(), + temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative + }); + } else { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + workspaceId, + isTemporary: true, + temporaryRange: el.temporaryRange, + temporaryAccessStartTime: new Date().toISOString(), + temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative + }); + } createNotification({ type: "success", text: "Successfully updated access" }); handlePopUpToggle("setTempRole"); } catch (err) { @@ -77,11 +95,19 @@ export const AdditionalPrivilegeTemporaryAccess = ({ const handleRevokeTemporaryAccess = async () => { try { - await updateProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - workspaceId, - isTemporary: false - }); + if (isIdentity) { + await updateProjectIdentityAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + projectId: workspaceId, + isTemporary: false + }); + } else { + await updateProjectUserAdditionalPrivilege.mutateAsync({ + privilegeId: privilegeId as string, + workspaceId, + isTemporary: false + }); + } createNotification({ type: "success", text: "Successfully updated access" }); handlePopUpToggle("setTempRole"); } catch (err) { diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx index 58397d96a..3aa301583 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx @@ -1,17 +1,270 @@ +import Link from "next/link"; +import { + faArrowUpRightFromSquare, + faPlus, + faServer, + faUserShield, + faXmark +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { format } from "date-fns"; import { motion } from "framer-motion"; +import { twMerge } from "tailwind-merge"; -import { IdentitySection } from "./components"; +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; +import { ProjectPermissionCan } from "@app/components/permissions"; +import { + Button, + DeleteActionModal, + EmptyState, + IconButton, + Table, + TableContainer, + TableSkeleton, + TBody, + Td, + Th, + THead, + Tr +} from "@app/components/v2"; +import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { withProjectPermission } from "@app/hoc"; +import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMemberships } from "@app/hooks/api"; +import { usePopUp } from "@app/hooks/usePopUp"; -export const IdentityTab = () => { - return ( - - - - ); -}; +import { AdditionalPrivilegeSection } from "../AdditionalPrivilegeSection"; +import { IdentityModal } from "./components/IdentityModal"; +import { IdentityRoles } from "./components/IdentityRoles"; + +export const IdentityTab = withProjectPermission( + () => { + const { createNotification } = useNotificationContext(); + const { currentWorkspace } = useWorkspace(); + + const workspaceId = currentWorkspace?.id ?? ""; + + const { data, isLoading } = useGetWorkspaceIdentityMemberships(currentWorkspace?.id || ""); + const { mutateAsync: deleteMutateAsync } = useDeleteIdentityFromWorkspace(); + + const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ + "identity", + "deleteIdentity", + "upgradePlan", + "additionalPrivilege" + ] as const); + + const onRemoveIdentitySubmit = async (identityId: string) => { + try { + await deleteMutateAsync({ + identityId, + workspaceId + }); + + createNotification({ + text: "Successfully removed identity from project", + type: "success" + }); + + handlePopUpClose("deleteIdentity"); + } catch (err) { + console.error(err); + const error = err as any; + const text = error?.response?.data?.message ?? "Failed to remove identity from project"; + + createNotification({ + text, + type: "error" + }); + } + }; + + if (popUp.additionalPrivilege.isOpen) { + const privilegeDetails = popUp?.additionalPrivilege?.data as { + name: string; + index: number; + identityId: string; + }; + + return ( + + handlePopUpClose("additionalPrivilege")} + privileges={data?.[privilegeDetails.index]?.additionalPrivileges || []} + name={privilegeDetails.name} + actorId={privilegeDetails.identityId} + /> + + ); + } + + return ( + +
+
+

Identities

+
+ + + Documentation{" "} + + + +
+ + {(isAllowed) => ( + + )} + +
+ + + + + + + + + + + {isLoading && } + {!isLoading && + data && + data.length > 0 && + data.map( + ({ identity: { id, name }, roles, createdAt, additionalPrivileges }, index) => { + const hasAdditionalPrivilege = Boolean(additionalPrivileges.length); + return ( + + + + + + + ); + } + )} + {!isLoading && data && data?.length === 0 && ( + + + + )} + +
NameRoleAdded on +
{name} + + {(isAllowed) => ( + + )} + + {format(new Date(createdAt), "yyyy-MM-dd")} +
+ + {(isAllowed) => ( + + handlePopUpOpen("additionalPrivilege", { + name, + index, + identityId: id + }) + } + > + + + )} + + + {(isAllowed) => ( + { + handlePopUpOpen("deleteIdentity", { + identityId: id, + name + }); + }} + size="lg" + colorSchema="danger" + variant="plain" + ariaLabel="update" + className="ml-4" + isDisabled={!isAllowed} + > + + + )} + +
+
+ +
+
+ + + handlePopUpToggle("deleteIdentity", isOpen)} + deleteKey="confirm" + onDeleteApproved={() => + onRemoveIdentitySubmit( + (popUp?.deleteIdentity?.data as { identityId: string })?.identityId + ) + } + /> +
+
+ ); + }, + { action: ProjectPermissionActions.Read, subject: ProjectPermissionSub.Identity } +); diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityModal.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityModal.tsx similarity index 100% rename from frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityModal.tsx rename to frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityModal.tsx diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityRoles.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx similarity index 100% rename from frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityRoles.tsx rename to frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentitySection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentitySection.tsx deleted file mode 100644 index 4410bc639..000000000 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentitySection.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import Link from "next/link"; -import { faArrowUpRightFromSquare, faPlus } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import { createNotification } from "@app/components/notifications"; -import { ProjectPermissionCan } from "@app/components/permissions"; -import { Button, DeleteActionModal } from "@app/components/v2"; -import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; -import { withProjectPermission } from "@app/hoc"; -import { useDeleteIdentityFromWorkspace } from "@app/hooks/api"; -import { usePopUp } from "@app/hooks/usePopUp"; - -import { IdentityModal } from "./IdentityModal"; -import { IdentityTable } from "./IdentityTable"; - -export const IdentitySection = withProjectPermission( - () => { - - const { currentWorkspace } = useWorkspace(); - - const workspaceId = currentWorkspace?.id ?? ""; - - const { mutateAsync: deleteMutateAsync } = useDeleteIdentityFromWorkspace(); - - const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ - "identity", - "deleteIdentity", - "upgradePlan" - ] as const); - - const onRemoveIdentitySubmit = async (identityId: string) => { - try { - await deleteMutateAsync({ - identityId, - workspaceId - }); - - createNotification({ - text: "Successfully removed identity from project", - type: "success" - }); - - handlePopUpClose("deleteIdentity"); - } catch (err) { - console.error(err); - const error = err as any; - const text = error?.response?.data?.message ?? "Failed to remove identity from project"; - - createNotification({ - text, - type: "error" - }); - } - }; - - return ( -
-
-

Identities

-
- - - Documentation{" "} - - - -
- - {(isAllowed) => ( - - )} - -
- - - handlePopUpToggle("deleteIdentity", isOpen)} - deleteKey="confirm" - onDeleteApproved={() => - onRemoveIdentitySubmit( - (popUp?.deleteIdentity?.data as { identityId: string })?.identityId - ) - } - /> -
- ); - }, - { action: ProjectPermissionActions.Read, subject: ProjectPermissionSub.Identity } -); diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityTable.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityTable.tsx deleted file mode 100644 index 24197e9fe..000000000 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/IdentityTable.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { faServer, faXmark } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { format } from "date-fns"; - -import { ProjectPermissionCan } from "@app/components/permissions"; -import { - EmptyState, - IconButton, - Table, - TableContainer, - TableSkeleton, - TBody, - Td, - Th, - THead, - Tr -} from "@app/components/v2"; -import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; -import { useGetWorkspaceIdentityMemberships } from "@app/hooks/api"; -import { UsePopUpState } from "@app/hooks/usePopUp"; - -import { IdentityRoles } from "./IdentityRoles"; - -type Props = { - handlePopUpOpen: ( - popUpName: keyof UsePopUpState<["deleteIdentity", "identity"]>, - data?: { - identityId?: string; - name?: string; - } - ) => void; -}; - -export const IdentityTable = ({ handlePopUpOpen }: Props) => { - const { currentWorkspace } = useWorkspace(); - const { data, isLoading } = useGetWorkspaceIdentityMemberships(currentWorkspace?.id || ""); - - return ( - - - - - - - - - - - {isLoading && } - {!isLoading && - data && - data.length > 0 && - data.map(({ identity: { id, name }, roles, createdAt }) => { - return ( - - - - - - - ); - })} - {!isLoading && data && data?.length === 0 && ( - - - - )} - -
NameRoleAdded on -
{name} - - {(isAllowed) => ( - - )} - - {format(new Date(createdAt), "yyyy-MM-dd")} - - {(isAllowed) => ( - { - handlePopUpOpen("deleteIdentity", { - identityId: id, - name - }); - }} - size="lg" - colorSchema="danger" - variant="plain" - ariaLabel="update" - className="ml-4" - isDisabled={!isAllowed} - > - - - )} - -
- -
-
- ); -}; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/index.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/index.tsx deleted file mode 100644 index f0663a6a5..000000000 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentitySection/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { IdentitySection } from "./IdentitySection"; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/index.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/index.tsx deleted file mode 100644 index f0663a6a5..000000000 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { IdentitySection } from "./IdentitySection"; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx index fdf5a7309..b114aa17b 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx @@ -215,7 +215,7 @@ export const MemberListTab = () => { onGoBack={() => handlePopUpClose("additionalPrivilege")} privileges={members?.[privilegeDetails.index]?.additionalPrivileges || []} name={privilegeDetails.name} - projectMembershipId={privilegeDetails.projectMembershipId} + actorId={privilegeDetails.projectMembershipId} /> ); From 8f85f292db2607e7f47a874e6ad9c9a2e3b58141 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 15 Mar 2024 22:46:17 +0530 Subject: [PATCH 21/61] feat: improved slug with a default generator for ui and server --- ...ity-project-additional-privilege-router.ts | 52 ++++++++++++++++--- .../v1/user-additional-privilege-router.ts | 36 +++++++++++-- .../AdditionalPrivilegeForm.tsx | 34 +++++++----- .../AdditionalPrivilegeSection.tsx | 4 +- .../ProjectRoleModifySection.utils.ts | 1 + 5 files changed, 102 insertions(+), 25 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index 622b003dd..86061d33c 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -1,8 +1,12 @@ +import { packRules } from "@casl/ability/extra"; +import slugify from "@sindresorhus/slugify"; import ms from "ms"; import { z } from "zod"; import { IdentityProjectAdditionalPrivilegeSchema } from "@app/db/schemas"; import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types"; +import { alphaNumericNanoId } from "@app/lib/nanoid"; +import { zpStr } from "@app/lib/zod"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; @@ -13,22 +17,42 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F schema: { body: z.union([ z.object({ - identityId: z.string(), - projectId: z.string(), - slug: z.string().max(60).trim(), - name: z.string().trim(), + identityId: z.string().min(1), + projectId: z.string().min(1), + // disallow empty string + slug: zpStr( + z + .string() + .max(60) + .trim() + .optional() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + ), + name: z.string().trim().min(1), description: z.string().trim().optional(), permissions: z.any().array(), + isPackedPermission: z.boolean().optional().default(true), isTemporary: z.literal(false).default(false) }), z.object({ identityId: z.string(), projectId: z.string(), - slug: z.string().max(60).trim(), + slug: z + .string() + .max(60) + .trim() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }), name: z.string().trim(), description: z.string().trim().optional(), permissions: z.any().array(), isTemporary: z.literal(true), + isPackedPermission: z.boolean().optional().default(true), temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), temporaryAccessStartTime: z.string().datetime() @@ -47,7 +71,9 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actor: req.permission.type, actorOrgId: req.permission.orgId, ...req.body, - permissions: JSON.stringify(req.body.permissions) + permissions: JSON.stringify( + req.body.isPackedPermission ? req.body.permissions : packRules(req.body.permissions) + ) }); return { privilege }; } @@ -62,10 +88,18 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }), body: z .object({ - slug: z.string().max(60).trim(), + // disallow empty string + slug: z + .string() + .max(60) + .trim() + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }), name: z.string().trim(), description: z.string().trim().optional(), permissions: z.any().array(), + isPackedPermission: z.boolean().optional().default(true), isTemporary: z.boolean(), temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), @@ -85,7 +119,9 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actor: req.permission.type, actorOrgId: req.permission.orgId, ...req.body, - permissions: req.body.permissions ? JSON.stringify(req.body.permissions) : undefined, + permissions: req.body.permissions + ? JSON.stringify(req.body.isPackedPermission ? req.body.permissions : packRules(req.body.permissions)) + : undefined, privilegeId: req.params.privilegeId }); return { privilege }; diff --git a/backend/src/ee/routes/v1/user-additional-privilege-router.ts b/backend/src/ee/routes/v1/user-additional-privilege-router.ts index fe40ee259..cd161ab5a 100644 --- a/backend/src/ee/routes/v1/user-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/user-additional-privilege-router.ts @@ -1,8 +1,11 @@ +import slugify from "@sindresorhus/slugify"; import ms from "ms"; import { z } from "zod"; import { ProjectUserAdditionalPrivilegeSchema } from "@app/db/schemas"; import { ProjectUserAdditionalPrivilegeTemporaryMode } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-types"; +import { alphaNumericNanoId } from "@app/lib/nanoid"; +import { zpStr } from "@app/lib/zod"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; @@ -14,7 +17,18 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr body: z.union([ z.object({ projectMembershipId: z.string(), - slug: z.string().max(60).trim(), + // to disallow empty string + slug: zpStr( + z + .string() + .max(60) + .trim() + .optional() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + ), name: z.string().trim(), description: z.string().trim().optional(), permissions: z.any().array(), @@ -22,7 +36,17 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr }), z.object({ projectMembershipId: z.string(), - slug: z.string().max(60).trim(), + slug: zpStr( + z + .string() + .max(60) + .trim() + .optional() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + ), name: z.string().trim(), description: z.string().trim().optional(), permissions: z.any().array(), @@ -60,7 +84,13 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr }), body: z .object({ - slug: z.string().max(60).trim(), + slug: z + .string() + .max(60) + .trim() + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }), name: z.string().trim(), description: z.string().trim().optional(), permissions: z.any().array(), diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx index 06d4f4b71..a6f1d2a48 100644 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx +++ b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeForm.tsx @@ -19,7 +19,8 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; -import { Button, FormControl, Input } from "@app/components/v2"; +import guidGenerator from "@app/components/utilities/randomId"; +import { Button, FormControl, Input, Spinner } from "@app/components/v2"; import { ProjectPermissionSub } from "@app/context"; import { useCreateIdentityProjectAdditionalPrivilege, @@ -134,17 +135,16 @@ export const AdditionalPrivilegeForm = ({ isIdentity }: Props) => { const { createNotification } = useNotificationContext(); - const isNewRole = !privilegeId; + const isEdit = Boolean(privilegeId); - const { data: projectUserPrivilegeDetails } = useGetProjectUserPrivilegeDetails( - privilegeId && !isIdentity ? privilegeId : "" - ); + const { data: projectUserPrivilegeDetails, isLoading: isProjectUserPrivilegeLoading } = + useGetProjectUserPrivilegeDetails(privilegeId && !isIdentity ? privilegeId : ""); - const { data: identityProjectPrivilegeDetails } = useGetIdentityProjectPrivilegeDetails( - isIdentity && privilegeId ? privilegeId : "" - ); + const { data: identityProjectPrivilegeDetails, isLoading: isIdentityProjectPrivilegeLoading } = + useGetIdentityProjectPrivilegeDetails(isIdentity && privilegeId ? privilegeId : ""); const privileges = isIdentity ? identityProjectPrivilegeDetails : projectUserPrivilegeDetails; + const isLoading = isIdentity ? isIdentityProjectPrivilegeLoading : isProjectUserPrivilegeLoading; const { handleSubmit, @@ -155,6 +155,9 @@ export const AdditionalPrivilegeForm = ({ control } = useForm({ resolver: zodResolver(formSchema), + defaultValues: { + slug: `privilege-${guidGenerator().slice(0, 4).toLowerCase()}` + }, values: privileges && { ...privileges, description: privileges.description || "", @@ -194,7 +197,7 @@ export const AdditionalPrivilegeForm = ({ }; const handleFormSubmit = async (el: TFormSchema) => { - if (!isNewRole) { + if (isEdit) { await handleRoleUpdate(el); return; } @@ -223,12 +226,20 @@ export const AdditionalPrivilegeForm = ({ } }; + if (isEdit && isLoading) { + return ( +
+ +
+ ); + } + return (

- {isNewRole ? "New" : "Edit"} user additional privilege + {!isEdit ? "New" : "Edit"} user additional privilege

-
-

- Select multiple privilege that can be granted to the user -

-
- - - - - - - - - -
-
-

Add Privilege

-
-
-
- -
-
- -
- {SINGLE_PERMISSION_LIST.map(({ title, subtitle, icon, formName }) => ( -
- -
- ))} -
- -
-
-
- - -
-
-
- ); -}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx deleted file mode 100644 index 581925ffd..000000000 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeSection.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { - faArrowLeft, - faPencil, - faPlus, - faTrash, - faUserShield -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { motion } from "framer-motion"; - -import { createNotification } from "@app/components/notifications"; -import { - Button, - DeleteActionModal, - EmptyState, - IconButton, - Tag, - Tooltip -} from "@app/components/v2"; -import { useWorkspace } from "@app/context"; -import { usePopUp } from "@app/hooks"; -import { - useDeleteIdentityProjectAdditionalPrivilege, - useDeleteProjectUserAdditionalPrivilege -} from "@app/hooks/api"; -import { TWorkspaceUser } from "@app/hooks/api/types"; - -import { AdditionalPrivilegeForm } from "./AdditionalPrivilegeForm"; -import { AdditionalPrivilegeTemporaryAccess } from "./AdditionalPrivilegeTemporaryAccess"; - -type Props = { - onGoBack: VoidFunction; - name: string; - isIdentity?: boolean; - // isIdentity id - identity id else projectMembershipId - actorId: string; - privileges: TWorkspaceUser["additionalPrivileges"]; -}; - -export const AdditionalPrivilegeSection = ({ - onGoBack, - privileges = [], - actorId, - name, - isIdentity -}: Props) => { - const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ - "modifyPrivilege", - "deletePrivilege" - ] as const); - - const { currentWorkspace } = useWorkspace(); - const workspaceId = currentWorkspace?.id || ""; - const deleteProjectUserAdditionalPrivilege = useDeleteProjectUserAdditionalPrivilege(); - const deleteProjectIdentityAdditionalPrivilege = useDeleteIdentityProjectAdditionalPrivilege(); - - const onPrivilegeDelete = async (privilegeId: string) => { - try { - if (isIdentity) { - await deleteProjectIdentityAdditionalPrivilege.mutateAsync({ - privilegeId, - projectId: workspaceId - }); - } else { - await deleteProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId, - workspaceId - }); - } - handlePopUpClose("deletePrivilege"); - createNotification({ - type: "success", - text: "Successfully removed privilege" - }); - } catch (err) { - createNotification({ - type: "error", - text: "Failed to delete privilege" - }); - } - }; - - if (popUp.modifyPrivilege.isOpen) { - const privilegeDetails = popUp?.modifyPrivilege?.data as { - id: string; - }; - - return ( - - handlePopUpClose("modifyPrivilege")} - privilegeId={privilegeDetails?.id} - workspaceId={workspaceId} - isIdentity={isIdentity} - actorId={actorId} - /> - - ); - } - - return ( - -
-

- Additional Privileges - {name} -

-
- - -
-
-
- {privileges.length === 0 && ( - - )} - {privileges.map(({ id, name: privilegeName, description, slug, ...dto }) => ( -
-
-
- {privilegeName} - - {slug} - -
-
{description}
-
-
- - handlePopUpOpen("modifyPrivilege", { id })} - > - - - - - handlePopUpOpen("deletePrivilege", { name: privilegeName, id })} - > - - - - -
-
- ))} -
- handlePopUpToggle("deletePrivilege", isOpen)} - deleteKey="delete" - onDeleteApproved={async () => - onPrivilegeDelete((popUp?.deletePrivilege.data as { id: string }).id) - } - /> -
- ); -}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx deleted file mode 100644 index d45e9139e..000000000 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/AdditionalPrivilegeTemporaryAccess.tsx +++ /dev/null @@ -1,219 +0,0 @@ -import { Controller, useForm } from "react-hook-form"; -import { faClock } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { twMerge } from "tailwind-merge"; -import { z } from "zod"; - -import { createNotification } from "@app/components/notifications"; -import { - Button, - FormControl, - IconButton, - Input, - Popover, - PopoverContent, - PopoverTrigger, - Tag, - Tooltip -} from "@app/components/v2"; -import { usePopUp } from "@app/hooks"; -import { - useUpdateIdentityProjectAdditionalPrivilege, - useUpdateProjectUserAdditionalPrivilege -} from "@app/hooks/api"; -import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/hooks/api/identityProjectAdditionalPrivilege/types"; -import { ProjectUserAdditionalPrivilegeTemporaryMode } from "@app/hooks/api/projectUserAdditionalPrivilege/types"; - -const temporaryRoleFormSchema = z.object({ - temporaryRange: z.string().min(1, "Required") -}); - -type TTemporaryRoleFormSchema = z.infer; - -type TTemporaryRoleFormProps = { - privilegeId: string; - workspaceId: string; - isIdentity?: boolean; - temporaryConfig?: { - isTemporary?: boolean; - temporaryAccessEndTime?: string | null; - temporaryAccessStartTime?: string | null; - temporaryRange?: string | null; - }; -}; - -export const AdditionalPrivilegeTemporaryAccess = ({ - temporaryConfig: defaultValues = {}, - workspaceId, - privilegeId, - isIdentity -}: TTemporaryRoleFormProps) => { - const { popUp, handlePopUpToggle } = usePopUp(["setTempRole"] as const); - - const { control, handleSubmit } = useForm({ - resolver: zodResolver(temporaryRoleFormSchema), - values: { - temporaryRange: defaultValues.temporaryRange || "1h" - } - }); - const isTemporaryFieldValue = defaultValues.isTemporary; - const isExpired = - isTemporaryFieldValue && new Date() > new Date(defaultValues.temporaryAccessEndTime || ""); - - const updateProjectUserAdditionalPrivilege = useUpdateProjectUserAdditionalPrivilege(); - const updateProjectIdentityAdditionalPrivilege = useUpdateIdentityProjectAdditionalPrivilege(); - - const handleGrantTemporaryAccess = async (el: TTemporaryRoleFormSchema) => { - try { - if (isIdentity) { - await updateProjectIdentityAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - projectId: workspaceId, - isTemporary: true, - temporaryRange: el.temporaryRange, - temporaryAccessStartTime: new Date().toISOString(), - temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative - }); - } else { - await updateProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - workspaceId, - isTemporary: true, - temporaryRange: el.temporaryRange, - temporaryAccessStartTime: new Date().toISOString(), - temporaryMode: ProjectUserAdditionalPrivilegeTemporaryMode.Relative - }); - } - createNotification({ type: "success", text: "Successfully updated access" }); - handlePopUpToggle("setTempRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update access" }); - } - }; - - const handleRevokeTemporaryAccess = async () => { - try { - if (isIdentity) { - await updateProjectIdentityAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - projectId: workspaceId, - isTemporary: false - }); - } else { - await updateProjectUserAdditionalPrivilege.mutateAsync({ - privilegeId: privilegeId as string, - workspaceId, - isTemporary: false - }); - } - createNotification({ type: "success", text: "Successfully updated access" }); - handlePopUpToggle("setTempRole"); - } catch (err) { - console.log(err); - createNotification({ type: "error", text: "Failed to update access" }); - } - }; - - return ( - { - handlePopUpToggle("setTempRole", isOpen); - }} - > - - - - - - - - -
-
- Configure timed access -
- {isExpired && Expired} - ( - - 1m, 2h, 3d.{" "} - - More - - - } - > - - - )} - /> -
- - {isTemporaryFieldValue && ( - - )} -
-
-
-
- ); -}; diff --git a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx b/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx deleted file mode 100644 index 42c37441d..000000000 --- a/frontend/src/views/Project/MembersPage/components/AdditionalPrivilegeSection/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { AdditionalPrivilegeSection } from "./AdditionalPrivilegeSection"; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx index 58577f1ec..816d786ed 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx @@ -3,13 +3,11 @@ import { faArrowUpRightFromSquare, faPlus, faServer, - faUserShield, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { format } from "date-fns"; import { motion } from "framer-motion"; -import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; @@ -32,13 +30,10 @@ import { withProjectPermission } from "@app/hoc"; import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMemberships } from "@app/hooks/api"; import { usePopUp } from "@app/hooks/usePopUp"; -import { AdditionalPrivilegeSection } from "../AdditionalPrivilegeSection"; import { IdentityModal } from "./components/IdentityModal"; -import { IdentityRoles } from "./components/IdentityRoles"; export const IdentityTab = withProjectPermission( () => { - const { currentWorkspace } = useWorkspace(); const workspaceId = currentWorkspace?.id ?? ""; @@ -78,33 +73,6 @@ export const IdentityTab = withProjectPermission( } }; - if (popUp.additionalPrivilege.isOpen) { - const privilegeDetails = popUp?.additionalPrivilege?.data as { - name: string; - index: number; - identityId: string; - }; - - return ( - - handlePopUpClose("additionalPrivilege")} - privileges={data?.[privilegeDetails.index]?.additionalPrivileges || []} - name={privilegeDetails.name} - actorId={privilegeDetails.identityId} - /> - - ); - } - return ( 0 && - data.map( - ({ identity: { id, name }, roles, createdAt, additionalPrivileges }, index) => { - const hasAdditionalPrivilege = Boolean(additionalPrivileges.length); - return ( - - {name} - - - {(isAllowed) => ( - - )} - - - {format(new Date(createdAt), "yyyy-MM-dd")} - -
- { + return ( + + {name} + {format(new Date(createdAt), "yyyy-MM-dd")} + + + {(isAllowed) => ( + { + handlePopUpOpen("deleteIdentity", { + identityId: id, + name + }); + }} + size="lg" + colorSchema="danger" + variant="plain" + ariaLabel="update" + className="ml-4" + isDisabled={!isAllowed} > - {(isAllowed) => ( - - handlePopUpOpen("additionalPrivilege", { - name, - index, - identityId: id - }) - } - > - - - )} - - - {(isAllowed) => ( - { - handlePopUpOpen("deleteIdentity", { - identityId: id, - name - }); - }} - size="lg" - colorSchema="danger" - variant="plain" - ariaLabel="update" - className="ml-4" - isDisabled={!isAllowed} - > - - - )} - -
- - - ); - } - )} + + + )} + + + + ); + })} {!isLoading && data && data?.length === 0 && ( diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx index b114aa17b..9f1711199 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx @@ -3,10 +3,11 @@ import { Controller, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import Link from "next/link"; import { + faClock, + faEdit, faMagnifyingGlass, faPlus, faUsers, - faUserShield, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -22,6 +23,9 @@ import { DeleteActionModal, EmptyState, FormControl, + HoverCard, + HoverCardContent, + HoverCardTrigger, IconButton, Input, Modal, @@ -31,10 +35,12 @@ import { Table, TableContainer, TableSkeleton, + Tag, TBody, Td, Th, THead, + Tooltip, Tr, UpgradePlanModal } from "@app/components/v2"; @@ -54,10 +60,11 @@ import { useGetUserWsKey, useGetWorkspaceUsers } from "@app/hooks/api"; +import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; +import { TWorkspaceUser } from "@app/hooks/api/types"; import { ProjectVersion } from "@app/hooks/api/workspace/types"; -import { AdditionalPrivilegeSection } from "../AdditionalPrivilegeSection"; -import { MemberRoles } from "./MemberRoles"; +import { MemberRoleForm } from "./MemberRoleForm"; const addMemberFormSchema = z.object({ orgMembershipId: z.string().trim() @@ -65,8 +72,14 @@ const addMemberFormSchema = z.object({ type TAddMemberForm = z.infer; +const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; +const formatRoleName = (role: string, customRoleName?: string) => { + if (role === ProjectMembershipRole.Custom) return customRoleName; + if (role === ProjectMembershipRole.Member) return "Developer"; + return role; +}; + export const MemberListTab = () => { - const { t } = useTranslation(); const { currentOrg } = useOrganization(); @@ -87,7 +100,7 @@ export const MemberListTab = () => { "addMember", "removeMember", "upgradePlan", - "additionalPrivilege" + "updateRole" ] as const); const { @@ -195,32 +208,6 @@ export const MemberListTab = () => { ); }, [orgUsers, members]); - if (popUp.additionalPrivilege.isOpen) { - const privilegeDetails = popUp?.additionalPrivilege?.data as { - name: string; - index: number; - projectMembershipId: string; - }; - - return ( - - handlePopUpClose("additionalPrivilege")} - privileges={members?.[privilegeDetails.index]?.additionalPrivileges || []} - name={privilegeDetails.name} - actorId={privilegeDetails.projectMembershipId} - /> - - ); - } - return ( { {isMembersLoading && } {!isMembersLoading && - filterdUsers?.map( - ( - { user: u, inviteEmail, id: membershipId, roles, additionalPrivileges }, - index - ) => { - const name = u ? `${u.firstName} ${u.lastName}` : "-"; - const email = u?.email || inviteEmail; - const hasAdditionalPrivilege = Boolean(additionalPrivileges.length); + filterdUsers?.map((projectMember, index) => { + const { user: u, inviteEmail, id: membershipId, roles } = projectMember; + const name = u ? `${u.firstName} ${u.lastName}` : "-"; + const email = u?.email || inviteEmail; - return ( - - {name} - {email} - - - {(isAllowed) => ( - - handlePopUpOpen("upgradePlan", { description }) - } - membershipId={membershipId} - /> + return ( + + {name} + {email} + +
+ {roles + .slice(0, MAX_ROLES_TO_BE_SHOWN_IN_TABLE) + .map( + ({ + role, + customRoleName, + id, + isTemporary, + temporaryAccessEndTime + }) => { + const isExpired = + new Date() > new Date(temporaryAccessEndTime || ("" as string)); + return ( + +
+
{formatRoleName(role, customRoleName)}
+ {isTemporary && ( +
+ + + +
+ )} +
+
+ ); + } )} - - - - {userId !== u?.id && ( -
- - {(isAllowed) => ( - - handlePopUpOpen("additionalPrivilege", { - name: `${user.firstName} ${user.lastName || ""}`, - index, - projectMembershipId: membershipId - }) + {roles.length > MAX_ROLES_TO_BE_SHOWN_IN_TABLE && ( + + + +{roles.length - MAX_ROLES_TO_BE_SHOWN_IN_TABLE} + + + {roles + .slice(MAX_ROLES_TO_BE_SHOWN_IN_TABLE) + .map( + ({ + role, + customRoleName, + id, + isTemporary, + temporaryAccessEndTime + }) => { + const isExpired = + new Date() > + new Date(temporaryAccessEndTime || ("" as string)); + return ( + +
+
{formatRoleName(role, customRoleName)}
+ {isTemporary && ( +
+ + + new Date( + temporaryAccessEndTime as string + ) && "text-red-600" + )} + /> + +
+ )} +
+
+ ); } - > - -
- )} -
- - {(isAllowed) => ( - - handlePopUpOpen("removeMember", { username: u.username }) - } - > - - - )} - -
+ )} + + )} - - - ); - } - )} + {userId !== u?.id && ( + + + handlePopUpOpen("updateRole", { ...projectMember, index }) + } + > + + + + )} +
+ + + {userId !== u?.id && ( +
+ + {(isAllowed) => ( + + handlePopUpOpen("removeMember", { username: u.username }) + } + > + + + )} + +
+ )} + + + ); + })} {!isMembersLoading && filterdUsers?.length === 0 && ( @@ -418,6 +464,27 @@ export const MemberListTab = () => { )} + handlePopUpToggle("updateRole", state)} + > + + handlePopUpOpen("upgradePlan", { description })} + projectMember={ + filterdUsers?.[ + (popUp.updateRole?.data as TWorkspaceUser & { index: number })?.index + ] as TWorkspaceUser + } + /> + + ; + +type Props = { + projectMember: TWorkspaceUser; + onOpenUpgradeModal: (title: string) => void; +}; +export const MemberRbacSection = ({ projectMember, onOpenUpgradeModal }: Props) => { + const { subscription } = useSubscription(); + const { currentWorkspace } = useWorkspace(); + const workspaceId = currentWorkspace?.id || ""; + const { data: projectRoles, isLoading: isRolesLoading } = useGetProjectRoles(workspaceId); + const { permission } = useProjectPermission(); + const isMemberEditDisabled = permission.cannot( + ProjectPermissionActions.Edit, + ProjectPermissionSub.Member + ); + + const roleForm = useForm({ + resolver: zodResolver(roleFormSchema), + values: { + roles: projectMember?.roles?.map(({ customRoleSlug, role, ...dto }) => ({ + slug: customRoleSlug || role, + temporaryAccess: dto.isTemporary + ? { + isTemporary: true, + temporaryRange: dto.temporaryRange, + temporaryAccessEndTime: dto.temporaryAccessEndTime, + temporaryAccessStartTime: dto.temporaryAccessStartTime + } + : { + isTemporary: dto.isTemporary + } + })) + } + }); + const selectedRoleList = useFieldArray({ + name: "roles", + control: roleForm.control + }); + + const formRoleField = roleForm.watch("roles"); + + const updateMembershipRole = useUpdateUserWorkspaceRole(); + + const handleRoleUpdate = async (data: TRoleForm) => { + if (updateMembershipRole.isLoading) return; + + const sanitizedRoles = data.roles.map((el) => { + const { isTemporary } = el.temporaryAccess; + if (!isTemporary) { + return { role: el.slug, isTemporary: false as const }; + } + return { + role: el.slug, + isTemporary: true as const, + temporaryMode: ProjectUserMembershipTemporaryMode.Relative, + temporaryRange: el.temporaryAccess.temporaryRange, + temporaryAccessStartTime: el.temporaryAccess.temporaryAccessStartTime + }; + }); + + const hasCustomRoleSelected = sanitizedRoles.some( + (el) => !Object.values(ProjectMembershipRole).includes(el.role as ProjectMembershipRole) + ); + + if (hasCustomRoleSelected && subscription && !subscription?.rbac) { + onOpenUpgradeModal( + "You can assign custom roles to members if you upgrade your Infisical plan." + ); + return; + } + + try { + await updateMembershipRole.mutateAsync({ + workspaceId, + membershipId: projectMember.id, + roles: sanitizedRoles + }); + createNotification({ text: "Successfully updated roles", type: "success" }); + roleForm.reset(undefined, { keepValues: true }); + } catch (err) { + createNotification({ text: "Failed to update role", type: "error" }); + } + }; + + if (isRolesLoading) + return ( +
+ +
+ ); + + return ( +
+
Roles
+

Select one of the pre-defined or custom roles.

+
+
+
+ {selectedRoleList.fields.map(({ id }, index) => { + const { temporaryAccess } = formRoleField[index]; + const isTemporary = temporaryAccess?.isTemporary; + const isExpired = + temporaryAccess.isTemporary && + new Date() > new Date(temporaryAccess.temporaryAccessEndTime || ""); + + return ( +
+ ( + + )} + /> + + + + + + + +
+
+ Configure timed access +
+ {isExpired && Expired} + ( + } + isError={Boolean(error?.message)} + errorText={error?.message} + > + + + )} + /> +
+ + {temporaryAccess.isTemporary && ( + + )} +
+
+
+
+ + { + if (selectedRoleList.fields.length > 1) { + selectedRoleList.remove(index); + } + }} + > + + + +
+ ); + })} +
+
+ + {(isAllowed) => ( + + )} + + +
+
+
+
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRoleForm.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRoleForm.tsx new file mode 100644 index 000000000..da6243281 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRoleForm.tsx @@ -0,0 +1,20 @@ +import { TWorkspaceUser } from "@app/hooks/api/types"; + +import { MemberRbacSection } from "./MemberRbacSection"; +import { SpecificPrivilegeSection } from "./SpecificPrivilegeSection"; + +type Props = { + projectMember: TWorkspaceUser; + onOpenUpgradeModal: (title: string) => void; +}; +export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => { + return ( +
+ + +
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx new file mode 100644 index 000000000..8aaf22142 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx @@ -0,0 +1,497 @@ +import { Controller, useForm } from "react-hook-form"; +import { faCancel, faCaretDown, faClock, faClose, faSave } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { formatDistance } from "date-fns"; +import ms from "ms"; +import { twMerge } from "tailwind-merge"; +import { z } from "zod"; + +import { TtlFormLabel } from "@app/components/features"; +import { createNotification } from "@app/components/notifications"; +import { ProjectPermissionCan } from "@app/components/permissions"; +import { + Button, + Checkbox, + DeleteActionModal, + FormControl, + FormLabel, + IconButton, + Input, + Popover, + PopoverContent, + PopoverTrigger, + Select, + SelectItem, + Spinner, + Tag, + Tooltip +} from "@app/components/v2"; +import { + ProjectPermissionActions, + ProjectPermissionSub, + useProjectPermission, + useWorkspace +} from "@app/context"; +import { usePopUp } from "@app/hooks"; +import { + TProjectUserPrivilege, + useCreateProjectUserAdditionalPrivilege, + useDeleteProjectUserAdditionalPrivilege, + useListProjectUserPrivileges, + useUpdateProjectUserAdditionalPrivilege +} from "@app/hooks/api"; + +const secretPermissionSchema = z.object({ + secretPath: z.string().optional(), + environmentSlug: z.string(), + [ProjectPermissionActions.Edit]: z.boolean().optional(), + [ProjectPermissionActions.Read]: z.boolean().optional(), + [ProjectPermissionActions.Create]: z.boolean().optional(), + [ProjectPermissionActions.Delete]: z.boolean().optional(), + temporaryAccess: z.discriminatedUnion("isTemporary", [ + z.object({ + isTemporary: z.literal(true), + temporaryRange: z.string().min(1), + temporaryAccessStartTime: z.string().datetime(), + temporaryAccessEndTime: z.string().datetime().nullable().optional() + }), + z.object({ + isTemporary: z.literal(false) + }) + ]) +}); +type TSecretPermissionForm = z.infer; +const SpecificPrivilegeSecretForm = ({ privilege }: { privilege: TProjectUserPrivilege }) => { + const { currentWorkspace } = useWorkspace(); + const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ + "deletePrivilege" + ] as const); + const { permission } = useProjectPermission(); + const isMemberEditDisabled = permission.cannot( + ProjectPermissionActions.Edit, + ProjectPermissionSub.Member + ); + + const updateUserPrivilege = useUpdateProjectUserAdditionalPrivilege(); + const deleteUserPrivilege = useDeleteProjectUserAdditionalPrivilege(); + + const privilegeForm = useForm({ + resolver: zodResolver(secretPermissionSchema), + values: { + environmentSlug: privilege.permissions?.[0]?.conditions?.environment, + // secret path will be inside $glob operator + secretPath: privilege.permissions?.[0]?.conditions?.secretPath?.$glob || "", + read: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Read) + ), + edit: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Edit) + ), + create: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Create) + ), + delete: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Delete) + ), + // zod will pick it + temporaryAccess: privilege + } + }); + + const temporaryAccessField = privilegeForm.watch("temporaryAccess"); + const isTemporary = temporaryAccessField?.isTemporary; + const isExpired = + temporaryAccessField.isTemporary && + new Date() > new Date(temporaryAccessField.temporaryAccessEndTime || ""); + + const handleUpdatePrivilege = async (data: TSecretPermissionForm) => { + if (updateUserPrivilege.isLoading) return; + try { + const actions = [ + { action: ProjectPermissionActions.Read, allowed: data.read }, + { action: ProjectPermissionActions.Create, allowed: data.create }, + { action: ProjectPermissionActions.Delete, allowed: data.delete }, + { action: ProjectPermissionActions.Edit, allowed: data.edit } + ]; + const conditions: Record = { environment: data.environmentSlug }; + if (data.secretPath) { + conditions.secretPath = { $glob: data.secretPath }; + } + await updateUserPrivilege.mutateAsync({ + privilegeId: privilege.id, + ...data.temporaryAccess, + permissions: actions + .filter(({ allowed }) => allowed) + .map(({ action }) => ({ + action, + subject: [ProjectPermissionSub.Secrets], + conditions + })), + projectMembershipId: privilege.projectMembershipId + }); + createNotification({ + type: "success", + text: "Successfully updated privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to update privilege" + }); + } + }; + + const handleDeletePrivilege = async () => { + if (deleteUserPrivilege.isLoading) return; + try { + await deleteUserPrivilege.mutateAsync({ + privilegeId: privilege.id, + projectMembershipId: privilege.projectMembershipId + }); + createNotification({ + type: "success", + text: "Successfully deleted privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to delete privilege" + }); + } + }; + + const getAccessLabel = () => { + if (isExpired) return "Access expired"; + if (!temporaryAccessField?.isTemporary) return "Permanent"; + return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date()); + }; + + return ( +
+
+
+ ( + + + + )} + /> + ( + + + + )} + /> +
+ ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> +
+
+ + + + + + + +
+
+ Configure timed access +
+ {isExpired && Expired} + ( + } + isError={Boolean(error?.message)} + errorText={error?.message} + > + + + )} + /> +
+ + {temporaryAccessField.isTemporary && ( + + )} +
+
+
+
+ {privilegeForm.formState.isDirty ? ( + <> + + + {privilegeForm.formState.isSubmitting ? ( + + ) : ( + + )} + + + + privilegeForm.reset()} + > + + + + + ) : ( + + handlePopUpOpen("deletePrivilege")} + > + + + + )} +
+
+
+ handlePopUpToggle("deletePrivilege", isOpen)} + deleteKey="delete" + onClose={() => handlePopUpClose("deletePrivilege")} + onDeleteApproved={handleDeletePrivilege} + /> +
+ ); +}; + +type Props = { + membershipId: string; +}; + +export const SpecificPrivilegeSection = ({ membershipId }: Props) => { + const { data: userPrivileges, isLoading } = useListProjectUserPrivileges(membershipId); + const { currentWorkspace } = useWorkspace(); + + const createUserPrivilege = useCreateProjectUserAdditionalPrivilege(); + + const handleCreatePrivilege = async () => { + if (createUserPrivilege.isLoading) return; + try { + await createUserPrivilege.mutateAsync({ + permissions: [ + { + action: ProjectPermissionActions.Read, + subject: [ProjectPermissionSub.Secrets], + conditions: { + environment: currentWorkspace?.environments?.[0].slug + } + } + ], + projectMembershipId: membershipId + }); + createNotification({ + type: "success", + text: "Successfully created privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to create privilege" + }); + } + }; + + return ( +
+
+ Additional Privileges + {isLoading && } +
+

+ Select individual privileges to associate with the user +

+
+ {userPrivileges + ?.filter(({ permissions }) => + permissions?.[0]?.subject?.includes(ProjectPermissionSub.Secrets) + ) + ?.map((privilege) => ( + + ))} +
+ + {(isAllowed) => ( + + )} + +
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/index.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/index.tsx new file mode 100644 index 000000000..765b4061c --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/index.tsx @@ -0,0 +1 @@ +export { MemberRoleForm } from "./MemberRoleForm"; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoles.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoles.tsx deleted file mode 100644 index 50d8cd0d9..000000000 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoles.tsx +++ /dev/null @@ -1,471 +0,0 @@ -import { useState } from "react"; -import { Controller, useForm } from "react-hook-form"; -import { faCheck, faClock, faEdit, faSearch } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { twMerge } from "tailwind-merge"; -import { z } from "zod"; - -import { createNotification } from "@app/components/notifications"; -import { - Button, - Checkbox, - FormControl, - HoverCard, - HoverCardContent, - HoverCardTrigger, - IconButton, - Input, - Popover, - PopoverContent, - PopoverTrigger, - Spinner, - Tag, - Tooltip -} from "@app/components/v2"; -import { useSubscription, useWorkspace } from "@app/context"; -import { usePopUp } from "@app/hooks"; -import { useGetProjectRoles, useUpdateUserWorkspaceRole } from "@app/hooks/api"; -import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; -import { TWorkspaceUser } from "@app/hooks/api/types"; -import { ProjectUserMembershipTemporaryMode } from "@app/hooks/api/workspace/types"; -import { groupBy } from "@app/lib/fn/array"; - -const temporaryRoleFormSchema = z.object({ - temporaryRange: z.string().min(1, "Required") -}); - -type TTemporaryRoleFormSchema = z.infer; - -type TTemporaryRoleFormProps = { - temporaryConfig?: { - isTemporary?: boolean; - temporaryAccessEndTime?: string | null; - temporaryAccessStartTime?: string | null; - temporaryRange?: string | null; - }; - onSetTemporary: (data: { temporaryRange: string; temporaryAccessStartTime?: string }) => void; - onRemoveTemporary: () => void; -}; - -const TemporaryRoleForm = ({ - temporaryConfig: defaultValues = {}, - onSetTemporary, - onRemoveTemporary -}: TTemporaryRoleFormProps) => { - const { popUp, handlePopUpToggle } = usePopUp(["setTempRole"] as const); - const { control, handleSubmit } = useForm({ - resolver: zodResolver(temporaryRoleFormSchema), - values: { - temporaryRange: defaultValues.temporaryRange || "1h" - } - }); - const isTemporaryFieldValue = defaultValues.isTemporary; - const isExpired = - isTemporaryFieldValue && new Date() > new Date(defaultValues.temporaryAccessEndTime || ""); - - return ( - { - handlePopUpToggle("setTempRole", isOpen); - }} - > - - - - - - - - -
-
- Configure timed access -
- {isExpired && Expired} - ( - - 1m, 2h, 3d.{" "} - - More - - - } - > - - - )} - /> -
- {isTemporaryFieldValue && ( - - )} - {!isTemporaryFieldValue ? ( - - ) : ( - - )} -
-
-
-
- ); -}; - -const formSchema = z.record( - z.object({ - isChecked: z.boolean().optional(), - temporaryAccess: z.union([ - z.object({ - isTemporary: z.literal(true), - temporaryRange: z.string().min(1), - temporaryAccessStartTime: z.string().datetime(), - temporaryAccessEndTime: z.string().datetime().nullable().optional() - }), - z.boolean() - ]) - }) -); -type TForm = z.infer; - -export type TMemberRolesProp = { - disableEdit?: boolean; - membershipId: string; - onOpenUpgradeModal: (description: string) => void; - roles: TWorkspaceUser["roles"]; -}; - -const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; - -export const MemberRoles = ({ - roles = [], - disableEdit = false, - membershipId, - onOpenUpgradeModal -}: TMemberRolesProp) => { - const { currentWorkspace } = useWorkspace(); - - const { popUp, handlePopUpToggle } = usePopUp(["editRole"] as const); - const [searchRoles, setSearchRoles] = useState(""); - const { subscription } = useSubscription(); - - const { - handleSubmit, - control, - reset, - setValue, - formState: { isSubmitting, isDirty } - } = useForm({ - resolver: zodResolver(formSchema) - }); - - const workspaceId = currentWorkspace?.id || ""; - - const { data: projectRoles, isLoading: isRolesLoading } = useGetProjectRoles(workspaceId); - const userRolesGroupBySlug = groupBy(roles, ({ customRoleSlug, role }) => customRoleSlug || role); - - const updateMembershipRole = useUpdateUserWorkspaceRole(); - - const handleRoleUpdate = async (data: TForm) => { - const selectedRoles = Object.keys(data) - .filter((el) => Boolean(data[el].isChecked)) - .map((el) => { - const isTemporary = Boolean(data[el].temporaryAccess); - if (!isTemporary) { - return { role: el, isTemporary: false as const }; - } - - const tempCfg = data[el].temporaryAccess as { - temporaryRange: string; - temporaryAccessStartTime: string; - }; - - return { - role: el, - isTemporary: true as const, - temporaryMode: ProjectUserMembershipTemporaryMode.Relative, - temporaryRange: tempCfg.temporaryRange, - temporaryAccessStartTime: tempCfg.temporaryAccessStartTime - }; - }); - - const hasCustomRoleSelected = selectedRoles.some( - (el) => !Object.values(ProjectMembershipRole).includes(el.role as ProjectMembershipRole) - ); - - if (hasCustomRoleSelected && subscription && !subscription?.rbac) { - onOpenUpgradeModal( - "You can assign custom roles to members if you upgrade your Infisical plan." - ); - return; - } - - try { - await updateMembershipRole.mutateAsync({ - workspaceId, - membershipId, - roles: selectedRoles - }); - createNotification({ text: "Successfully updated role", type: "success" }); - handlePopUpToggle("editRole"); - setSearchRoles(""); - } catch (err) { - createNotification({ text: "Failed to update role", type: "error" }); - } - }; - - const formatRoleName = (role: string, customRoleName?: string) => { - if (role === ProjectMembershipRole.Custom) return customRoleName; - if (role === ProjectMembershipRole.Member) return "Developer"; - return role; - }; - - return ( -
- {roles - .slice(0, MAX_ROLES_TO_BE_SHOWN_IN_TABLE) - .map(({ role, customRoleName, id, isTemporary, temporaryAccessEndTime }) => { - const isExpired = new Date() > new Date(temporaryAccessEndTime || ("" as string)); - return ( - -
-
{formatRoleName(role, customRoleName)}
- {isTemporary && ( -
- - - -
- )} -
-
- ); - })} - {roles.length > MAX_ROLES_TO_BE_SHOWN_IN_TABLE && ( - - - +{roles.length - MAX_ROLES_TO_BE_SHOWN_IN_TABLE} - - - {roles - .slice(MAX_ROLES_TO_BE_SHOWN_IN_TABLE) - .map(({ role, customRoleName, id, isTemporary, temporaryAccessEndTime }) => { - const isExpired = new Date() > new Date(temporaryAccessEndTime || ("" as string)); - return ( - -
-
{formatRoleName(role, customRoleName)}
- {isTemporary && ( -
- - new Date(temporaryAccessEndTime as string) && - "text-red-600" - )} - /> - -
- )} -
-
- ); - })}{" "} -
-
- )} -
- { - handlePopUpToggle("editRole", isOpen); - reset(); - }} - > - {!disableEdit && ( - - - - - - )} - - {isRolesLoading ? ( -
- -
- ) : ( -
-
- {projectRoles - ?.filter( - ({ name, slug }) => - name.toLowerCase().includes(searchRoles.toLowerCase()) || - slug.toLowerCase().includes(searchRoles.toLowerCase()) - ) - ?.map(({ id, name, slug }) => { - const userProjectRoleDetails = userRolesGroupBySlug?.[slug]?.[0]; - - return ( -
-
- ( - { - field.onChange(isChecked); - setValue(`${slug}.temporaryAccess`, false); - }} - > - {name} - - )} - /> -
-
- ( - { - setValue(`${slug}.isChecked`, true, { shouldDirty: true }); - console.log(data); - field.onChange({ isTemporary: true, ...data }); - }} - onRemoveTemporary={() => { - setValue(`${slug}.isChecked`, false, { shouldDirty: true }); - field.onChange(false); - }} - /> - )} - /> -
-
- ); - })} -
-
-
- setSearchRoles(el.target.value)} - leftIcon={} - placeholder="Search roles.." - /> -
-
- -
-
-
- )} -
-
-
-
- ); -}; From c8cbcaf10cfef752764f0186d0987cccedf9a011 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Thu, 28 Mar 2024 19:22:54 +0530 Subject: [PATCH 26/61] feat(server): added identity privilege route changes with project slug --- ...ity-project-additional-privilege-router.ts | 145 ++++++++++-------- ...ty-project-additional-privilege-service.ts | 140 +++++++++-------- ...tity-project-additional-privilege-types.ts | 51 +++--- .../ee/services/permission/permission-dal.ts | 66 +++++++- .../services/permission/permission-service.ts | 10 +- backend/src/server/routes/index.ts | 1 + .../routes/v2/identity-project-router.ts | 14 -- .../identity-project/identity-project-dal.ts | 51 +----- 8 files changed, 264 insertions(+), 214 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index 18c196409..aec3a9c97 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -1,12 +1,13 @@ -import { packRules } from "@casl/ability/extra"; +import { MongoAbility, RawRuleOf } from "@casl/ability"; +import { PackRule, packRules, unpackRules } from "@casl/ability/extra"; import slugify from "@sindresorhus/slugify"; import ms from "ms"; import { z } from "zod"; import { IdentityProjectAdditionalPrivilegeSchema } from "@app/db/schemas"; import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types"; +import { ProjectPermissionSet } from "@app/ee/services/permission/project-permission"; import { alphaNumericNanoId } from "@app/lib/nanoid"; -import { zpStr } from "@app/lib/zod"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; @@ -18,37 +19,37 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F body: z.union([ z.object({ identityId: z.string().min(1), - projectId: z.string().min(1), - // disallow empty string - slug: zpStr( - z - .string() - .max(60) - .trim() - .optional() - .default(`privilege-${slugify(alphaNumericNanoId(12))}`) - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }) - ), + projectSlug: z.string().min(1), + slug: z + .string() + .min(1) + .max(60) + .trim() + .optional() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }), permissions: z.any().array(), - isPackedPermission: z.boolean().optional().default(true), + isPackedPermission: z.boolean().optional().default(false), isTemporary: z.literal(false).default(false) }), z.object({ identityId: z.string(), - projectId: z.string(), + projectSlug: z.string().min(1), slug: z .string() + .min(1) .max(60) .trim() + .optional() .default(`privilege-${slugify(alphaNumericNanoId(12))}`) .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" }), permissions: z.any().array(), isTemporary: z.literal(true), - isPackedPermission: z.boolean().optional().default(true), + isPackedPermission: z.boolean().optional().default(false), temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), temporaryAccessStartTime: z.string().datetime() @@ -77,30 +78,33 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }); server.route({ - url: "/:privilegeId", + url: "/", method: "PATCH", schema: { - params: z.object({ - privilegeId: z.string() + body: z.object({ + // disallow empty string + slug: z.string().min(1), + identityId: z.string().min(1), + projectSlug: z.string().min(1), + data: z + .object({ + slug: z + .string() + .min(1) + .max(60) + .trim() + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }), + isPackedPermission: z.boolean().optional().default(false), + permissions: z.any().array(), + isTemporary: z.boolean(), + temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), + temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), + temporaryAccessStartTime: z.string().datetime() + }) + .partial() }), - body: z - .object({ - // disallow empty string - slug: z - .string() - .max(60) - .trim() - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }), - permissions: z.any().array(), - isPackedPermission: z.boolean().optional().default(true), - isTemporary: z.boolean(), - temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), - temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), - temporaryAccessStartTime: z.string().datetime() - }) - .partial(), response: { 200: z.object({ privilege: IdentityProjectAdditionalPrivilegeSchema @@ -109,27 +113,32 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const privilege = await server.services.identityProjectAdditionalPrivilege.updateById({ + const { isPackedPermission, ...data } = req.body.data; + const privilege = await server.services.identityProjectAdditionalPrivilege.updateBySlug({ actorId: req.permission.id, actor: req.permission.type, actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, ...req.body, - permissions: req.body.permissions - ? JSON.stringify(req.body.isPackedPermission ? req.body.permissions : packRules(req.body.permissions)) - : undefined, - privilegeId: req.params.privilegeId + data: { + ...data, + permissions: data?.permissions + ? JSON.stringify(isPackedPermission ? data?.permissions : packRules(data.permissions)) + : undefined + } }); return { privilege }; } }); server.route({ - url: "/:privilegeId", + url: "/", method: "DELETE", schema: { - params: z.object({ - privilegeId: z.string() + body: z.object({ + slug: z.string().min(1), + identityId: z.string().min(1), + projectSlug: z.string().min(1) }), response: { 200: z.object({ @@ -139,23 +148,27 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const privilege = await server.services.identityProjectAdditionalPrivilege.deleteById({ + const privilege = await server.services.identityProjectAdditionalPrivilege.deleteBySlug({ actorId: req.permission.id, actor: req.permission.type, actorAuthMethod: req.permission.authMethod, actorOrgId: req.permission.orgId, - privilegeId: req.params.privilegeId + ...req.body }); return { privilege }; } }); server.route({ - url: "/:privilegeId", + url: "/:slug", method: "GET", schema: { params: z.object({ - privilegeId: z.string() + slug: z.string() + }), + querystring: z.object({ + identityId: z.string().min(1), + projectSlug: z.string().min(1) }), response: { 200: z.object({ @@ -165,24 +178,29 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const privilege = await server.services.identityProjectAdditionalPrivilege.getPrivilegeDetailsById({ + const privilege = await server.services.identityProjectAdditionalPrivilege.getPrivilegeDetailsBySlug({ actorId: req.permission.id, actorAuthMethod: req.permission.authMethod, actor: req.permission.type, actorOrgId: req.permission.orgId, - privilegeId: req.params.privilegeId + slug: req.params.slug, + ...req.query }); return { privilege }; } }); server.route({ - url: "/permissions", - method: "POST", + url: "/", + method: "GET", schema: { - body: z.object({ - identityId: z.string(), - projectId: z.string() + querystring: z.object({ + identityId: z.string().min(1), + projectSlug: z.string().min(1), + unpacked: z + .enum(["false", "true"]) + .transform((el) => el === "true") + .default("true") }), response: { 200: z.object({ @@ -197,9 +215,16 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actor: req.permission.type, actorAuthMethod: req.permission.authMethod, actorOrgId: req.permission.orgId, - projectId: req.body.projectId, - identityId: req.body.identityId + ...req.query }); + if (req.query.unpacked) { + return { + privileges: privileges.map(({ permissions, ...el }) => ({ + ...el, + permissions: unpackRules(permissions as PackRule>>[]) + })) + }; + } return { privileges }; } }); diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts index 3a919d983..81dc11a00 100644 --- a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts @@ -5,6 +5,7 @@ import { isAtLeastAsPrivileged } from "@app/lib/casl"; import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors"; import { ActorType } from "@app/services/auth/auth-type"; import { TIdentityProjectDALFactory } from "@app/services/identity-project/identity-project-dal"; +import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TPermissionServiceFactory } from "../permission/permission-service"; import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; @@ -21,6 +22,7 @@ import { type TIdentityProjectAdditionalPrivilegeServiceFactoryDep = { identityProjectAdditionalPrivilegeDAL: TIdentityProjectAdditionalPrivilegeDALFactory; identityProjectDAL: Pick; + projectDAL: Pick; permissionService: Pick; }; @@ -31,19 +33,24 @@ export type TIdentityProjectAdditionalPrivilegeServiceFactory = ReturnType< export const identityProjectAdditionalPrivilegeServiceFactory = ({ identityProjectAdditionalPrivilegeDAL, identityProjectDAL, - permissionService + permissionService, + projectDAL }: TIdentityProjectAdditionalPrivilegeServiceFactoryDep) => { const create = async ({ slug, actor, actorId, - projectId, identityId, + projectSlug, permissions: customPermission, actorOrgId, actorAuthMethod, ...dto }: TCreateIdentityPrivilegeDTO) => { + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); @@ -65,7 +72,7 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ ); const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); if (!hasRequiredPriviledges) - throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + throw new ForbiddenRequestError({ message: "Failed to update more privileged identity" }); const existingSlug = await identityProjectAdditionalPrivilegeDAL.findOne({ slug, @@ -96,19 +103,23 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ return additionalPrivilege; }; - const updateById = async ({ - privilegeId, + const updateBySlug = async ({ + projectSlug, + slug, + identityId, + data, actorOrgId, actor, actorId, - actorAuthMethod, - ...dto + actorAuthMethod }: TUpdateIdentityPrivilegeDTO) => { - const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); - if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; - const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); - if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); + if (!identityProjectMembership) + throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); const { permission } = await permissionService.getProjectPermission( actor, @@ -127,23 +138,28 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ ); const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); if (!hasRequiredPriviledges) - throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + throw new ForbiddenRequestError({ message: "Failed to update more privileged identity" }); - if (dto?.slug) { + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findOne({ + slug, + projectMembershipId: identityProjectMembership.id + }); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + if (data?.slug) { const existingSlug = await identityProjectAdditionalPrivilegeDAL.findOne({ - slug: dto.slug, + slug: data.slug, projectMembershipId: identityProjectMembership.id }); if (existingSlug && existingSlug.id !== identityPrivilege.id) throw new BadRequestError({ message: "Additional privilege of provided slug exist" }); } - const isTemporary = typeof dto?.isTemporary !== "undefined" ? dto.isTemporary : identityPrivilege.isTemporary; + const isTemporary = typeof data?.isTemporary !== "undefined" ? data.isTemporary : identityPrivilege.isTemporary; if (isTemporary) { - const temporaryAccessStartTime = dto?.temporaryAccessStartTime || identityPrivilege?.temporaryAccessStartTime; - const temporaryRange = dto?.temporaryRange || identityPrivilege?.temporaryRange; + const temporaryAccessStartTime = data?.temporaryAccessStartTime || identityPrivilege?.temporaryAccessStartTime; + const temporaryRange = data?.temporaryRange || identityPrivilege?.temporaryRange; const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.updateById(identityPrivilege.id, { - ...dto, + ...data, temporaryAccessStartTime: new Date(temporaryAccessStartTime || ""), temporaryAccessEndTime: new Date(new Date(temporaryAccessStartTime || "").getTime() + ms(temporaryRange || "")) }); @@ -151,7 +167,7 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ } const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.updateById(identityPrivilege.id, { - ...dto, + ...data, isTemporary: false, temporaryAccessStartTime: null, temporaryAccessEndTime: null, @@ -161,18 +177,22 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ return additionalPrivilege; }; - const deleteById = async ({ + const deleteBySlug = async ({ actorId, + slug, + identityId, + projectSlug, actor, actorOrgId, - privilegeId, actorAuthMethod }: TDeleteIdentityPrivilegeDTO) => { - const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); - if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; - const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); - if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); + if (!identityProjectMembership) + throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); const { permission } = await permissionService.getProjectPermission( actor, @@ -191,25 +211,34 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ ); const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); if (!hasRequiredPriviledges) - throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + throw new ForbiddenRequestError({ message: "Failed to edit more privileged identity" }); + + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findOne({ + slug, + projectMembershipId: identityProjectMembership.id + }); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); const deletedPrivilege = await identityProjectAdditionalPrivilegeDAL.deleteById(identityPrivilege.id); return deletedPrivilege; }; - const getPrivilegeDetailsById = async ({ - privilegeId, + const getPrivilegeDetailsBySlug = async ({ + projectSlug, + identityId, + slug, actorOrgId, actor, actorId, actorAuthMethod }: TGetIdentityPrivilegeDetailsDTO) => { - const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findById(privilegeId); - if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); - - const identityProjectMembership = await identityProjectDAL.findById(identityPrivilege.projectMembershipId); - if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); + if (!identityProjectMembership) + throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -218,31 +247,31 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ actorOrgId ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); - const { permission: identityRolePermission } = await permissionService.getProjectPermission( - ActorType.IDENTITY, - identityProjectMembership.identityId, - identityProjectMembership.projectId, - actorAuthMethod, - actorOrgId - ); - const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); - if (!hasRequiredPriviledges) - throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); + + const identityPrivilege = await identityProjectAdditionalPrivilegeDAL.findOne({ + slug, + projectMembershipId: identityProjectMembership.id + }); + if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); return identityPrivilege; }; const listIdentityProjectPrivileges = async ({ - projectId, identityId, actorOrgId, actor, actorId, - actorAuthMethod + actorAuthMethod, + projectSlug }: TListIdentityPrivilegesDTO) => { - const identityProjectMembership = await identityProjectDAL.findOne({ projectId, identityId }); - if (!identityProjectMembership) throw new BadRequestError({ message: `Failed to find identity` }); + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; + const identityProjectMembership = await identityProjectDAL.findOne({ identityId, projectId }); + if (!identityProjectMembership) + throw new BadRequestError({ message: `Failed to find identity with id ${identityId}` }); const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -251,29 +280,18 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ actorOrgId ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Identity); - const { permission: identityRolePermission } = await permissionService.getProjectPermission( - ActorType.IDENTITY, - identityProjectMembership.identityId, - identityProjectMembership.projectId, - actorAuthMethod, - actorOrgId - ); - const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, identityRolePermission); - if (!hasRequiredPriviledges) - throw new ForbiddenRequestError({ message: "Failed to delete more privileged identity" }); const identityPrivileges = await identityProjectAdditionalPrivilegeDAL.find({ projectMembershipId: identityProjectMembership.id }); - if (!identityPrivileges) throw new BadRequestError({ message: "Identity additional privilege not found" }); return identityPrivileges; }; return { create, - updateById, - deleteById, - getPrivilegeDetailsById, + updateBySlug, + deleteBySlug, + getPrivilegeDetailsBySlug, listIdentityProjectPrivileges }; }; diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts index 0d2b64cc5..88ff01d7d 100644 --- a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types.ts @@ -4,19 +4,16 @@ export enum IdentityProjectAdditionalPrivilegeTemporaryMode { Relative = "relative" } -export type TCreateIdentityPrivilegeDTO = ( +export type TCreateIdentityPrivilegeDTO = { + permissions: unknown; + identityId: string; + projectSlug: string; + slug: string; +} & ( | { - permissions: unknown; - identityId: string; - projectId: string; - slug: string; isTemporary: false; } | { - permissions: unknown; - identityId: string; - projectId: string; - slug: string; isTemporary: true; temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative; temporaryRange: string; @@ -25,21 +22,33 @@ export type TCreateIdentityPrivilegeDTO = ( ) & Omit; -export type TUpdateIdentityPrivilegeDTO = { privilegeId: string } & Omit & - Partial<{ - permissions: unknown; - slug: string; - isTemporary: boolean; - temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative; - temporaryRange: string; - temporaryAccessStartTime: string; - }>; +export type TUpdateIdentityPrivilegeDTO = { slug: string; identityId: string; projectSlug: string } & Omit< + TProjectPermission, + "projectId" +> & { + data: Partial<{ + permissions: unknown; + slug: string; + isTemporary: boolean; + temporaryMode: IdentityProjectAdditionalPrivilegeTemporaryMode.Relative; + temporaryRange: string; + temporaryAccessStartTime: string; + }>; + }; -export type TDeleteIdentityPrivilegeDTO = Omit & { privilegeId: string }; +export type TDeleteIdentityPrivilegeDTO = Omit & { + slug: string; + identityId: string; + projectSlug: string; +}; -export type TGetIdentityPrivilegeDetailsDTO = Omit & { privilegeId: string }; +export type TGetIdentityPrivilegeDetailsDTO = Omit & { + slug: string; + identityId: string; + projectSlug: string; +}; export type TListIdentityPrivilegesDTO = Omit & { identityId: string; - projectId: string; + projectSlug: string; }; diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index dda4bee50..a8072c0d3 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -144,6 +144,8 @@ export const permissionDALFactory = (db: TDbClient) => { } ] }); + + if (!permission?.[0]) return undefined; // when introducting cron mode change it here const activeRoles = permission?.[0]?.roles?.filter( ({ isTemporary, temporaryAccessEndTime }) => @@ -155,9 +157,7 @@ export const permissionDALFactory = (db: TDbClient) => { !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) ); - return permission?.[0] - ? { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges } - : undefined; + return { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges }; } catch (error) { throw new DatabaseError({ error, name: "GetProjectPermission" }); } @@ -176,6 +176,11 @@ export const permissionDALFactory = (db: TDbClient) => { `${TableName.IdentityProjectMembershipRole}.customRoleId`, `${TableName.ProjectRoles}.id` ) + .leftJoin( + TableName.IdentityProjectAdditionalPrivilege, + `${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId`, + `${TableName.IdentityProjectMembership}.id` + ) .join( // Join the Project table to later select orgId TableName.Project, @@ -191,9 +196,28 @@ export const permissionDALFactory = (db: TDbClient) => { db.ref("role").withSchema(TableName.IdentityProjectMembership).as("oldRoleField"), db.ref("createdAt").withSchema(TableName.IdentityProjectMembership).as("membershipCreatedAt"), db.ref("updatedAt").withSchema(TableName.IdentityProjectMembership).as("membershipUpdatedAt"), - db.ref("slug").withSchema(TableName.ProjectRoles).as("customRoleSlug") - ) - .select("permissions"); + db.ref("slug").withSchema(TableName.ProjectRoles).as("customRoleSlug"), + db.ref("permissions").withSchema(TableName.ProjectRoles), + db.ref("id").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApId"), + db.ref("permissions").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApPermissions"), + db + .ref("temporaryMode") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryMode"), + db.ref("isTemporary").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApIsTemporary"), + db + .ref("temporaryRange") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryRange"), + db + .ref("temporaryAccessStartTime") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryAccessStartTime"), + db + .ref("temporaryAccessEndTime") + .withSchema(TableName.IdentityProjectAdditionalPrivilege) + .as("identityApTemporaryAccessEndTime") + ); const permission = sqlNestRelationships({ data: docs, @@ -218,16 +242,44 @@ export const permissionDALFactory = (db: TDbClient) => { permissions: z.unknown(), customRoleSlug: z.string().optional().nullable() }).parse(data) + }, + { + key: "identityApId", + label: "additionalPrivileges" as const, + mapper: ({ + identityApId, + identityApPermissions, + identityApIsTemporary, + identityApTemporaryMode, + identityApTemporaryRange, + identityApTemporaryAccessEndTime, + identityApTemporaryAccessStartTime + }) => ({ + id: identityApId, + permissions: identityApPermissions, + temporaryRange: identityApTemporaryRange, + temporaryMode: identityApTemporaryMode, + temporaryAccessEndTime: identityApTemporaryAccessEndTime, + temporaryAccessStartTime: identityApTemporaryAccessStartTime, + isTemporary: identityApIsTemporary + }) } ] }); + if (!permission?.[0]) return undefined; + // when introducting cron mode change it here const activeRoles = permission?.[0]?.roles.filter( ({ isTemporary, temporaryAccessEndTime }) => !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) ); - return permission?.[0] ? { ...permission[0], roles: activeRoles } : undefined; + const activeAdditionalPrivileges = permission?.[0]?.additionalPrivileges?.filter( + ({ isTemporary, temporaryAccessEndTime }) => + !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) + ); + + return { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges }; } catch (error) { throw new DatabaseError({ error, name: "GetProjectIdentityPermission" }); } diff --git a/backend/src/ee/services/permission/permission-service.ts b/backend/src/ee/services/permission/permission-service.ts index d836e88df..f4e423797 100644 --- a/backend/src/ee/services/permission/permission-service.ts +++ b/backend/src/ee/services/permission/permission-service.ts @@ -238,8 +238,16 @@ export const permissionServiceFactory = ({ throw new UnauthorizedError({ name: "You are not a member of this organization" }); } + const rolePermissions = + identityProjectPermission.roles?.map(({ role, permissions }) => ({ role, permissions })) || []; + const additionalPrivileges = + identityProjectPermission.additionalPrivileges?.map(({ permissions }) => ({ + role: ProjectMembershipRole.Custom, + permissions + })) || []; + return { - permission: buildProjectPermission(identityProjectPermission.roles), + permission: buildProjectPermission(rolePermissions.concat(additionalPrivileges)), membership: identityProjectPermission, hasRole: (role: string) => identityProjectPermission.roles.findIndex( diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index c33f62029..7745a8a04 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -560,6 +560,7 @@ export const registerRoutes = async ( projectRoleDAL }); const identityProjectAdditionalPrivilegeService = identityProjectAdditionalPrivilegeServiceFactory({ + projectDAL, identityProjectAdditionalPrivilegeDAL, permissionService, identityProjectDAL diff --git a/backend/src/server/routes/v2/identity-project-router.ts b/backend/src/server/routes/v2/identity-project-router.ts index 81a59e995..d170f87e6 100644 --- a/backend/src/server/routes/v2/identity-project-router.ts +++ b/backend/src/server/routes/v2/identity-project-router.ts @@ -156,20 +156,6 @@ export const registerIdentityProjectRouter = async (server: FastifyZodProvider) identityId: z.string(), createdAt: z.date(), updatedAt: z.date(), - additionalPrivileges: z.array( - z.object({ - id: z.string(), - name: z.string(), - slug: z.string(), - description: z.string().optional().nullable(), - isTemporary: z.boolean(), - temporaryMode: z.string().optional().nullable(), - temporaryRange: z.string().nullable().optional(), - temporaryAccessStartTime: z.date().nullable().optional(), - temporaryAccessEndTime: z.date().nullable().optional(), - createdAt: z.date() - }) - ), roles: z.array( z.object({ id: z.string(), diff --git a/backend/src/services/identity-project/identity-project-dal.ts b/backend/src/services/identity-project/identity-project-dal.ts index b6de21d05..e932d2068 100644 --- a/backend/src/services/identity-project/identity-project-dal.ts +++ b/backend/src/services/identity-project/identity-project-dal.ts @@ -47,29 +47,7 @@ export const identityProjectDALFactory = (db: TDbClient) => { db.ref("isTemporary").withSchema(TableName.IdentityProjectMembershipRole), db.ref("temporaryRange").withSchema(TableName.IdentityProjectMembershipRole), db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole), - db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole), - db.ref("id").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApId"), - db.ref("name").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApName"), - db.ref("description").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApDescription"), - db.ref("slug").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApSlug"), - db - .ref("temporaryMode") - .withSchema(TableName.IdentityProjectAdditionalPrivilege) - .as("identityApTemporaryMode"), - db.ref("isTemporary").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApIsTemporary"), - db.ref("createdAt").withSchema(TableName.IdentityProjectAdditionalPrivilege).as("identityApCreatedAt"), - db - .ref("temporaryRange") - .withSchema(TableName.IdentityProjectAdditionalPrivilege) - .as("identityApTemporaryRange"), - db - .ref("temporaryAccessStartTime") - .withSchema(TableName.IdentityProjectAdditionalPrivilege) - .as("identityApTemporaryAccessStartTime"), - db - .ref("temporaryAccessEndTime") - .withSchema(TableName.IdentityProjectAdditionalPrivilege) - .as("identityApTemporaryAccessEndTime") + db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole) ); const members = sqlNestRelationships({ @@ -113,33 +91,6 @@ export const identityProjectDALFactory = (db: TDbClient) => { temporaryAccessStartTime, isTemporary }) - }, - { - label: "additionalPrivileges" as const, - key: "identityApId", - mapper: ({ - identityApId, - identityApDescription, - identityApName, - identityApSlug, - identityApIsTemporary, - identityApTemporaryMode, - identityApTemporaryRange, - identityApCreatedAt, - identityApTemporaryAccessEndTime, - identityApTemporaryAccessStartTime - }) => ({ - id: identityApId, - name: identityApName, - description: identityApDescription, - slug: identityApSlug, - temporaryRange: identityApTemporaryRange, - temporaryMode: identityApTemporaryMode, - temporaryAccessEndTime: identityApTemporaryAccessEndTime, - temporaryAccessStartTime: identityApTemporaryAccessStartTime, - isTemporary: identityApIsTemporary, - createdAt: identityApCreatedAt - }) } ] }); From 64e868a151bd97975273f8fe08ce956568a4878b Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Thu, 28 Mar 2024 19:23:29 +0530 Subject: [PATCH 27/61] feat(ui): updated ui with identity privilege hooks and new role form --- frontend/src/hooks/api/identities/types.ts | 48 +- .../mutation.tsx | 69 +-- .../queries.tsx | 82 ++- .../types.tsx | 52 +- .../components/IdentityTab/IdentityTab.tsx | 161 +++++- .../IdentityRoleForm/IdentityRbacSection.tsx | 341 ++++++++++++ .../IdentityRoleForm/IdentityRoleForm.tsx | 20 + .../SpecificPrivilegeSection.tsx | 515 ++++++++++++++++++ .../components/IdentityRoleForm/index.tsx | 1 + .../IdentityTab/components/IdentityRoles.tsx | 459 ---------------- .../MemberListTab/MemberListTab.tsx | 2 +- .../SpecificPrivilegeSection.tsx | 4 +- 12 files changed, 1196 insertions(+), 558 deletions(-) create mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRoleForm.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx create mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/index.tsx delete mode 100644 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx diff --git a/frontend/src/hooks/api/identities/types.ts b/frontend/src/hooks/api/identities/types.ts index b8829f798..4ac19c351 100644 --- a/frontend/src/hooks/api/identities/types.ts +++ b/frontend/src/hooks/api/identities/types.ts @@ -29,30 +29,30 @@ export type IdentityMembershipOrg = { export type IdentityMembership = { id: string; identity: Identity; - roles: { - id: string; - role: "owner" | "admin" | "member" | "no-access" | "custom"; - customRoleId: string; - customRoleName: string; - customRoleSlug: string; - isTemporary: boolean; - temporaryMode: string | null; - temporaryRange: string | null; - temporaryAccessStartTime: string | null; - temporaryAccessEndTime: string | null; - }[]; - additionalPrivileges: { - id: string; - name: string; - description: string | null | undefined; - slug: string; - temporaryRange: string | null | undefined; - temporaryMode: string | null | undefined; - temporaryAccessEndTime: string | null | undefined; - temporaryAccessStartTime: string | null | undefined; - isTemporary: boolean; - createdAt: string; - }[]; + roles: Array< + { + id: string; + role: "owner" | "admin" | "member" | "no-access" | "custom"; + customRoleId: string; + customRoleName: string; + customRoleSlug: string; + } & ( + | { + isTemporary: false; + temporaryRange: null; + temporaryMode: null; + temporaryAccessEndTime: null; + temporaryAccessStartTime: null; + } + | { + isTemporary: true; + temporaryRange: string; + temporaryMode: string; + temporaryAccessEndTime: string; + temporaryAccessStartTime: string; + } + ) + >; createdAt: string; updatedAt: string; }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx index 420d29485..d9a2a0b0a 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx @@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; -import { workspaceKeys } from "../workspace/queries"; +import { identitiyProjectPrivilegeKeys } from "./queries"; import { TCreateIdentityProjectPrivilegeDTO, TDeleteIdentityProjectPrivilegeDTO, @@ -14,20 +14,19 @@ import { export const useCreateIdentityProjectAdditionalPrivilege = () => { const queryClient = useQueryClient(); - return useMutation< - { privilege: TIdentityProjectPrivilege }, - {}, - TCreateIdentityProjectPrivilegeDTO - >({ + return useMutation({ mutationFn: async (dto) => { const { data } = await apiRequest.post("/api/v1/additional-privilege/identity", { ...dto, + isPackedPermission: true, permissions: packRules(dto.permissions) }); return data.privilege; }, - onSuccess: (_, { projectId }) => { - queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + onSuccess: (_, { projectSlug, identityId }) => { + queryClient.invalidateQueries( + identitiyProjectPrivilegeKeys.list({ projectSlug, identityId }) + ); } }); }; @@ -35,20 +34,24 @@ export const useCreateIdentityProjectAdditionalPrivilege = () => { export const useUpdateIdentityProjectAdditionalPrivilege = () => { const queryClient = useQueryClient(); - return useMutation< - { privilege: TIdentityProjectPrivilege }, - {}, - TUpdateIdentityProjectPrivlegeDTO - >({ - mutationFn: async (dto) => { - const { data } = await apiRequest.patch( - `/api/v1/additional-privilege/identity/${dto.privilegeId}`, - { ...dto, permissions: dto.permissions ? packRules(dto.permissions) : undefined } - ); - return data.privilege; + return useMutation({ + mutationFn: async ({ slug, projectSlug, identityId, data }) => { + const { data: res } = await apiRequest.patch("/api/v1/additional-privilege/identity", { + slug, + projectSlug, + identityId, + data: { + isPackedPermission: true, + ...data, + permissions: data.permissions ? packRules(data.permissions) : undefined + } + }); + return res.privilege; }, - onSuccess: (_, { projectId }) => { - queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + onSuccess: (_, { projectSlug, identityId }) => { + queryClient.invalidateQueries( + identitiyProjectPrivilegeKeys.list({ projectSlug, identityId }) + ); } }); }; @@ -56,19 +59,21 @@ export const useUpdateIdentityProjectAdditionalPrivilege = () => { export const useDeleteIdentityProjectAdditionalPrivilege = () => { const queryClient = useQueryClient(); - return useMutation< - { privilege: TIdentityProjectPrivilege }, - {}, - TDeleteIdentityProjectPrivilegeDTO - >({ - mutationFn: async (dto) => { - const { data } = await apiRequest.delete( - `/api/v1/additional-privilege/identity/${dto.privilegeId}` - ); + return useMutation({ + mutationFn: async ({ identityId, projectSlug, slug }) => { + const { data } = await apiRequest.delete("/api/v1/additional-privilege/identity", { + data: { + identityId, + projectSlug, + slug + } + }); return data.privilege; }, - onSuccess: (_, { projectId }) => { - queryClient.invalidateQueries(workspaceKeys.getWorkspaceIdentityMemberships(projectId)); + onSuccess: (_, { projectSlug, identityId }) => { + queryClient.invalidateQueries( + identitiyProjectPrivilegeKeys.list({ projectSlug, identityId }) + ); } }); }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx index 2bbd71c70..8ad60ba6c 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx @@ -4,28 +4,74 @@ import { useQuery } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; import { TProjectPermission } from "../roles/types"; -import { TIdentityProjectPrivilege } from "./types"; +import { + TGetIdentityProejctPrivilegeDetails as TGetIdentityProjectPrivilegeDetails, + TIdentityProjectPrivilege, + TListIdentityUserPrivileges as TListIdentityProjectPrivileges +} from "./types"; export const identitiyProjectPrivilegeKeys = { - details: (privilegeId: string) => ["project-user-privilege", { privilegeId }] as const + details: ({ identityId, slug, projectSlug }: TGetIdentityProjectPrivilegeDetails) => + [ + "identity-user-privilege", + { + identityId, + projectSlug, + slug + } + ] as const, + list: ({ projectSlug, identityId }: TListIdentityProjectPrivileges) => + ["identity-user-privileges", { identityId, projectSlug }] as const }; -const fetchIdentityProjectPrivilegeDetails = async (privilegeId: string) => { - const { - data: { privilege } - } = await apiRequest.get<{ - privilege: Omit & { permissions: unknown }; - }>(`/api/v1/additional-privilege/identity/${privilegeId}`); - return { - ...privilege, - permissions: unpackRules(privilege.permissions as PackRule[]) - }; -}; - -export const useGetIdentityProjectPrivilegeDetails = (privilegeId: string) => { +export const useGetIdentityProjectPrivilegeDetails = ({ + projectSlug, + identityId, + slug +}: TGetIdentityProjectPrivilegeDetails) => { return useQuery({ - enabled: Boolean(privilegeId), - queryKey: identitiyProjectPrivilegeKeys.details(privilegeId), - queryFn: () => fetchIdentityProjectPrivilegeDetails(privilegeId) + enabled: Boolean(projectSlug && identityId && slug), + queryKey: identitiyProjectPrivilegeKeys.details({ projectSlug, slug, identityId }), + queryFn: async () => { + const { + data: { privilege } + } = await apiRequest.get<{ + privilege: Omit & { permissions: unknown }; + }>(`/api/v1/additional-privilege/identity/${slug}`, { + params: { + identityId, + projectSlug + } + }); + return { + ...privilege, + permissions: unpackRules(privilege.permissions as PackRule[]) + }; + } + }); +}; + +export const useListIdentityProjectPrivileges = ({ + projectSlug, + identityId +}: TListIdentityProjectPrivileges) => { + return useQuery({ + enabled: Boolean(projectSlug && identityId), + queryKey: identitiyProjectPrivilegeKeys.list({ projectSlug, identityId }), + queryFn: async () => { + const { + data: { privileges } + } = await apiRequest.get<{ + privileges: Array< + Omit & { permissions: unknown } + >; + }>("/api/v1/additional-privilege/identity", { + params: { identityId, projectSlug, unpacked: false } + }); + return privileges.map((el) => ({ + ...el, + permissions: unpackRules(el.permissions as PackRule[]) + })); + } }); }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx index 3362e3301..1e07db597 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx @@ -7,25 +7,31 @@ export enum IdentityProjectAdditionalPrivilegeTemporaryMode { export type TIdentityProjectPrivilege = { projectMembershipId: string; slug: string; - name: string; - isTemporary: boolean; id: string; createdAt: Date; updatedAt: Date; - description?: string | null | undefined; - temporaryMode?: string | null | undefined; - temporaryRange?: string | null | undefined; - temporaryAccessStartTime?: string | null | undefined; - temporaryAccessEndTime?: Date | null | undefined; permissions?: TProjectPermission[]; -}; +} & ( + | { + isTemporary: true; + temporaryMode: string; + temporaryRange: string; + temporaryAccessStartTime: string; + temporaryAccessEndTime?: string; + } + | { + isTemporary: false; + temporaryMode?: null; + temporaryRange?: null; + temporaryAccessStartTime?: null; + temporaryAccessEndTime?: null; + } + ); export type TCreateIdentityProjectPrivilegeDTO = { identityId: string; - projectId: string; - slug: string; - name: string; - description?: string; + projectSlug: string; + slug?: string; isTemporary?: boolean; temporaryMode?: IdentityProjectAdditionalPrivilegeTemporaryMode; temporaryRange?: string; @@ -34,15 +40,25 @@ export type TCreateIdentityProjectPrivilegeDTO = { }; export type TUpdateIdentityProjectPrivlegeDTO = { - privilegeId: string; - projectId: string; -} & Partial>; + projectSlug: string; + identityId: string; + slug: string; + data: Partial>; +}; export type TDeleteIdentityProjectPrivilegeDTO = { - privilegeId: string; - projectId: string; + projectSlug: string; + identityId: string; + slug: string; +}; + +export type TListIdentityUserPrivileges = { + projectSlug: string; + identityId: string; }; export type TGetIdentityProejctPrivilegeDetails = { - privilegeId: string; + projectSlug: string; + identityId: string; + slug: string; }; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx index 816d786ed..d82c53d2a 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx @@ -1,6 +1,8 @@ import Link from "next/link"; import { faArrowUpRightFromSquare, + faClock, + faEdit, faPlus, faServer, faXmark @@ -8,6 +10,7 @@ import { import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { format } from "date-fns"; import { motion } from "framer-motion"; +import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; @@ -15,23 +18,39 @@ import { Button, DeleteActionModal, EmptyState, + HoverCard, + HoverCardContent, + HoverCardTrigger, IconButton, + Modal, + ModalContent, Table, TableContainer, TableSkeleton, + Tag, TBody, Td, Th, THead, + Tooltip, Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; import { withProjectPermission } from "@app/hoc"; import { useDeleteIdentityFromWorkspace, useGetWorkspaceIdentityMemberships } from "@app/hooks/api"; +import { IdentityMembership } from "@app/hooks/api/identities/types"; +import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; import { usePopUp } from "@app/hooks/usePopUp"; import { IdentityModal } from "./components/IdentityModal"; +import { IdentityRoleForm } from "./components/IdentityRoleForm"; +const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; +const formatRoleName = (role: string, customRoleName?: string) => { + if (role === ProjectMembershipRole.Custom) return customRoleName; + if (role === ProjectMembershipRole.Member) return "Developer"; + return role; +}; export const IdentityTab = withProjectPermission( () => { const { currentWorkspace } = useWorkspace(); @@ -45,7 +64,7 @@ export const IdentityTab = withProjectPermission( "identity", "deleteIdentity", "upgradePlan", - "additionalPrivilege" + "updateRole" ] as const); const onRemoveIdentitySubmit = async (identityId: string) => { @@ -75,7 +94,7 @@ export const IdentityTab = withProjectPermission( return ( 0 && - data.map(({ identity: { id, name }, createdAt }) => { + data.map((identityMember, index) => { + const { + identity: { id, name }, + roles, + createdAt + } = identityMember; return ( {name} + + +
+ {roles + .slice(0, MAX_ROLES_TO_BE_SHOWN_IN_TABLE) + .map( + ({ + role, + customRoleName, + id: roleId, + isTemporary, + temporaryAccessEndTime + }) => { + const isExpired = + new Date() > new Date(temporaryAccessEndTime || ("" as string)); + return ( + +
+
{formatRoleName(role, customRoleName)}
+ {isTemporary && ( +
+ + + +
+ )} +
+
+ ); + } + )} + {roles.length > MAX_ROLES_TO_BE_SHOWN_IN_TABLE && ( + + + +{roles.length - MAX_ROLES_TO_BE_SHOWN_IN_TABLE} + + + {roles + .slice(MAX_ROLES_TO_BE_SHOWN_IN_TABLE) + .map( + ({ + role, + customRoleName, + id: roleId, + isTemporary, + temporaryAccessEndTime + }) => { + const isExpired = + new Date() > + new Date(temporaryAccessEndTime || ("" as string)); + return ( + +
+
{formatRoleName(role, customRoleName)}
+ {isTemporary && ( +
+ + + new Date( + temporaryAccessEndTime as string + ) && "text-red-600" + )} + /> + +
+ )} +
+
+ ); + } + )} +
+
+ )} + + + handlePopUpOpen("updateRole", { ...identityMember, index }) + } + > + + + +
+ {format(new Date(createdAt), "yyyy-MM-dd")} - + handlePopUpToggle("updateRole", state)} + > + + + handlePopUpOpen("upgradePlan", { description }) + } + identityProjectMember={ + data?.[ + (popUp.updateRole?.data as IdentityMembership & { index: number })?.index + ] as IdentityMembership + } + /> + + ; + +type Props = { + identityProjectMember: IdentityMembership; + onOpenUpgradeModal: (title: string) => void; +}; +export const IdentityRbacSection = ({ identityProjectMember, onOpenUpgradeModal }: Props) => { + const { subscription } = useSubscription(); + const { currentWorkspace } = useWorkspace(); + const workspaceId = currentWorkspace?.id || ""; + const { data: projectRoles, isLoading: isRolesLoading } = useGetProjectRoles(workspaceId); + const { permission } = useProjectPermission(); + const isMemberEditDisabled = permission.cannot( + ProjectPermissionActions.Edit, + ProjectPermissionSub.Identity + ); + + const roleForm = useForm({ + resolver: zodResolver(roleFormSchema), + values: { + roles: identityProjectMember?.roles?.map(({ customRoleSlug, role, ...dto }) => ({ + slug: customRoleSlug || role, + temporaryAccess: dto.isTemporary + ? { + isTemporary: true, + temporaryRange: dto.temporaryRange, + temporaryAccessEndTime: dto.temporaryAccessEndTime, + temporaryAccessStartTime: dto.temporaryAccessStartTime + } + : { + isTemporary: dto.isTemporary + } + })) + } + }); + const selectedRoleList = useFieldArray({ + name: "roles", + control: roleForm.control + }); + + const formRoleField = roleForm.watch("roles"); + + const updateMembershipRole = useUpdateIdentityWorkspaceRole(); + + const handleRoleUpdate = async (data: TRoleForm) => { + if (updateMembershipRole.isLoading) return; + + const sanitizedRoles = data.roles.map((el) => { + const { isTemporary } = el.temporaryAccess; + if (!isTemporary) { + return { role: el.slug, isTemporary: false as const }; + } + return { + role: el.slug, + isTemporary: true as const, + temporaryMode: ProjectUserMembershipTemporaryMode.Relative, + temporaryRange: el.temporaryAccess.temporaryRange, + temporaryAccessStartTime: el.temporaryAccess.temporaryAccessStartTime + }; + }); + + const hasCustomRoleSelected = sanitizedRoles.some( + (el) => !Object.values(ProjectMembershipRole).includes(el.role as ProjectMembershipRole) + ); + + if (hasCustomRoleSelected && subscription && !subscription?.rbac) { + onOpenUpgradeModal( + "You can assign custom roles to members if you upgrade your Infisical plan." + ); + return; + } + + try { + await updateMembershipRole.mutateAsync({ + workspaceId, + identityId: identityProjectMember.identity.id, + roles: sanitizedRoles + }); + createNotification({ text: "Successfully updated roles", type: "success" }); + roleForm.reset(undefined, { keepValues: true }); + } catch (err) { + createNotification({ text: "Failed to update role", type: "error" }); + } + }; + + if (isRolesLoading) + return ( +
+ +
+ ); + + return ( +
+
Roles
+

Select one of the pre-defined or custom roles.

+
+
+
+ {selectedRoleList.fields.map(({ id }, index) => { + const { temporaryAccess } = formRoleField[index]; + const isTemporary = temporaryAccess?.isTemporary; + const isExpired = + temporaryAccess.isTemporary && + new Date() > new Date(temporaryAccess.temporaryAccessEndTime || ""); + + return ( +
+ ( + + )} + /> + + + + + + + +
+
+ Configure timed access +
+ {isExpired && Expired} + ( + } + isError={Boolean(error?.message)} + errorText={error?.message} + > + + + )} + /> +
+ + {temporaryAccess.isTemporary && ( + + )} +
+
+
+
+ + { + if (selectedRoleList.fields.length > 1) { + selectedRoleList.remove(index); + } + }} + > + + + +
+ ); + })} +
+
+ + {(isAllowed) => ( + + )} + + +
+
+
+
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRoleForm.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRoleForm.tsx new file mode 100644 index 000000000..e354f1015 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRoleForm.tsx @@ -0,0 +1,20 @@ +import { IdentityMembership } from "@app/hooks/api/identities/types"; + +import { IdentityRbacSection } from "./IdentityRbacSection"; +import { SpecificPrivilegeSection } from "./SpecificPrivilegeSection"; + +type Props = { + identityProjectMember: IdentityMembership; + onOpenUpgradeModal: (title: string) => void; +}; +export const IdentityRoleForm = ({ identityProjectMember, onOpenUpgradeModal }: Props) => { + return ( +
+ + +
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx new file mode 100644 index 000000000..806072a89 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx @@ -0,0 +1,515 @@ +import { Controller, useForm } from "react-hook-form"; +import { faCancel, faCaretDown, faClock, faClose, faSave } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { formatDistance } from "date-fns"; +import ms from "ms"; +import { twMerge } from "tailwind-merge"; +import { z } from "zod"; + +import { TtlFormLabel } from "@app/components/features"; +import { createNotification } from "@app/components/notifications"; +import { ProjectPermissionCan } from "@app/components/permissions"; +import { + Button, + Checkbox, + DeleteActionModal, + FormControl, + FormLabel, + IconButton, + Input, + Popover, + PopoverContent, + PopoverTrigger, + Select, + SelectItem, + Spinner, + Tag, + Tooltip +} from "@app/components/v2"; +import { + ProjectPermissionActions, + ProjectPermissionSub, + useProjectPermission, + useWorkspace +} from "@app/context"; +import { usePopUp } from "@app/hooks"; +import { + TProjectUserPrivilege, + useCreateIdentityProjectAdditionalPrivilege, + useDeleteIdentityProjectAdditionalPrivilege, + useUpdateIdentityProjectAdditionalPrivilege +} from "@app/hooks/api"; +import { useListIdentityProjectPrivileges } from "@app/hooks/api/identityProjectAdditionalPrivilege/queries"; + +const secretPermissionSchema = z.object({ + secretPath: z.string().optional(), + environmentSlug: z.string(), + [ProjectPermissionActions.Edit]: z.boolean().optional(), + [ProjectPermissionActions.Read]: z.boolean().optional(), + [ProjectPermissionActions.Create]: z.boolean().optional(), + [ProjectPermissionActions.Delete]: z.boolean().optional(), + temporaryAccess: z.discriminatedUnion("isTemporary", [ + z.object({ + isTemporary: z.literal(true), + temporaryRange: z.string().min(1), + temporaryAccessStartTime: z.string().datetime(), + temporaryAccessEndTime: z.string().datetime().nullable().optional() + }), + z.object({ + isTemporary: z.literal(false) + }) + ]) +}); +type TSecretPermissionForm = z.infer; +const SpecificPrivilegeSecretForm = ({ + privilege, + identityId +}: { + privilege: TProjectUserPrivilege; + identityId: string; +}) => { + const { currentWorkspace } = useWorkspace(); + const projectSlug = currentWorkspace?.slug || ""; + + const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ + "deletePrivilege" + ] as const); + const { permission } = useProjectPermission(); + const isMemberEditDisabled = permission.cannot( + ProjectPermissionActions.Edit, + ProjectPermissionSub.Identity + ); + + const updateIdentityPrivilege = useUpdateIdentityProjectAdditionalPrivilege(); + const deleteIdentityPrivilege = useDeleteIdentityProjectAdditionalPrivilege(); + + const privilegeForm = useForm({ + resolver: zodResolver(secretPermissionSchema), + values: { + environmentSlug: privilege.permissions?.[0]?.conditions?.environment, + // secret path will be inside $glob operator + secretPath: privilege.permissions?.[0]?.conditions?.secretPath?.$glob || "", + read: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Read) + ), + edit: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Edit) + ), + create: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Create) + ), + delete: privilege.permissions?.some(({ action }) => + action.includes(ProjectPermissionActions.Delete) + ), + // zod will pick it + temporaryAccess: privilege + } + }); + + const temporaryAccessField = privilegeForm.watch("temporaryAccess"); + const isTemporary = temporaryAccessField?.isTemporary; + const isExpired = + temporaryAccessField.isTemporary && + new Date() > new Date(temporaryAccessField.temporaryAccessEndTime || ""); + + const handleUpdatePrivilege = async (data: TSecretPermissionForm) => { + if (updateIdentityPrivilege.isLoading) return; + try { + const actions = [ + { action: ProjectPermissionActions.Read, allowed: data.read }, + { action: ProjectPermissionActions.Create, allowed: data.create }, + { action: ProjectPermissionActions.Delete, allowed: data.delete }, + { action: ProjectPermissionActions.Edit, allowed: data.edit } + ]; + const conditions: Record = { environment: data.environmentSlug }; + if (data.secretPath) { + conditions.secretPath = { $glob: data.secretPath }; + } + await updateIdentityPrivilege.mutateAsync({ + data: { + ...data.temporaryAccess, + permissions: actions + .filter(({ allowed }) => allowed) + .map(({ action }) => ({ + action, + subject: [ProjectPermissionSub.Secrets], + conditions + })) + }, + slug: privilege.slug, + identityId, + projectSlug + }); + createNotification({ + type: "success", + text: "Successfully updated privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to update privilege" + }); + } + }; + + const handleDeletePrivilege = async () => { + if (deleteIdentityPrivilege.isLoading) return; + try { + await deleteIdentityPrivilege.mutateAsync({ + identityId, + slug: privilege.slug, + projectSlug + }); + createNotification({ + type: "success", + text: "Successfully deleted privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to delete privilege" + }); + } + }; + + const getAccessLabel = () => { + if (isExpired) return "Access expired"; + if (!temporaryAccessField?.isTemporary) return "Permanent"; + return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date()); + }; + + return ( +
+
+
+ ( + + + + )} + /> + ( + + + + )} + /> +
+ ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> + ( +
+ + field.onChange(isChecked)} + /> +
+ )} + /> +
+
+ + + + + + + +
+
+ Configure timed access +
+ {isExpired && Expired} + ( + } + isError={Boolean(error?.message)} + errorText={error?.message} + > + + + )} + /> +
+ + {temporaryAccessField.isTemporary && ( + + )} +
+
+
+
+ {privilegeForm.formState.isDirty ? ( + <> + + + {privilegeForm.formState.isSubmitting ? ( + + ) : ( + + )} + + + + privilegeForm.reset()} + > + + + + + ) : ( + + handlePopUpOpen("deletePrivilege")} + > + + + + )} +
+
+
+ handlePopUpToggle("deletePrivilege", isOpen)} + deleteKey="delete" + onClose={() => handlePopUpClose("deletePrivilege")} + onDeleteApproved={handleDeletePrivilege} + /> +
+ ); +}; + +type Props = { + identityId: string; +}; + +export const SpecificPrivilegeSection = ({ identityId }: Props) => { + const { currentWorkspace } = useWorkspace(); + const projectSlug = currentWorkspace?.slug || ""; + const { data: identityPrivileges, isLoading } = useListIdentityProjectPrivileges({ + identityId, + projectSlug + }); + + const createIdentityPrivilege = useCreateIdentityProjectAdditionalPrivilege(); + + const handleCreatePrivilege = async () => { + if (createIdentityPrivilege.isLoading) return; + try { + await createIdentityPrivilege.mutateAsync({ + permissions: [ + { + action: ProjectPermissionActions.Read, + subject: [ProjectPermissionSub.Secrets], + conditions: { + environment: currentWorkspace?.environments?.[0].slug + } + } + ], + identityId, + projectSlug + }); + createNotification({ + type: "success", + text: "Successfully created privilege" + }); + } catch (err) { + createNotification({ + type: "error", + text: "Failed to create privilege" + }); + } + }; + + return ( +
+
+ Additional Privileges + {isLoading && } +
+

+ Select individual privileges to associate with the identity. +

+
+ {identityPrivileges + ?.filter(({ permissions }) => + permissions?.[0]?.subject?.includes(ProjectPermissionSub.Secrets) + ) + ?.map((privilege) => ( + + ))} +
+ + {(isAllowed) => ( + + )} + +
+ ); +}; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/index.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/index.tsx new file mode 100644 index 000000000..f59675cb3 --- /dev/null +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/index.tsx @@ -0,0 +1 @@ +export { IdentityRoleForm } from "./IdentityRoleForm"; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx deleted file mode 100644 index 6ff10cfa8..000000000 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoles.tsx +++ /dev/null @@ -1,459 +0,0 @@ -import { useState } from "react"; -import { Controller, useForm } from "react-hook-form"; -import { faCheck, faClock, faEdit, faSearch } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { twMerge } from "tailwind-merge"; -import { z } from "zod"; - -import { createNotification } from "@app/components/notifications"; -import { - Button, - Checkbox, - FormControl, - HoverCard, - HoverCardContent, - HoverCardTrigger, - IconButton, - Input, - Popover, - PopoverContent, - PopoverTrigger, - Spinner, - Tag, - Tooltip -} from "@app/components/v2"; -import { useWorkspace } from "@app/context"; -import { usePopUp } from "@app/hooks"; -import { useGetProjectRoles, useUpdateIdentityWorkspaceRole } from "@app/hooks/api"; -import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; -import { TWorkspaceUser } from "@app/hooks/api/types"; -import { ProjectUserMembershipTemporaryMode } from "@app/hooks/api/workspace/types"; -import { groupBy } from "@app/lib/fn/array"; - -const temporaryRoleFormSchema = z.object({ - temporaryRange: z.string().min(1, "Required") -}); - -type TTemporaryRoleFormSchema = z.infer; - -type TTemporaryRoleFormProps = { - temporaryConfig?: { - isTemporary?: boolean; - temporaryAccessEndTime?: string | null; - temporaryAccessStartTime?: string | null; - temporaryRange?: string | null; - }; - onSetTemporary: (data: { temporaryRange: string; temporaryAccessStartTime?: string }) => void; - onRemoveTemporary: () => void; -}; - -const IdentityTemporaryRoleForm = ({ - temporaryConfig: defaultValues = {}, - onSetTemporary, - onRemoveTemporary -}: TTemporaryRoleFormProps) => { - const { popUp, handlePopUpToggle } = usePopUp(["setTempRole"] as const); - const { control, handleSubmit } = useForm({ - resolver: zodResolver(temporaryRoleFormSchema), - values: { - temporaryRange: defaultValues.temporaryRange || "1h" - } - }); - const isTemporaryFieldValue = defaultValues.isTemporary; - const isExpired = - isTemporaryFieldValue && new Date() > new Date(defaultValues.temporaryAccessEndTime || ""); - - return ( - { - handlePopUpToggle("setTempRole", isOpen); - }} - > - - - - - - - - -
-
- Set Role Temporarily -
- {isExpired && Expired} - ( - - 1m, 2h, 3d.{" "} - - More - - - } - > - - - )} - /> -
- {isTemporaryFieldValue && ( - - )} - {!isTemporaryFieldValue ? ( - - ) : ( - - )} -
-
-
-
- ); -}; - -const formSchema = z.record( - z.object({ - isChecked: z.boolean().optional(), - temporaryAccess: z.union([ - z.object({ - isTemporary: z.literal(true), - temporaryRange: z.string().min(1), - temporaryAccessStartTime: z.string().datetime(), - temporaryAccessEndTime: z.string().datetime().nullable().optional() - }), - z.boolean() - ]) - }) -); -type TForm = z.infer; - -export type TMemberRolesProp = { - disableEdit?: boolean; - identityId: string; - roles: TWorkspaceUser["roles"]; -}; - -const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; - -export const IdentityRoles = ({ - roles = [], - disableEdit = false, - identityId -}: TMemberRolesProp) => { - const { currentWorkspace } = useWorkspace(); - - const { popUp, handlePopUpToggle } = usePopUp(["editRole"] as const); - const [searchRoles, setSearchRoles] = useState(""); - - const { - handleSubmit, - control, - reset, - setValue, - formState: { isSubmitting, isDirty } - } = useForm({ - resolver: zodResolver(formSchema) - }); - - const workspaceId = currentWorkspace?.id || ""; - - const { data: projectRoles, isLoading: isRolesLoading } = useGetProjectRoles(workspaceId); - const userRolesGroupBySlug = groupBy(roles, ({ customRoleSlug, role }) => customRoleSlug || role); - - const updateIdentityWorkspaceRole = useUpdateIdentityWorkspaceRole(); - - const handleRoleUpdate = async (data: TForm) => { - const selectedRoles = Object.keys(data) - .filter((el) => Boolean(data[el].isChecked)) - .map((el) => { - const isTemporary = Boolean(data[el].temporaryAccess); - if (!isTemporary) { - return { role: el, isTemporary: false as const }; - } - - const tempCfg = data[el].temporaryAccess as { - temporaryRange: string; - temporaryAccessStartTime: string; - }; - - return { - role: el, - isTemporary: true as const, - temporaryMode: ProjectUserMembershipTemporaryMode.Relative, - temporaryRange: tempCfg.temporaryRange, - temporaryAccessStartTime: tempCfg.temporaryAccessStartTime - }; - }); - - try { - await updateIdentityWorkspaceRole.mutateAsync({ - workspaceId, - identityId, - roles: selectedRoles - }); - createNotification({ text: "Successfully updated identity role", type: "success" }); - handlePopUpToggle("editRole"); - setSearchRoles(""); - } catch (err) { - createNotification({ text: "Failed to update identity role", type: "error" }); - } - }; - - const formatRoleName = (role: string, customRoleName?: string) => { - if (role === ProjectMembershipRole.Custom) return customRoleName; - if (role === ProjectMembershipRole.Member) return "Developer"; - return role; - }; - - return ( -
- {roles - .slice(0, MAX_ROLES_TO_BE_SHOWN_IN_TABLE) - .map(({ role, customRoleName, id, isTemporary, temporaryAccessEndTime }) => { - const isExpired = new Date() > new Date(temporaryAccessEndTime || ("" as string)); - return ( - -
-
{formatRoleName(role, customRoleName)}
- {isTemporary && ( -
- - - -
- )} -
-
- ); - })} - {roles.length > MAX_ROLES_TO_BE_SHOWN_IN_TABLE && ( - - - +{roles.length - MAX_ROLES_TO_BE_SHOWN_IN_TABLE} - - - {roles - .slice(MAX_ROLES_TO_BE_SHOWN_IN_TABLE) - .map(({ role, customRoleName, id, isTemporary, temporaryAccessEndTime }) => { - const isExpired = new Date() > new Date(temporaryAccessEndTime || ("" as string)); - return ( - -
-
{formatRoleName(role, customRoleName)}
- {isTemporary && ( -
- - new Date(temporaryAccessEndTime as string) && - "text-red-600" - )} - /> - -
- )} -
-
- ); - })}{" "} -
-
- )} -
- { - handlePopUpToggle("editRole", isOpen); - reset(); - }} - > - {!disableEdit && ( - - - - - - )} - - {isRolesLoading ? ( -
- -
- ) : ( -
-
- {projectRoles - ?.filter( - ({ name, slug }) => - name.toLowerCase().includes(searchRoles.toLowerCase()) || - slug.toLowerCase().includes(searchRoles.toLowerCase()) - ) - ?.map(({ id, name, slug }) => { - const userProjectRoleDetails = userRolesGroupBySlug?.[slug]?.[0]; - - return ( -
-
- ( - { - field.onChange(isChecked); - setValue(`${slug}.temporaryAccess`, false); - }} - > - {name} - - )} - /> -
-
- ( - { - setValue(`${slug}.isChecked`, true, { shouldDirty: true }); - console.log(data); - field.onChange({ isTemporary: true, ...data }); - }} - onRemoveTemporary={() => { - setValue(`${slug}.isChecked`, false, { shouldDirty: true }); - field.onChange(false); - }} - /> - )} - /> -
-
- ); - })} -
-
-
- setSearchRoles(el.target.value)} - leftIcon={} - placeholder="Search roles.." - /> -
-
- -
-
-
- )} -
-
-
-
- ); -}; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx index 9f1711199..3bb29ff61 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx @@ -210,7 +210,7 @@ export const MemberListTab = () => { return ( {privilegeForm.formState.isSubmitting ? ( - + ) : ( )} @@ -460,7 +460,7 @@ export const SpecificPrivilegeSection = ({ membershipId }: Props) => { return (
-
+
Additional Privileges {isLoading && }
From e46256f45b5b9b437293d8d5769f5aaf0308d6f2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Thu, 28 Mar 2024 19:53:10 +0530 Subject: [PATCH 28/61] feat: added description for all api endpoints --- ...ity-project-additional-privilege-router.ts | 104 ++++++++++++------ .../v1/user-additional-privilege-router.ts | 66 +++++++---- backend/src/lib/api-docs/constants.ts | 78 +++++++++++++ .../IdentityRoleForm/IdentityRbacSection.tsx | 2 +- .../MemberRoleForm/MemberRbacSection.tsx | 2 +- 5 files changed, 192 insertions(+), 60 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index aec3a9c97..df28a627d 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -7,6 +7,7 @@ import { z } from "zod"; import { IdentityProjectAdditionalPrivilegeSchema } from "@app/db/schemas"; import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types"; import { ProjectPermissionSet } from "@app/ee/services/permission/project-permission"; +import { IDENTITY_ADDITIONAL_PRIVILEGE } from "@app/lib/api-docs"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; @@ -18,41 +19,59 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F schema: { body: z.union([ z.object({ - identityId: z.string().min(1), - projectSlug: z.string().min(1), + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), slug: z .string() .min(1) .max(60) .trim() - .optional() .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((val) => val.toLowerCase() === val, "Must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - permissions: z.any().array(), - isPackedPermission: z.boolean().optional().default(false), - isTemporary: z.literal(false).default(false) + }) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), + isPackedPermission: z + .boolean() + .optional() + .default(false) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isPackPermission), + isTemporary: z.literal(false).default(false).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isTemporary) }), z.object({ - identityId: z.string(), - projectSlug: z.string().min(1), + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), slug: z .string() .min(1) .max(60) .trim() - .optional() .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((val) => val.toLowerCase() === val, "Must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - permissions: z.any().array(), - isTemporary: z.literal(true), - isPackedPermission: z.boolean().optional().default(false), - temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), - temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), - temporaryAccessStartTime: z.string().datetime() + }) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), + isPackedPermission: z + .boolean() + .optional() + .default(false) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isPackPermission), + isTemporary: z.literal(true).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isTemporary), + temporaryMode: z + .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) }) ]), response: { @@ -83,9 +102,9 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F schema: { body: z.object({ // disallow empty string - slug: z.string().min(1), - identityId: z.string().min(1), - projectSlug: z.string().min(1), + slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.slug), + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.projectSlug), data: z .object({ slug: z @@ -93,15 +112,29 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F .min(1) .max(60) .trim() + .refine((val) => val.toLowerCase() === val, "Must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - isPackedPermission: z.boolean().optional().default(false), - permissions: z.any().array(), - isTemporary: z.boolean(), - temporaryMode: z.nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode), - temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), - temporaryAccessStartTime: z.string().datetime() + }) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.newSlug), + isPackedPermission: z + .boolean() + .optional() + .default(false) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.isPackPermission), + permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.permissions), + isTemporary: z.boolean().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.isTemporary), + temporaryMode: z + .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.temporaryAccessStartTime) }) .partial() }), @@ -136,9 +169,9 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F method: "DELETE", schema: { body: z.object({ - slug: z.string().min(1), - identityId: z.string().min(1), - projectSlug: z.string().min(1) + slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.slug), + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.projectSlug) }), response: { 200: z.object({ @@ -164,11 +197,11 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F method: "GET", schema: { params: z.object({ - slug: z.string() + slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.slug) }), querystring: z.object({ - identityId: z.string().min(1), - projectSlug: z.string().min(1) + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.projectSlug) }), response: { 200: z.object({ @@ -195,12 +228,13 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F method: "GET", schema: { querystring: z.object({ - identityId: z.string().min(1), - projectSlug: z.string().min(1), + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.projectSlug), unpacked: z .enum(["false", "true"]) .transform((el) => el === "true") .default("true") + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.unpacked) }), response: { 200: z.object({ diff --git a/backend/src/ee/routes/v1/user-additional-privilege-router.ts b/backend/src/ee/routes/v1/user-additional-privilege-router.ts index d0643b22c..c003971e4 100644 --- a/backend/src/ee/routes/v1/user-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/user-additional-privilege-router.ts @@ -4,6 +4,7 @@ import { z } from "zod"; import { ProjectUserAdditionalPrivilegeSchema } from "@app/db/schemas"; import { ProjectUserAdditionalPrivilegeTemporaryMode } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-types"; +import { PROJECT_USER_ADDITIONAL_PRIVILEGE } from "@app/lib/api-docs"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMode } from "@app/services/auth/auth-type"; @@ -15,37 +16,47 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr schema: { body: z.union([ z.object({ - projectMembershipId: z.string(), + projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), slug: z .string() .min(1) .max(60) .trim() .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - permissions: z.any().array(), - isTemporary: z.literal(false).default(false) + }) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions), + isTemporary: z.literal(false).default(false).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.isTemporary) }), z.object({ - projectMembershipId: z.string(), + projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), slug: z .string() .min(1) .max(60) .trim() .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - name: z.string().trim(), - description: z.string().trim().optional(), - permissions: z.any().array(), - isTemporary: z.literal(true), - temporaryMode: z.nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode), - temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), - temporaryAccessStartTime: z.string().datetime() + }) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions), + isTemporary: z.literal(true).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.isTemporary), + temporaryMode: z + .nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) }) ]), response: { @@ -73,7 +84,7 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr method: "PATCH", schema: { params: z.object({ - privilegeId: z.string() + privilegeId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.privilegeId) }), body: z .object({ @@ -84,12 +95,21 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") .refine((v) => slugify(v) === v, { message: "Slug must be a valid slug" - }), - permissions: z.any().array(), - isTemporary: z.boolean(), - temporaryMode: z.nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode), - temporaryRange: z.string().refine((val) => ms(val) > 0, "Temporary range must be a positive number"), - temporaryAccessStartTime: z.string().datetime() + }) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.slug), + permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.permissions), + isTemporary: z.boolean().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.isTemporary), + temporaryMode: z + .nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.UPDATE.temporaryAccessStartTime) }) .partial(), response: { @@ -118,7 +138,7 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr method: "DELETE", schema: { params: z.object({ - privilegeId: z.string() + privilegeId: z.string().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.DELETE.privilegeId) }), response: { 200: z.object({ @@ -144,7 +164,7 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr method: "GET", schema: { querystring: z.object({ - projectMembershipId: z.string() + projectMembershipId: z.string().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.LIST.projectMembershipId) }), response: { 200: z.object({ @@ -170,7 +190,7 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr method: "GET", schema: { params: z.object({ - privilegeId: z.string() + privilegeId: z.string().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.GET_BY_PRIVILEGEID.privilegeId) }), response: { 200: z.object({ diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 8736e80c6..e0d82b2d1 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -397,3 +397,81 @@ export const SECRET_TAGS = { projectId: "The ID of the project to delete the tag from." } } as const; + +export const IDENTITY_ADDITIONAL_PRIVILEGE = { + CREATE: { + projectSlug: "The slug of the project of the dynamic secret in.", + identityId: "The ID of the identity to delete.", + slug: "The slug of the privilege to create.", + permissions: + "The permission object for the privilege. Refer https://casl.js.org/v6/en/guide/define-rules#the-shape-of-raw-rule to understand the shape", + isPackPermission: "Whether the server should pack(compact) the permission object.", + isTemporary: "Whether the privilege is temporary.", + temporaryMode: "Type of temporary access given. Types: relative", + temporaryRange: "TTL for the temporay time. Eg: 1m, 1h, 1d", + temporaryAccessStartTime: "ISO time for which temporary access should begin." + }, + UPDATE: { + projectSlug: "The slug of the project of the dynamic secret in.", + identityId: "The ID of the identity to delete.", + slug: "The slug of the privilege to create.", + newSlug: "The new slug of the privilege to create.", + permissions: + "The permission object for the privilege. Refer https://casl.js.org/v6/en/guide/define-rules#the-shape-of-raw-rule to understand the shape", + isPackPermission: "Whether the server should pack(compact) the permission object.", + isTemporary: "Whether the privilege is temporary.", + temporaryMode: "Type of temporary access given. Types: relative", + temporaryRange: "TTL for the temporay time. Eg: 1m, 1h, 1d", + temporaryAccessStartTime: "ISO time for which temporary access should begin." + }, + DELETE: { + projectSlug: "The slug of the project of the dynamic secret in.", + identityId: "The ID of the identity to delete.", + slug: "The slug of the privilege to create." + }, + GET_BY_SLUG: { + projectSlug: "The slug of the project of the dynamic secret in.", + identityId: "The ID of the identity to delete.", + slug: "The slug of the privilege to create." + }, + LIST: { + projectSlug: "The slug of the project of the dynamic secret in.", + identityId: "The ID of the identity to delete.", + unpacked: "Whether the system should send the permissions as unpacked" + } +}; + +export const PROJECT_USER_ADDITIONAL_PRIVILEGE = { + CREATE: { + projectMembershipId: "Project membership id of user", + slug: "The slug of the privilege to create.", + permissions: + "The permission object for the privilege. Refer https://casl.js.org/v6/en/guide/define-rules#the-shape-of-raw-rule to understand the shape", + isPackPermission: "Whether the server should pack(compact) the permission object.", + isTemporary: "Whether the privilege is temporary.", + temporaryMode: "Type of temporary access given. Types: relative", + temporaryRange: "TTL for the temporay time. Eg: 1m, 1h, 1d", + temporaryAccessStartTime: "ISO time for which temporary access should begin." + }, + UPDATE: { + privilegeId: "The id of privilege object", + slug: "The slug of the privilege to create.", + newSlug: "The new slug of the privilege to create.", + permissions: + "The permission object for the privilege. Refer https://casl.js.org/v6/en/guide/define-rules#the-shape-of-raw-rule to understand the shape", + isPackPermission: "Whether the server should pack(compact) the permission object.", + isTemporary: "Whether the privilege is temporary.", + temporaryMode: "Type of temporary access given. Types: relative", + temporaryRange: "TTL for the temporay time. Eg: 1m, 1h, 1d", + temporaryAccessStartTime: "ISO time for which temporary access should begin." + }, + DELETE: { + privilegeId: "The id of privilege object" + }, + GET_BY_PRIVILEGEID: { + privilegeId: "The id of privilege object" + }, + LIST: { + projectMembershipId: "Project membership id of user" + } +}; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx index 9d25c7ed0..fddc067bc 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx @@ -331,7 +331,7 @@ export const IdentityRbacSection = ({ identityProjectMember, onOpenUpgradeModal )} isLoading={roleForm.formState.isSubmitting} > - Save Changes + Save Roles
diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRbacSection.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRbacSection.tsx index ecd1ee40e..73642344e 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRbacSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRbacSection.tsx @@ -328,7 +328,7 @@ export const MemberRbacSection = ({ projectMember, onOpenUpgradeModal }: Props) )} isLoading={roleForm.formState.isSubmitting} > - Save Changes + Save Roles
From 31ad6b0c866e36951027c98c22e55bca4e306272 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Thu, 28 Mar 2024 18:17:59 -0700 Subject: [PATCH 29/61] update style --- .../components/IdentityTab/IdentityTab.tsx | 6 +- .../IdentityRoleForm/IdentityRbacSection.tsx | 75 ++++++++---------- .../SpecificPrivilegeSection.tsx | 56 +++++++------- .../MemberListTab/MemberListTab.tsx | 4 +- .../MemberRoleForm/MemberRbacSection.tsx | 77 +++++++++---------- .../SpecificPrivilegeSection.tsx | 52 ++++++------- 6 files changed, 128 insertions(+), 142 deletions(-) diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx index d82c53d2a..213b08246 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx @@ -308,12 +308,12 @@ export const IdentityTab = withProjectPermission( onOpenChange={(state) => handlePopUpToggle("updateRole", state)} > diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx index fddc067bc..a4bd57ad3 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx @@ -1,8 +1,8 @@ import { Controller, useFieldArray, useForm } from "react-hook-form"; -import { faCaretDown, faClock, faClose } from "@fortawesome/free-solid-svg-icons"; +import { faCaretDown, faClock, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; -import { formatDistance } from "date-fns"; +import { format } from "date-fns"; import ms from "ms"; import { twMerge } from "tailwind-merge"; import { z } from "zod"; @@ -21,8 +21,7 @@ import { Select, SelectItem, Spinner, - Tag, - Tooltip + Tag } from "@app/components/v2"; import { ProjectPermissionActions, @@ -183,29 +182,24 @@ export const IdentityRbacSection = ({ identityProjectMember, onOpenUpgradeModal /> - : undefined} + rightIcon={} + isDisabled={isMemberEditDisabled} + className={twMerge( + "border-none bg-mineshaft-600 hover:bg-mineshaft-500 py-2.5 capitalize text-xs", + isTemporary && "text-primary", + isExpired && "text-red-600" + )} > - - + {!temporaryAccess?.isTemporary + ? "Permanent" + : `Expires at ${format( + new Date(temporaryAccess.temporaryAccessEndTime || ""), + "yyyy-MM-dd HH:mm:ss" + )}`} + - - { - if (selectedRoleList.fields.length > 1) { - selectedRoleList.remove(index); - } - }} - > - - - + { + if (selectedRoleList.fields.length > 1) { + selectedRoleList.remove(index); + } + }} + > + +
); })} @@ -311,6 +303,7 @@ export const IdentityRbacSection = ({ identityProjectMember, onOpenUpgradeModal +
+
+ +
+ +
+ Choose a topic below or simply{' '} + get started +
+ + + + Practical guides and best practices to get you up and running quickly. + + + Comprehensive details about the Pinecone API, SDKs, and architecture. + + + Hands-on notebooks and sample apps with common AI patterns and tools. + + + Pinecone's growing number of third-party integrations. + + + Code and docs for Pinecone utilities and reference architectures. + + + Resolve common Pinecone issues with our troubleshooting guide. + + + News about features and changes in Pinecone and related tools. + + + +
\ No newline at end of file From 0a66cbe72932056dfb7269c1dedb12029419b203 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Fri, 29 Mar 2024 00:10:29 -0700 Subject: [PATCH 32/61] updated docs --- .../getting-started/introduction-new.mdx | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/documentation/getting-started/introduction-new.mdx b/docs/documentation/getting-started/introduction-new.mdx index 58fa5c755..c8eee8739 100644 --- a/docs/documentation/getting-started/introduction-new.mdx +++ b/docs/documentation/getting-started/introduction-new.mdx @@ -84,23 +84,20 @@ export function openSearch() {
- + Practical guides and best practices to get you up and running quickly. - - Comprehensive details about the Pinecone API, SDKs, and architecture. + + Comprehensive details about the Infisical API. - - Hands-on notebooks and sample apps with common AI patterns and tools. + + Learn more about Infisical's architecture and underlying security. + + + Read self-hosting instruction for Infisical. - Pinecone's growing number of third-party integrations. - - - Code and docs for Pinecone utilities and reference architectures. - - - Resolve common Pinecone issues with our troubleshooting guide. + Infisical's growing number of third-party integrations. News about features and changes in Pinecone and related tools. From 00f2d4080351f87f809f6108363207136969ef82 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 29 Mar 2024 22:36:46 +0530 Subject: [PATCH 33/61] feat(ui): changed back to relative time distance with tooltip of detailed time --- .../components/IdentityTab/IdentityTab.tsx | 5 +- .../IdentityRoleForm/IdentityRbacSection.tsx | 63 ++++++++++------ .../SpecificPrivilegeSection.tsx | 75 ++++++++++++------- .../MemberListTab/MemberListTab.tsx | 5 +- .../MemberRoleForm/MemberRbacSection.tsx | 67 +++++++++++------ .../SpecificPrivilegeSection.tsx | 75 ++++++++++++------- 6 files changed, 184 insertions(+), 106 deletions(-) diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx index 213b08246..2ab1ebeec 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/IdentityTab.tsx @@ -49,6 +49,7 @@ const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; const formatRoleName = (role: string, customRoleName?: string) => { if (role === ProjectMembershipRole.Custom) return customRoleName; if (role === ProjectMembershipRole.Member) return "Developer"; + if (role === ProjectMembershipRole.NoAccess) return "No access"; return role; }; export const IdentityTab = withProjectPermission( @@ -173,7 +174,9 @@ export const IdentityTab = withProjectPermission( return (
-
{formatRoleName(role, customRoleName)}
+
+ {formatRoleName(role, customRoleName)} +
{isTemporary && (
- +
+ + + +
{ @@ -324,7 +343,7 @@ export const IdentityRbacSection = ({ identityProjectMember, onOpenUpgradeModal )} isLoading={roleForm.formState.isSubmitting} > - Save Roles + Save Roles
diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx index 9d543f466..b8c9e8caa 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx @@ -1,8 +1,15 @@ import { Controller, useForm } from "react-hook-form"; -import { faArrowRotateLeft, faCaretDown, faCheck, faClock, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { + faArrowRotateLeft, + faCaretDown, + faCheck, + faClock, + faPlus, + faTrash +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; -import { format } from "date-fns"; +import { format, formatDistance } from "date-fns"; import ms from "ms"; import { twMerge } from "tailwind-merge"; import { z } from "zod"; @@ -173,10 +180,15 @@ const SpecificPrivilegeSecretForm = ({ } }; - const getAccessLabel = () => { + const getAccessLabel = (exactTime = false) => { if (isExpired) return "Access expired"; if (!temporaryAccessField?.isTemporary) return "Permanent"; - return `Until ${format(new Date(temporaryAccessField.temporaryAccessEndTime || ""), "yyyy-MM-dd HH:mm:ss")}`; + if (exactTime) + return `Until ${format( + new Date(temporaryAccessField.temporaryAccessEndTime || ""), + "yyyy-MM-dd HH:mm:ss" + )}`; + return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date()); }; return ( @@ -281,24 +293,23 @@ const SpecificPrivilegeSecretForm = ({
- - - +
+ + + +
privilegeForm.reset()} @@ -389,7 +400,10 @@ const SpecificPrivilegeSecretForm = ({ - + {privilegeForm.formState.isSubmitting ? ( - + ) : ( - + )} ) : ( - + handlePopUpOpen("deletePrivilege")} > @@ -480,7 +497,7 @@ export const SpecificPrivilegeSection = ({ identityId }: Props) => { Additional Privileges {isLoading && }
-

+

Select individual privileges to associate with the identity.

diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx index 20a2079ac..b59286577 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberListTab.tsx @@ -76,6 +76,7 @@ const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; const formatRoleName = (role: string, customRoleName?: string) => { if (role === ProjectMembershipRole.Custom) return customRoleName; if (role === ProjectMembershipRole.Member) return "Developer"; + if (role === ProjectMembershipRole.NoAccess) return "No access"; return role; }; @@ -279,7 +280,9 @@ export const MemberListTab = () => { return (
-
{formatRoleName(role, customRoleName)}
+
+ {formatRoleName(role, customRoleName)} +
{isTemporary && (
onChange(e)} - className="w-full bg-mineshaft-600 hover:bg-mineshaft-500 duration-200" + className="w-full bg-mineshaft-600 duration-200 hover:bg-mineshaft-500" > {projectRoles?.map(({ name, slug, id: projectRoleId }) => ( @@ -181,25 +183,42 @@ export const MemberRbacSection = ({ projectMember, onOpenUpgradeModal }: Props) )} /> - - + +
+ + + +
{ @@ -321,7 +340,7 @@ export const MemberRbacSection = ({ projectMember, onOpenUpgradeModal }: Props) )} isLoading={roleForm.formState.isSubmitting} > - Save Roles + Save Roles
diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx index f50480f0f..2df959a94 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx @@ -1,8 +1,15 @@ import { Controller, useForm } from "react-hook-form"; -import { faArrowRotateLeft, faCaretDown, faCheck, faClock, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { + faArrowRotateLeft, + faCaretDown, + faCheck, + faClock, + faPlus, + faTrash +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; -import { format } from "date-fns"; +import { format, formatDistance } from "date-fns"; import ms from "ms"; import { twMerge } from "tailwind-merge"; import { z } from "zod"; @@ -161,10 +168,15 @@ const SpecificPrivilegeSecretForm = ({ privilege }: { privilege: TProjectUserPri } }; - const getAccessLabel = () => { + const getAccessLabel = (exactTime = false) => { if (isExpired) return "Access expired"; if (!temporaryAccessField?.isTemporary) return "Permanent"; - return `Until ${format(new Date(temporaryAccessField.temporaryAccessEndTime || ""), "yyyy-MM-dd HH:mm:ss")}`; + if (exactTime) + return `Until ${format( + new Date(temporaryAccessField.temporaryAccessEndTime || ""), + "yyyy-MM-dd HH:mm:ss" + )}`; + return formatDistance(new Date(temporaryAccessField.temporaryAccessEndTime || ""), new Date()); }; return ( @@ -269,24 +281,23 @@ const SpecificPrivilegeSecretForm = ({ privilege }: { privilege: TProjectUserPri
- - - +
+ + + +
privilegeForm.reset()} @@ -377,7 +388,10 @@ const SpecificPrivilegeSecretForm = ({ privilege }: { privilege: TProjectUserPri - + {privilegeForm.formState.isSubmitting ? ( - + ) : ( - + )} ) : ( - + handlePopUpOpen("deletePrivilege")} > @@ -463,7 +480,7 @@ export const SpecificPrivilegeSection = ({ membershipId }: Props) => { Additional Privileges {isLoading && }
-

+

Select individual privileges to associate with the user.

From 6c628a726587b00a2a5df592d59254ff99cf1fc7 Mon Sep 17 00:00:00 2001 From: vmatsiiako <78047717+vmatsiiako@users.noreply.github.com> Date: Fri, 29 Mar 2024 10:49:10 -0700 Subject: [PATCH 34/61] Update aws-secret-manager.mdx --- docs/integrations/cloud/aws-secret-manager.mdx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/integrations/cloud/aws-secret-manager.mdx b/docs/integrations/cloud/aws-secret-manager.mdx index f761d5164..d02f5d176 100644 --- a/docs/integrations/cloud/aws-secret-manager.mdx +++ b/docs/integrations/cloud/aws-secret-manager.mdx @@ -69,5 +69,8 @@ Prerequisites: group environment variable key-pairs under multiple secrets for greater control. + + Please note that upon deleting secrets in Infisical, AWS Secrets Manager immediately makes the secrets inaccessible but only schedules them for deletion after at least 7 days. + - \ No newline at end of file + From af2dcdd0c72faae852c6864f59a4efcf81345768 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 29 Mar 2024 23:51:26 +0530 Subject: [PATCH 35/61] feat: updated api description and changed slug to privilege slug --- ...ity-project-additional-privilege-router.ts | 26 ++++++++------- backend/src/lib/api-docs/constants.ts | 32 +++++++++++-------- .../mutation.tsx | 8 ++--- .../queries.tsx | 12 +++---- .../types.tsx | 6 ++-- .../SpecificPrivilegeSection.tsx | 4 +-- 6 files changed, 48 insertions(+), 40 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index df28a627d..f17b6e560 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -102,7 +102,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F schema: { body: z.object({ // disallow empty string - slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.slug), + privilegeSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.slug), identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.identityId), projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.projectSlug), data: z @@ -146,17 +146,19 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const { isPackedPermission, ...data } = req.body.data; + const { isPackedPermission, ...updatedInfo } = req.body.data; const privilege = await server.services.identityProjectAdditionalPrivilege.updateBySlug({ actorId: req.permission.id, actor: req.permission.type, actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, - ...req.body, + slug: req.body.privilegeSlug, + identityId: req.body.identityId, + projectSlug: req.body.projectSlug, data: { - ...data, - permissions: data?.permissions - ? JSON.stringify(isPackedPermission ? data?.permissions : packRules(data.permissions)) + ...updatedInfo, + permissions: updatedInfo?.permissions + ? JSON.stringify(isPackedPermission ? updatedInfo?.permissions : packRules(updatedInfo.permissions)) : undefined } }); @@ -169,7 +171,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F method: "DELETE", schema: { body: z.object({ - slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.slug), + privilegeSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.slug), identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.identityId), projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.DELETE.projectSlug) }), @@ -186,18 +188,20 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actor: req.permission.type, actorAuthMethod: req.permission.authMethod, actorOrgId: req.permission.orgId, - ...req.body + slug: req.body.privilegeSlug, + identityId: req.body.identityId, + projectSlug: req.body.projectSlug }); return { privilege }; } }); server.route({ - url: "/:slug", + url: "/:privilegeSlug", method: "GET", schema: { params: z.object({ - slug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.slug) + privilegeSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.slug) }), querystring: z.object({ identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.GET_BY_SLUG.identityId), @@ -216,7 +220,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actorAuthMethod: req.permission.authMethod, actor: req.permission.type, actorOrgId: req.permission.orgId, - slug: req.params.slug, + slug: req.params.privilegeSlug, ...req.query }); return { privilege }; diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index e0d82b2d1..70ba7e87b 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -400,7 +400,7 @@ export const SECRET_TAGS = { export const IDENTITY_ADDITIONAL_PRIVILEGE = { CREATE: { - projectSlug: "The slug of the project of the dynamic secret in.", + projectSlug: "The slug of the project of the identity in.", identityId: "The ID of the identity to delete.", slug: "The slug of the privilege to create.", permissions: @@ -412,12 +412,16 @@ export const IDENTITY_ADDITIONAL_PRIVILEGE = { temporaryAccessStartTime: "ISO time for which temporary access should begin." }, UPDATE: { - projectSlug: "The slug of the project of the dynamic secret in.", - identityId: "The ID of the identity to delete.", - slug: "The slug of the privilege to create.", - newSlug: "The new slug of the privilege to create.", - permissions: - "The permission object for the privilege. Refer https://casl.js.org/v6/en/guide/define-rules#the-shape-of-raw-rule to understand the shape", + projectSlug: "The slug of the project of the identity in.", + identityId: "The ID of the identity to update.", + slug: "The slug of the privilege to update.", + newSlug: "The new slug of the privilege to update.", + permissions: `The permission object for the privilege. +Example unpacked permission shape +1. [["read", "secrets", {environment: "dev", secretPath: {$glob: "/"}}]] +2. [["read", "secrets", {environment: "dev"}], ["create", "secrets", {environment: "dev"}]] +2. [["read", "secrets", {environment: "dev"}]] +`, isPackPermission: "Whether the server should pack(compact) the permission object.", isTemporary: "Whether the privilege is temporary.", temporaryMode: "Type of temporary access given. Types: relative", @@ -425,18 +429,18 @@ export const IDENTITY_ADDITIONAL_PRIVILEGE = { temporaryAccessStartTime: "ISO time for which temporary access should begin." }, DELETE: { - projectSlug: "The slug of the project of the dynamic secret in.", + projectSlug: "The slug of the project of the identity in.", identityId: "The ID of the identity to delete.", - slug: "The slug of the privilege to create." + slug: "The slug of the privilege to delete." }, GET_BY_SLUG: { - projectSlug: "The slug of the project of the dynamic secret in.", - identityId: "The ID of the identity to delete.", - slug: "The slug of the privilege to create." + projectSlug: "The slug of the project of the identity in.", + identityId: "The ID of the identity to list.", + slug: "The slug of the privilege." }, LIST: { - projectSlug: "The slug of the project of the dynamic secret in.", - identityId: "The ID of the identity to delete.", + projectSlug: "The slug of the project of the identity in.", + identityId: "The ID of the identity to list.", unpacked: "Whether the system should send the permissions as unpacked" } }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx index d9a2a0b0a..fb79fa464 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx @@ -35,9 +35,9 @@ export const useUpdateIdentityProjectAdditionalPrivilege = () => { const queryClient = useQueryClient(); return useMutation({ - mutationFn: async ({ slug, projectSlug, identityId, data }) => { + mutationFn: async ({ privilegeSlug, projectSlug, identityId, data }) => { const { data: res } = await apiRequest.patch("/api/v1/additional-privilege/identity", { - slug, + privilegeSlug, projectSlug, identityId, data: { @@ -60,12 +60,12 @@ export const useDeleteIdentityProjectAdditionalPrivilege = () => { const queryClient = useQueryClient(); return useMutation({ - mutationFn: async ({ identityId, projectSlug, slug }) => { + mutationFn: async ({ identityId, projectSlug, privilegeSlug }) => { const { data } = await apiRequest.delete("/api/v1/additional-privilege/identity", { data: { identityId, projectSlug, - slug + privilegeSlug } }); return data.privilege; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx index 8ad60ba6c..72534c158 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx @@ -11,13 +11,13 @@ import { } from "./types"; export const identitiyProjectPrivilegeKeys = { - details: ({ identityId, slug, projectSlug }: TGetIdentityProjectPrivilegeDetails) => + details: ({ identityId, privilegeSlug, projectSlug }: TGetIdentityProjectPrivilegeDetails) => [ "identity-user-privilege", { identityId, projectSlug, - slug + privilegeSlug } ] as const, list: ({ projectSlug, identityId }: TListIdentityProjectPrivileges) => @@ -27,17 +27,17 @@ export const identitiyProjectPrivilegeKeys = { export const useGetIdentityProjectPrivilegeDetails = ({ projectSlug, identityId, - slug + privilegeSlug }: TGetIdentityProjectPrivilegeDetails) => { return useQuery({ - enabled: Boolean(projectSlug && identityId && slug), - queryKey: identitiyProjectPrivilegeKeys.details({ projectSlug, slug, identityId }), + enabled: Boolean(projectSlug && identityId && privilegeSlug), + queryKey: identitiyProjectPrivilegeKeys.details({ projectSlug, privilegeSlug, identityId }), queryFn: async () => { const { data: { privilege } } = await apiRequest.get<{ privilege: Omit & { permissions: unknown }; - }>(`/api/v1/additional-privilege/identity/${slug}`, { + }>(`/api/v1/additional-privilege/identity/${privilegeSlug}`, { params: { identityId, projectSlug diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx index 1e07db597..80323a2a9 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/types.tsx @@ -42,14 +42,14 @@ export type TCreateIdentityProjectPrivilegeDTO = { export type TUpdateIdentityProjectPrivlegeDTO = { projectSlug: string; identityId: string; - slug: string; + privilegeSlug: string; data: Partial>; }; export type TDeleteIdentityProjectPrivilegeDTO = { projectSlug: string; identityId: string; - slug: string; + privilegeSlug: string; }; export type TListIdentityUserPrivileges = { @@ -60,5 +60,5 @@ export type TListIdentityUserPrivileges = { export type TGetIdentityProejctPrivilegeDetails = { projectSlug: string; identityId: string; - slug: string; + privilegeSlug: string; }; diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx index b8c9e8caa..bf3e46a20 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx @@ -144,7 +144,7 @@ const SpecificPrivilegeSecretForm = ({ conditions })) }, - slug: privilege.slug, + privilegeSlug: privilege.slug, identityId, projectSlug }); @@ -165,7 +165,7 @@ const SpecificPrivilegeSecretForm = ({ try { await deleteIdentityPrivilege.mutateAsync({ identityId, - slug: privilege.slug, + privilegeSlug: privilege.slug, projectSlug }); createNotification({ From d0c0d5835c70e1ea65fb90af06efe8df5859aa7d Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Sat, 30 Mar 2024 01:29:34 +0530 Subject: [PATCH 36/61] feat: splitted privilege create route into two for permanent and temp to get params shape in api doc --- ...ity-project-additional-privilege-router.ts | 143 +++++++++--------- .../v1/user-additional-privilege-router.ts | 114 ++++++++------ .../mutation.tsx | 16 +- .../mutation.tsx | 2 +- 4 files changed, 147 insertions(+), 128 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index f17b6e560..f5f4207e5 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -14,66 +14,25 @@ import { AuthMode } from "@app/services/auth/auth-type"; export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: FastifyZodProvider) => { server.route({ - url: "/", + url: "/permanent", method: "POST", schema: { - body: z.union([ - z.object({ - identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), - projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), - slug: z - .string() - .min(1) - .max(60) - .trim() - .default(`privilege-${slugify(alphaNumericNanoId(12))}`) - .refine((val) => val.toLowerCase() === val, "Must be lowercase") - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), - isPackedPermission: z - .boolean() - .optional() - .default(false) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isPackPermission), - isTemporary: z.literal(false).default(false).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isTemporary) - }), - z.object({ - identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), - projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), - slug: z - .string() - .min(1) - .max(60) - .trim() - .default(`privilege-${slugify(alphaNumericNanoId(12))}`) - .refine((val) => val.toLowerCase() === val, "Must be lowercase") - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), - isPackedPermission: z - .boolean() - .optional() - .default(false) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isPackPermission), - isTemporary: z.literal(true).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.isTemporary), - temporaryMode: z - .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), - temporaryRange: z - .string() - .refine((val) => ms(val) > 0, "Temporary range must be a positive number") - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), - temporaryAccessStartTime: z - .string() - .datetime() - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) - }) - ]), + body: z.object({ + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), + slug: z + .string() + .min(1) + .max(60) + .trim() + .default(slugify(alphaNumericNanoId(12))) + .refine((val) => val.toLowerCase() === val, "Must be lowercase") + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions) + }), response: { 200: z.object({ privilege: IdentityProjectAdditionalPrivilegeSchema @@ -88,9 +47,60 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, ...req.body, - permissions: JSON.stringify( - req.body.isPackedPermission ? req.body.permissions : packRules(req.body.permissions) - ) + isTemporary: false, + permissions: JSON.stringify(packRules(req.body.permissions)) + }); + return { privilege }; + } + }); + + server.route({ + url: "/temporary", + method: "POST", + schema: { + body: z.object({ + identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.identityId), + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.projectSlug), + slug: z + .string() + .min(1) + .max(60) + .trim() + .default(slugify(alphaNumericNanoId(12))) + .refine((val) => val.toLowerCase() === val, "Must be lowercase") + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), + temporaryMode: z + .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) + }), + response: { + 200: z.object({ + privilege: IdentityProjectAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const privilege = await server.services.identityProjectAdditionalPrivilege.create({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + ...req.body, + isTemporary: true, + permissions: JSON.stringify(packRules(req.body.permissions)) }); return { privilege }; } @@ -117,11 +127,6 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F message: "Slug must be a valid slug" }) .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.newSlug), - isPackedPermission: z - .boolean() - .optional() - .default(false) - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.isPackPermission), permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.permissions), isTemporary: z.boolean().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.isTemporary), temporaryMode: z @@ -146,7 +151,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const { isPackedPermission, ...updatedInfo } = req.body.data; + const updatedInfo = req.body.data; const privilege = await server.services.identityProjectAdditionalPrivilege.updateBySlug({ actorId: req.permission.id, actor: req.permission.type, @@ -157,9 +162,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F projectSlug: req.body.projectSlug, data: { ...updatedInfo, - permissions: updatedInfo?.permissions - ? JSON.stringify(isPackedPermission ? updatedInfo?.permissions : packRules(updatedInfo.permissions)) - : undefined + permissions: updatedInfo?.permissions ? JSON.stringify(packRules(updatedInfo.permissions)) : undefined } }); return { privilege }; diff --git a/backend/src/ee/routes/v1/user-additional-privilege-router.ts b/backend/src/ee/routes/v1/user-additional-privilege-router.ts index c003971e4..9b6bfb6fb 100644 --- a/backend/src/ee/routes/v1/user-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/user-additional-privilege-router.ts @@ -11,54 +11,24 @@ import { AuthMode } from "@app/services/auth/auth-type"; export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodProvider) => { server.route({ - url: "/", + url: "/permanent", method: "POST", schema: { - body: z.union([ - z.object({ - projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), - slug: z - .string() - .min(1) - .max(60) - .trim() - .default(`privilege-${slugify(alphaNumericNanoId(12))}`) - .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }) - .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions), - isTemporary: z.literal(false).default(false).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.isTemporary) - }), - z.object({ - projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), - slug: z - .string() - .min(1) - .max(60) - .trim() - .default(`privilege-${slugify(alphaNumericNanoId(12))}`) - .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") - .refine((v) => slugify(v) === v, { - message: "Slug must be a valid slug" - }) - .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions), - isTemporary: z.literal(true).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.isTemporary), - temporaryMode: z - .nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode) - .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), - temporaryRange: z - .string() - .refine((val) => ms(val) > 0, "Temporary range must be a positive number") - .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), - temporaryAccessStartTime: z - .string() - .datetime() - .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) - }) - ]), + body: z.object({ + projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), + slug: z + .string() + .min(1) + .max(60) + .trim() + .default(slugify(alphaNumericNanoId(12))) + .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions) + }), response: { 200: z.object({ privilege: ProjectUserAdditionalPrivilegeSchema @@ -73,6 +43,58 @@ export const registerUserAdditionalPrivilegeRouter = async (server: FastifyZodPr actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, ...req.body, + isTemporary: false, + permissions: JSON.stringify(req.body.permissions) + }); + return { privilege }; + } + }); + + server.route({ + url: "/temporary", + method: "POST", + schema: { + body: z.object({ + projectMembershipId: z.string().min(1).describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.projectMembershipId), + slug: z + .string() + .min(1) + .max(60) + .trim() + .default(`privilege-${slugify(alphaNumericNanoId(12))}`) + .refine((v) => v.toLowerCase() === v, "Slug must be lowercase") + .refine((v) => slugify(v) === v, { + message: "Slug must be a valid slug" + }) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.slug), + permissions: z.any().array().describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.permissions), + temporaryMode: z + .nativeEnum(ProjectUserAdditionalPrivilegeTemporaryMode) + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), + temporaryRange: z + .string() + .refine((val) => ms(val) > 0, "Temporary range must be a positive number") + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryRange), + temporaryAccessStartTime: z + .string() + .datetime() + .describe(PROJECT_USER_ADDITIONAL_PRIVILEGE.CREATE.temporaryAccessStartTime) + }), + response: { + 200: z.object({ + privilege: ProjectUserAdditionalPrivilegeSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const privilege = await server.services.projectUserAdditionalPrivilege.create({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + ...req.body, + isTemporary: true, permissions: JSON.stringify(req.body.permissions) }); return { privilege }; diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx index fb79fa464..0ea4318c4 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/mutation.tsx @@ -1,4 +1,3 @@ -import { packRules } from "@casl/ability/extra"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; @@ -16,11 +15,10 @@ export const useCreateIdentityProjectAdditionalPrivilege = () => { return useMutation({ mutationFn: async (dto) => { - const { data } = await apiRequest.post("/api/v1/additional-privilege/identity", { - ...dto, - isPackedPermission: true, - permissions: packRules(dto.permissions) - }); + const { data } = await apiRequest.post( + "/api/v1/additional-privilege/identity/permanent", + dto + ); return data.privilege; }, onSuccess: (_, { projectSlug, identityId }) => { @@ -40,11 +38,7 @@ export const useUpdateIdentityProjectAdditionalPrivilege = () => { privilegeSlug, projectSlug, identityId, - data: { - isPackedPermission: true, - ...data, - permissions: data.permissions ? packRules(data.permissions) : undefined - } + data }); return res.privilege; }, diff --git a/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx b/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx index 6a07efdf4..fb21a425e 100644 --- a/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx +++ b/frontend/src/hooks/api/projectUserAdditionalPrivilege/mutation.tsx @@ -16,7 +16,7 @@ export const useCreateProjectUserAdditionalPrivilege = () => { return useMutation<{ privilege: TProjectUserPrivilege }, {}, TCreateProjectUserPrivilegeDTO>({ mutationFn: async (dto) => { - const { data } = await apiRequest.post("/api/v1/additional-privilege/users", { + const { data } = await apiRequest.post("/api/v1/additional-privilege/users/permanent", { ...dto, permissions: packRules(dto.permissions) }); From e64c579dfdb9daf4944f3183dfd74ad570e996f9 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Fri, 29 Mar 2024 16:39:51 -0700 Subject: [PATCH 37/61] update aws sm docs --- .../integrations-aws-secret-manager-auth.png | Bin 184827 -> 126593 bytes ...integrations-aws-secret-manager-create.png | Bin 208601 -> 597590 bytes .../integrations/cloud/aws-secret-manager.mdx | 17 ++++++++++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/images/integrations/aws/integrations-aws-secret-manager-auth.png b/docs/images/integrations/aws/integrations-aws-secret-manager-auth.png index 4dcaa04dda5de0926f074157f043878d0f15b493..cc17097e16d55785616bba2b2eaf8a63387f74b5 100644 GIT binary patch literal 126593 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 owj?Zui2EGw@ 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%0D2t?9pSPFxT(LsPPv1@}U&xZCF149W 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

C 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%0A=PJXIgp`nE4`KpSIU#&~o0Zr9zyQ(Y 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%0DA3BlMHn3FZTzI6o@ke|cF>>~rT6 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

*> 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 fl`xz%1_tJ4Q05QrDCABEGjuh+n4YFP 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 ZKmV(xb)2DBk7_Ugfv2mV%Q~loCIJ05jMV@D literal 208601 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

5(z*=JYtAUt& z$Fm1e*>HRM-jwt&(5lX<^hJ_}Gv5v#$g4Ny8k)*n>`cy*?_;L>ta#*4u^vrvr+~|L zP`9<5%K%V}&wl?s+Gce0=!(a1@)SEaJ;ky0dC?y)qj*^OvicNSyH()=bRA>@=eHh7 zJxZhdX2kKgpAi^m0TFCMr-TX&H)sSBsQFg~oa?XnpUDYwEO(1WKV^lbGx_*%i#8=Q z<%F;!E<|g{1X_HG>fN(-?amuo@m@2k+Mya)Vv&_ZQ$vHClb9G2#xwDLDOhUpN>ItI z5;g(z(RVIxf*$iYIkS7%r<-lZ=mE$qpS;w=*YIa>{yG9Sseo0^nPOMTSOIXeeOIJJ zu|ajoo5DuH92;1&kWKzRK{SaJwK3hPTYBUc8Wcd6mEA%S!%iD)5nr5 z2L1a5#*4nMto(x0VPI(fg3YAIPna9??lK#TX~PJPH-MD}#ggDlK4hN>3i4w!~|x8yCw5$k0aPzYQdhisiov;`}g> zh^nh7S}k;@%7m$cpU!_l0?tWbP>&=sE3(-O>|eF(Ep7$q2$G1*PlexGCzeT) zTDm)Ufb=`Eqc2SbGw{YuZ*xQI5EqjGRmhq_QZ}I?Zk3?3_8n5MYs_u!!>?CnK!TYw zo-p)JL<&S_B(JLgk85W~ip!{fa60-G72C(O30Esv-`Q(I`nLT@M|$4$HOf=&-}&W31=o!iEfN-i4Tu8IT_TIwTe z-)Cl3>i`0yId3+1SgvW^M9mkew4I?^By*kDt56+;kzV~;A!vUiQv2c~amWRe?<

  • tKj?545dwlwaLf`w)DatZxK8DIN3D^ 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 diff --git a/docs/integrations/cloud/aws-secret-manager.mdx b/docs/integrations/cloud/aws-secret-manager.mdx index d02f5d176..094f22d54 100644 --- a/docs/integrations/cloud/aws-secret-manager.mdx +++ b/docs/integrations/cloud/aws-secret-manager.mdx @@ -59,7 +59,22 @@ Prerequisites: - Select which Infisical environment secrets you want to sync to which AWS Secrets Manager region and under which secret name. Then, press create integration to start syncing secrets to AWS Secrets Manager. + Select how you want to integration to work by specifying a number of parameters: + + + The environment in Infisical from which you want to sync secrets to AWS Secrets Manager. + + + The path within the preselected environment form which you want to sync secrets to AWS Secrets Manager. + + + The region that you want to integrate with in AWS Secrets Manager. + + + The secret name/path in AWS into which you want to sync the secrets from Infisical. + + + Then, press `Create Integration` to start syncing secrets to AWS Secrets Manager. ![integration create](../../images/integrations/aws/integrations-aws-secret-manager-create.png) From d68dc4c3e0d726a5106d16460c63d86f462ab994 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Fri, 29 Mar 2024 16:50:18 -0700 Subject: [PATCH 38/61] add type=password to integration api keys --- .../pages/integrations/aws-parameter-store/authorize.tsx | 2 ++ .../pages/integrations/aws-secret-manager/authorize.tsx | 2 ++ frontend/src/pages/integrations/checkly/authorize.tsx | 2 ++ .../src/pages/integrations/cloudflare-pages/authorize.tsx | 8 +++++++- .../pages/integrations/cloudflare-workers/authorize.tsx | 8 +++++++- frontend/src/pages/integrations/flyio/authorize.tsx | 7 ++++++- frontend/src/pages/integrations/qovery/authorize.tsx | 2 ++ frontend/src/pages/integrations/render/authorize.tsx | 8 +++++++- .../src/pages/integrations/terraform-cloud/authorize.tsx | 2 ++ 9 files changed, 37 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx b/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx index ae94837de..b3eb5fa88 100644 --- a/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx +++ b/frontend/src/pages/integrations/aws-parameter-store/authorize.tsx @@ -109,6 +109,8 @@ export default function AWSParameterStoreAuthorizeIntegrationPage() { setAccessSecretKey(e.target.value)} /> diff --git a/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx b/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx index 975b98b0a..c901d0a56 100644 --- a/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx +++ b/frontend/src/pages/integrations/aws-secret-manager/authorize.tsx @@ -108,6 +108,8 @@ export default function AWSSecretManagerCreateIntegrationPage() { > setAccessSecretKey(e.target.value)} /> diff --git a/frontend/src/pages/integrations/checkly/authorize.tsx b/frontend/src/pages/integrations/checkly/authorize.tsx index c15516200..27951993d 100644 --- a/frontend/src/pages/integrations/checkly/authorize.tsx +++ b/frontend/src/pages/integrations/checkly/authorize.tsx @@ -86,6 +86,8 @@ export default function ChecklyCreateIntegrationPage() { setAccessToken(e.target.value)} /> diff --git a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx index 6495f00bd..7f006ef30 100644 --- a/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx +++ b/frontend/src/pages/integrations/cloudflare-pages/authorize.tsx @@ -59,7 +59,13 @@ export default function CloudflarePagesIntegrationPage() { isError={accessKeyErrorText !== "" ?? false} className="mx-6" > - setAccessKey(e.target.value)} /> + setAccessKey(e.target.value)} + /> - setAccessKey(e.target.value)} /> + setAccessKey(e.target.value)} + /> - + )} /> diff --git a/frontend/src/pages/integrations/qovery/authorize.tsx b/frontend/src/pages/integrations/qovery/authorize.tsx index 892749132..1be9d1741 100644 --- a/frontend/src/pages/integrations/qovery/authorize.tsx +++ b/frontend/src/pages/integrations/qovery/authorize.tsx @@ -86,6 +86,8 @@ export default function QoveryCreateIntegrationPage() { setAccessToken(e.target.value)} /> diff --git a/frontend/src/pages/integrations/render/authorize.tsx b/frontend/src/pages/integrations/render/authorize.tsx index 6337b0d48..4226d5899 100644 --- a/frontend/src/pages/integrations/render/authorize.tsx +++ b/frontend/src/pages/integrations/render/authorize.tsx @@ -83,7 +83,13 @@ export default function RenderCreateIntegrationPage() { isError={apiKeyErrorText !== "" ?? false} className="px-6" > - setApiKey(e.target.value)} /> + setApiKey(e.target.value)} + />