diff --git a/backend-pg/src/server/routes/v1/secret-import-router.ts b/backend-pg/src/server/routes/v1/secret-import-router.ts index 50b0ede3b..5f37c5f5e 100644 --- a/backend-pg/src/server/routes/v1/secret-import-router.ts +++ b/backend-pg/src/server/routes/v1/secret-import-router.ts @@ -250,7 +250,8 @@ export const registerSecretImportRouter = async (server: FastifyZodProvider) => secrets: z .object({ secretPath: z.string(), - environment: z.object({ + environment: z.string(), + environmentInfo: z.object({ id: z.string(), name: z.string(), slug: z.string() diff --git a/backend-pg/src/server/routes/v3/secret-router.ts b/backend-pg/src/server/routes/v3/secret-router.ts index af24873f1..2c171020c 100644 --- a/backend-pg/src/server/routes/v3/secret-router.ts +++ b/backend-pg/src/server/routes/v3/secret-router.ts @@ -6,7 +6,7 @@ import { SecretsSchema, SecretTagsSchema, SecretType, - ServiceTokenScopes, + ServiceTokenScopes } from "@app/db/schemas"; import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { CommitType } from "@app/ee/services/secret-approval-request/secret-approval-request-types"; @@ -36,11 +36,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { imports: z .object({ secretPath: z.string(), - environment: z.object({ - id: z.string(), - name: z.string(), - slug: z.string() - }), + environment: z.string(), folderId: z.string().optional(), secrets: secretRawSchema.array() }) @@ -57,23 +53,24 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { ]), handler: async (req) => { // just for delivery hero usecase - let {secretPath,environment,workspaceId} = req.query; - if(req.auth.actor === ActorType.SERVICE){ + let { secretPath, environment, workspaceId } = req.query; + if (req.auth.actor === ActorType.SERVICE) { const scope = ServiceTokenScopes.parse(req.auth.serviceToken.scopes); const isSingleScope = scope.length === 1; - if(isSingleScope && !picomatch.scan(scope[0].secretPath).isGlob){ + if (isSingleScope && !picomatch.scan(scope[0].secretPath).isGlob) { secretPath = scope[0].secretPath; environment = scope[0].environment; workspaceId = req.auth.serviceToken.projectId; } } - if(!workspaceId || !environment) throw new BadRequestError({message:"Missing workspace id or environment"}) + if (!workspaceId || !environment) + throw new BadRequestError({ message: "Missing workspace id or environment" }); const { secrets, imports } = await server.services.secret.getSecretsRaw({ actorId: req.permission.id, actor: req.permission.type, - environment, + environment, projectId: workspaceId as string, path: secretPath, includeImports: req.query.include_imports @@ -360,11 +357,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { imports: z .object({ secretPath: z.string(), - environment: z.object({ - id: z.string(), - name: z.string(), - slug: z.string() - }), + environment: z.string(), folderId: z.string().optional(), secrets: SecretsSchema.omit({ secretBlindIndex: true }).array() }) diff --git a/backend-pg/src/services/secret-import/secret-import-fns.ts b/backend-pg/src/services/secret-import/secret-import-fns.ts index 2f99adb58..93b609b5b 100644 --- a/backend-pg/src/services/secret-import/secret-import-fns.ts +++ b/backend-pg/src/services/secret-import/secret-import-fns.ts @@ -33,7 +33,8 @@ export const fnSecretsFromImports = async ({ const importedSecsGroupByFolderId = groupBy(importedSecrets, (i) => i.folderId); return allowedImports.map(({ importPath, importEnv }, i) => ({ secretPath: importPath, - environment: importEnv, + environment: importEnv.slug, + environmentInfo: importEnv, folderId: importedFolders?.[i]?.id, secrets: importedFolders?.[i]?.id ? importedSecsGroupByFolderId[importedFolders?.[i]?.id as string] diff --git a/backend-pg/src/services/secret/secret-service.ts b/backend-pg/src/services/secret/secret-service.ts index 9e7601797..2f539a8dd 100644 --- a/backend-pg/src/services/secret/secret-service.ts +++ b/backend-pg/src/services/secret/secret-service.ts @@ -585,7 +585,7 @@ export const secretServiceFactory = ({ return { ...importedSecrets[i].secrets[j], workspace: projectId, - environment: importedSecrets[i].environment.slug + environment: importedSecrets[i].environment }; } } @@ -825,10 +825,7 @@ export const secretServiceFactory = ({ imports: (imports || [])?.map(({ secrets: importedSecrets, ...el }) => ({ ...el, secrets: importedSecrets.map((sec) => - decryptSecretRaw( - { ...sec, environment: el.environment.slug, workspace: projectId }, - botKey - ) + decryptSecretRaw({ ...sec, environment: el.environment, workspace: projectId }, botKey) ) })) }; diff --git a/frontend/src/hooks/api/secretImports/queries.tsx b/frontend/src/hooks/api/secretImports/queries.tsx index ee55e20f3..1af6ca878 100644 --- a/frontend/src/hooks/api/secretImports/queries.tsx +++ b/frontend/src/hooks/api/secretImports/queries.tsx @@ -118,6 +118,7 @@ export const useGetImportedSecrets = ({ return data.map((el) => ({ environment: el.environment, secretPath: el.secretPath, + environmentInfo: el.environmentInfo, folderId: el.folderId, secrets: el.secrets.map((encSecret) => { const secretKey = decryptSymmetric({ diff --git a/frontend/src/hooks/api/secretImports/types.ts b/frontend/src/hooks/api/secretImports/types.ts index 68f06748c..eb63e8a96 100644 --- a/frontend/src/hooks/api/secretImports/types.ts +++ b/frontend/src/hooks/api/secretImports/types.ts @@ -13,7 +13,8 @@ export type TSecretImport = { }; export type TImportedSecrets = { - environment: WorkspaceEnv; + environment: string; + environmentInfo: WorkspaceEnv; secretPath: string; folderId: string; secrets: EncryptedSecret[]; diff --git a/frontend/src/views/SecretMainPage/components/SecretImportListView/SecretImportListView.tsx b/frontend/src/views/SecretMainPage/components/SecretImportListView/SecretImportListView.tsx index be8483fa5..39705fbb7 100644 --- a/frontend/src/views/SecretMainPage/components/SecretImportListView/SecretImportListView.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretImportListView/SecretImportListView.tsx @@ -14,7 +14,6 @@ import { arrayMove, SortableContext, verticalListSortingStrategy } from "@dnd-ki import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; import { DeleteActionModal } from "@app/components/v2"; -import { useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; import { useDeleteSecretImport, useUpdateSecretImport } from "@app/hooks/api"; import { TSecretImport } from "@app/hooks/api/secretImports/types"; @@ -25,7 +24,7 @@ import { SecretImportItem } from "./SecretImportItem"; const SECRET_IN_DASHBOARD = "Present In Dashboard"; type TImportedSecrets = Array<{ - environment: WorkspaceEnv; + environmentInfo: WorkspaceEnv; secretPath: string; folderId: string; secrets: DecryptedSecret[]; @@ -35,27 +34,22 @@ export const computeImportedSecretRows = ( importedSecEnv: string, importedSecPath: string, importSecrets: TImportedSecrets = [], - secrets: DecryptedSecret[] = [], - environments: { name: string; slug: string }[] = [] + secrets: DecryptedSecret[] = [] ) => { const importedSecIndex = importSecrets.findIndex( - ({ secretPath, environment }) => - secretPath === importedSecPath && importedSecEnv === environment.slug + ({ secretPath, environmentInfo }) => + secretPath === importedSecPath && importedSecEnv === environmentInfo.slug ); if (importedSecIndex === -1) return []; const importedSec = importSecrets[importedSecIndex]; const overridenSec: Record = {}; - const envSlug2Name: Record = {}; - environments.forEach((el) => { - envSlug2Name[el.slug] = el.name; - }); for (let i = importedSecIndex + 1; i < importSecrets.length; i += 1) { importSecrets[i].secrets.forEach((el) => { overridenSec[el.key] = { - env: envSlug2Name?.[importSecrets[i].environment.slug] || "unknown", + env: importSecrets[i].environmentInfo.name, secretPath: importSecrets[i].secretPath }; }); @@ -96,9 +90,7 @@ export const SecretImportListView = ({ const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([ "deleteSecretImport" ] as const); - const { currentWorkspace } = useWorkspace(); const { createNotification } = useNotificationContext(); - const environments = currentWorkspace?.environments || []; const sensors = useSensors( useSensor(MouseSensor, {}), useSensor(TouchSensor, {}), @@ -179,8 +171,7 @@ export const SecretImportListView = ({ importEnv.slug, importPath, importedSecrets, - secrets, - environments + secrets )} secretPath={secretPath} environment={environment}