diff --git a/backend/src/controllers/v1/secretImportController.ts b/backend/src/controllers/v1/secretImportController.ts index 4b6539930..181248553 100644 --- a/backend/src/controllers/v1/secretImportController.ts +++ b/backend/src/controllers/v1/secretImportController.ts @@ -108,7 +108,7 @@ export const getAllSecretsFromImport = async (req: Request, res: Response) => { }); if (!importSecDoc) { - return res.status(200).json({ secrets: {} }); + return res.status(200).json({ secrets: [] }); } const secrets = await getAllImportedSecrets(workspaceId, environment, folderId); diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index c770e78fb..04275ed32 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -346,6 +346,7 @@ export const createSecretHelper = async ({ workspace: new Types.ObjectId(workspaceId), folder: folderId, type, + environment, ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}) }); @@ -362,6 +363,7 @@ export const createSecretHelper = async ({ secretBlindIndex, folder: folderId, workspace: new Types.ObjectId(workspaceId), + environment, type: SECRET_SHARED }); diff --git a/frontend/src/hooks/api/secrets/queries.tsx b/frontend/src/hooks/api/secrets/queries.tsx index 1541ff753..3d0c81643 100644 --- a/frontend/src/hooks/api/secrets/queries.tsx +++ b/frontend/src/hooks/api/secrets/queries.tsx @@ -1,6 +1,6 @@ /* eslint-disable no-param-reassign */ import { useCallback } from "react"; -import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query"; import { decryptAssymmetric, @@ -15,7 +15,8 @@ import { EncryptedSecret, EncryptedSecretVersion, GetProjectSecretsDTO, - GetSecretVersionsDTO + GetSecretVersionsDTO, + TGetProjectSecretsAllEnvDTO } from "./types"; export const secretKeys = { @@ -160,6 +161,21 @@ export const useGetProjectSecrets = ({ ) }); +export const useGetProjectSecretsAllEnv = ({ + workspaceId, + envs, + decryptFileKey, + folderId, + secretPath +}: TGetProjectSecretsAllEnvDTO) => + useQueries({ + queries: envs.map((env) => ({ + queryKey: secretKeys.getProjectSecret(workspaceId, env, secretPath || folderId), + enabled: Boolean(decryptFileKey && workspaceId && env), + queryFn: () => fetchProjectEncryptedSecrets(workspaceId, env, folderId, secretPath) + })) + }); + export const useGetProjectSecretsByKey = ({ workspaceId, env, diff --git a/frontend/src/hooks/api/secrets/types.ts b/frontend/src/hooks/api/secrets/types.ts index b36eb47f7..fb995ce80 100644 --- a/frontend/src/hooks/api/secrets/types.ts +++ b/frontend/src/hooks/api/secrets/types.ts @@ -103,6 +103,15 @@ export type GetProjectSecretsDTO = { onSuccess?: (data: DecryptedSecret[]) => void; }; +export type TGetProjectSecretsAllEnvDTO = { + workspaceId: string; + envs: string[]; + decryptFileKey: UserWsKeyPair; + folderId?: string; + secretPath?: string; + isPaused?: boolean; +}; + export type GetSecretVersionsDTO = { secretId: string; limit: number; diff --git a/frontend/src/pages/project/[id]/secrets/overview.tsx b/frontend/src/pages/project/[id]/secrets/overview.tsx new file mode 100644 index 000000000..69e2bc196 --- /dev/null +++ b/frontend/src/pages/project/[id]/secrets/overview.tsx @@ -0,0 +1,27 @@ +import { useTranslation } from "react-i18next"; +import Head from "next/head"; + +import { SecretOverviewPage } from "@app/views/SecretOverviewPage"; + +const Dashboard = () => { + const { t } = useTranslation(); + + return ( + <> +
+