diff --git a/backend/src/ee/routes/v1/dynamic-secret-router.ts b/backend/src/ee/routes/v1/dynamic-secret-router.ts index 049370743..052263835 100644 --- a/backend/src/ee/routes/v1/dynamic-secret-router.ts +++ b/backend/src/ee/routes/v1/dynamic-secret-router.ts @@ -237,7 +237,7 @@ export const registerDynamicSecretRouter = async (server: FastifyZodProvider) => }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { - const dynamicSecretCfgs = await server.services.dynamicSecret.list({ + const dynamicSecretCfgs = await server.services.dynamicSecret.listDynamicSecretsByEnv({ actor: req.permission.type, actorId: req.permission.id, actorAuthMethod: req.permission.authMethod, diff --git a/backend/src/ee/services/dynamic-secret/dynamic-secret-dal.ts b/backend/src/ee/services/dynamic-secret/dynamic-secret-dal.ts index 2a0dba37d..e47d9102d 100644 --- a/backend/src/ee/services/dynamic-secret/dynamic-secret-dal.ts +++ b/backend/src/ee/services/dynamic-secret/dynamic-secret-dal.ts @@ -13,7 +13,7 @@ export const dynamicSecretDALFactory = (db: TDbClient) => { const orm = ormify(db, TableName.DynamicSecret); // find dynamic secrets for multiple environments (folder IDs are cross env, thus need to rank for pagination) - const findMultiEnv = async ( + const listDynamicSecretsByFolderIds = async ( { folderIds, search, @@ -44,11 +44,7 @@ export const dynamicSecretDALFactory = (db: TDbClient) => { .select( selectAllTableCols(TableName.DynamicSecret), db.ref("slug").withSchema(TableName.Environment).as("environment"), - db.raw( - `DENSE_RANK() OVER (ORDER BY ${TableName.DynamicSecret}."name" ${ - orderDirection ?? OrderByDirection.ASC - }) as rank` - ) + db.raw(`DENSE_RANK() OVER (ORDER BY ${TableName.DynamicSecret}."name" ${orderDirection}) as rank`) ) .orderBy(`${TableName.DynamicSecret}.${orderBy}`, orderDirection); @@ -70,5 +66,5 @@ export const dynamicSecretDALFactory = (db: TDbClient) => { } }; - return { ...orm, findMultiEnv }; + return { ...orm, listDynamicSecretsByFolderIds }; }; diff --git a/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts b/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts index 36f135946..401ebf1ef 100644 --- a/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts +++ b/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts @@ -5,7 +5,7 @@ import { TLicenseServiceFactory } from "@app/ee/services/license/license-service import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/ee/services/permission/project-permission"; import { infisicalSymmetricDecrypt, infisicalSymmetricEncypt } from "@app/lib/crypto/encryption"; -import { BadRequestError, NotFoundError } from "@app/lib/errors"; +import { BadRequestError } from "@app/lib/errors"; import { OrderByDirection } from "@app/lib/types"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TSecretFolderDALFactory } from "@app/services/secret-folder/secret-folder-dal"; @@ -18,7 +18,9 @@ import { TCreateDynamicSecretDTO, TDeleteDynamicSecretDTO, TDetailsDynamicSecretDTO, + TGetDynamicSecretsCountDTO, TListDynamicSecretsDTO, + TListDynamicSecretsMultiEnvDTO, TUpdateDynamicSecretDTO } from "./dynamic-secret-types"; import { DynamicSecretProviders, TDynamicProviderFns } from "./providers/models"; @@ -307,21 +309,11 @@ export const dynamicSecretServiceFactory = ({ actorOrgId, actorId, actor, - projectSlug, + projectId, path, environmentSlugs, - search, - ...params - }: Omit & { environmentSlugs: string[] }) => { - let { projectId } = params; - - if (!projectId) { - if (!projectSlug) throw new BadRequestError({ message: "Project ID or slug required" }); - const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); - if (!project) throw new BadRequestError({ message: "Project not found" }); - projectId = project.id; - } - + search + }: TListDynamicSecretsMultiEnvDTO) => { const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -350,26 +342,16 @@ export const dynamicSecretServiceFactory = ({ }; // get dynamic secret count for a single env - const getCount = async ({ + const getDynamicSecretCount = async ({ actorAuthMethod, actorOrgId, actorId, actor, - projectSlug, path, environmentSlug, search, - ...params - }: TListDynamicSecretsDTO) => { - let { projectId } = params; - - if (!projectId) { - if (!projectSlug) throw new BadRequestError({ message: "Project ID or slug required" }); - const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); - if (!project) throw new BadRequestError({ message: "Project not found" }); - projectId = project.id; - } - + projectId + }: TGetDynamicSecretsCountDTO) => { const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -392,7 +374,7 @@ export const dynamicSecretServiceFactory = ({ return Number(dynamicSecretCfg[0]?.count ?? 0); }; - const list = async ({ + const listDynamicSecretsByEnv = async ({ actorAuthMethod, actorOrgId, actorId, @@ -443,25 +425,16 @@ export const dynamicSecretServiceFactory = ({ }; // get dynamic secrets for multiple envs - const listMultiEnv = async ({ + const listDynamicSecretsByFolderIds = async ({ actorAuthMethod, actorOrgId, actorId, actor, - projectSlug, path, environmentSlugs, + projectId, ...params - }: Omit & { environmentSlugs: string[] }) => { - let { projectId } = params; - - if (!projectId) { - if (!projectSlug) throw new BadRequestError({ message: "Project ID or slug required" }); - const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); - if (!project) throw new NotFoundError({ message: "Project not found" }); - projectId = project.id; - } - + }: TListDynamicSecretsMultiEnvDTO) => { const { permission } = await permissionService.getProjectPermission( actor, actorId, @@ -481,7 +454,7 @@ export const dynamicSecretServiceFactory = ({ const folders = await folderDAL.findBySecretPathMultiEnv(projectId, environmentSlugs, path); if (!folders.length) throw new BadRequestError({ message: "Folders not found" }); - const dynamicSecretCfg = await dynamicSecretDAL.findMultiEnv({ + const dynamicSecretCfg = await dynamicSecretDAL.listDynamicSecretsByFolderIds({ folderIds: folders.map((folder) => folder.id), ...params }); @@ -494,9 +467,9 @@ export const dynamicSecretServiceFactory = ({ updateByName, deleteByName, getDetails, - list, - listMultiEnv, - getCount, + listDynamicSecretsByEnv, + listDynamicSecretsByFolderIds, + getDynamicSecretCount, getCountMultiEnv }; }; diff --git a/backend/src/ee/services/dynamic-secret/dynamic-secret-types.ts b/backend/src/ee/services/dynamic-secret/dynamic-secret-types.ts index ff6c604af..426135a4c 100644 --- a/backend/src/ee/services/dynamic-secret/dynamic-secret-types.ts +++ b/backend/src/ee/services/dynamic-secret/dynamic-secret-types.ts @@ -59,3 +59,12 @@ export type TListDynamicSecretsDTO = { orderDirection?: OrderByDirection; search?: string; } & Omit; + +export type TListDynamicSecretsMultiEnvDTO = Omit< + TListDynamicSecretsDTO, + "projectId" | "environmentSlug" | "projectSlug" +> & { projectId: string; environmentSlugs: string[] }; + +export type TGetDynamicSecretsCountDTO = Omit & { + projectId: string; +}; diff --git a/backend/src/server/routes/v3/dashboard-router.ts b/backend/src/server/routes/v3/dashboard-router.ts index 684445698..7d06b1ce7 100644 --- a/backend/src/server/routes/v3/dashboard-router.ts +++ b/backend/src/server/routes/v3/dashboard-router.ts @@ -126,7 +126,9 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { let folders: Awaited> | undefined; let secrets: Awaited> | undefined; - let dynamicSecrets: Awaited> | undefined; + let dynamicSecrets: + | Awaited> + | undefined; let totalFolderCount: number | undefined; let totalDynamicSecretCount: number | undefined; @@ -185,7 +187,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { }); if (remainingLimit > 0 && totalDynamicSecretCount > adjustedOffset) { - dynamicSecrets = await server.services.dynamicSecret.listMultiEnv({ + dynamicSecrets = await server.services.dynamicSecret.listDynamicSecretsByFolderIds({ actor: req.permission.type, actorId: req.permission.id, actorAuthMethod: req.permission.authMethod, @@ -408,7 +410,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { let imports: Awaited> | undefined; let folders: Awaited> | undefined; let secrets: Awaited>["secrets"] | undefined; - let dynamicSecrets: Awaited> | undefined; + let dynamicSecrets: Awaited> | undefined; let totalImportCount: number | undefined; let totalFolderCount: number | undefined; @@ -497,7 +499,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { } if (includeDynamicSecrets) { - totalDynamicSecretCount = await server.services.dynamicSecret.getCount({ + totalDynamicSecretCount = await server.services.dynamicSecret.getDynamicSecretCount({ actor: req.permission.type, actorId: req.permission.id, actorAuthMethod: req.permission.authMethod, @@ -509,7 +511,7 @@ export const registerDashboardRouter = async (server: FastifyZodProvider) => { }); if (remainingLimit > 0 && totalDynamicSecretCount > adjustedOffset) { - dynamicSecrets = await server.services.dynamicSecret.list({ + dynamicSecrets = await server.services.dynamicSecret.listDynamicSecretsByEnv({ actor: req.permission.type, actorId: req.permission.id, actorAuthMethod: req.permission.authMethod,