From b6b3c8a736f60afde861675e276a9ebd03844b39 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 27 Jul 2023 16:24:22 +0530 Subject: [PATCH] fix: resolved v2 secret update bug and object returning in import secret empty --- .../controllers/v1/secretImportController.ts | 2 +- backend/src/helpers/secrets.ts | 2 ++ frontend/src/hooks/api/secrets/queries.tsx | 20 ++++++++++++-- frontend/src/hooks/api/secrets/types.ts | 9 +++++++ .../pages/project/[id]/secrets/overview.tsx | 27 +++++++++++++++++++ .../SecretOverviewPage/SecretOverviewPage.tsx | 19 +++++++++++++ .../src/views/SecretOverviewPage/index.tsx | 1 + 7 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 frontend/src/pages/project/[id]/secrets/overview.tsx create mode 100644 frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx create mode 100644 frontend/src/views/SecretOverviewPage/index.tsx 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 ( + <> + + {t("common.head-title", { title: t("dashboard.title") })} + + + + + +
+ +
+ + ); +}; + +export default Dashboard; + +Dashboard.requireAuth = true; diff --git a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx new file mode 100644 index 000000000..b91b14960 --- /dev/null +++ b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx @@ -0,0 +1,19 @@ +import { useState } from "react"; +import { useTranslation } from "react-i18next"; +import { useRouter } from "next/router"; + +import { useOrganization, useWorkspace } from "@app/context"; +import { useGetUserWsKey } from "@app/hooks/api"; + +export const SecretOverviewPage = () => { + const { t } = useTranslation(); + const router = useRouter(); + + const { currentWorkspace, isLoading } = useWorkspace(); + const { currentOrg } = useOrganization(); + const workspaceId = currentWorkspace?._id as string; + const { data: latestFileKey } = useGetUserWsKey(workspaceId); + const [searchFilter, setSearchFilter] = useState(""); + const secretPath = router.query?.secretPath as string; + return
Secret overview page
; +}; diff --git a/frontend/src/views/SecretOverviewPage/index.tsx b/frontend/src/views/SecretOverviewPage/index.tsx new file mode 100644 index 000000000..886222512 --- /dev/null +++ b/frontend/src/views/SecretOverviewPage/index.tsx @@ -0,0 +1 @@ +export { SecretOverviewPage } from "./SecretOverviewPage";