From 79e414ea9ff92fff6dfd6bf349fc8d40f88ea0c6 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 1 Aug 2024 20:12:23 +0530 Subject: [PATCH] feat: resolved invite failing and removed all unused things from frontend on previous upgrade --- backend/src/server/routes/index.ts | 3 +- .../project-membership-service.ts | 2 +- .../src/services/project/project-service.ts | 26 ++- .../v2/UpgradeOverlay/UpgradeOverlay.tsx | 47 ----- .../components/v2/UpgradeOverlay/index.tsx | 1 - .../UpgradeProjectAlert.tsx | 168 ------------------ .../v2/UpgradeProjectAlert/index.tsx | 1 - .../api/secretApprovalRequest/queries.tsx | 3 +- .../hooks/api/secretApprovalRequest/types.ts | 2 - frontend/src/views/Org/Types/index.ts | 4 +- .../UserAddToProjectModal.tsx | 2 +- .../MembersTab/components/AddMemberModal.tsx | 9 +- frontend/src/views/Project/Types/index.ts | 4 +- .../SecretApprovalRequestChanges.tsx | 5 +- .../SecretOverviewPage/SecretOverviewPage.tsx | 7 - .../SecretOverviewTableRow/SecretEditRow.tsx | 4 +- .../ProjectGeneralTab/ProjectGeneralTab.tsx | 7 +- 17 files changed, 43 insertions(+), 252 deletions(-) delete mode 100644 frontend/src/components/v2/UpgradeOverlay/UpgradeOverlay.tsx delete mode 100644 frontend/src/components/v2/UpgradeOverlay/index.tsx delete mode 100644 frontend/src/components/v2/UpgradeProjectAlert/UpgradeProjectAlert.tsx delete mode 100644 frontend/src/components/v2/UpgradeProjectAlert/index.tsx diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 023e13000..e8f80f020 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -635,7 +635,8 @@ export const registerRoutes = async ( projectUserMembershipRoleDAL, identityProjectMembershipRoleDAL, keyStore, - kmsService + kmsService, + projectBotDAL }); const projectEnvService = projectEnvServiceFactory({ diff --git a/backend/src/services/project-membership/project-membership-service.ts b/backend/src/services/project-membership/project-membership-service.ts index 45e3f9ab5..a03aec934 100644 --- a/backend/src/services/project-membership/project-membership-service.ts +++ b/backend/src/services/project-membership/project-membership-service.ts @@ -540,7 +540,7 @@ export const projectMembershipServiceFactory = ({ const project = await projectDAL.findById(projectId); if (!project) throw new BadRequestError({ message: "Project not found" }); - if (project.version !== ProjectVersion.V2) { + if (project.version === ProjectVersion.V1) { throw new BadRequestError({ message: "Please ask your project administrator to upgrade the project before leaving." }); diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index d1f393e7b..fd22349db 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -22,6 +22,7 @@ import { TIdentityProjectMembershipRoleDALFactory } from "../identity-project/id import { TKmsServiceFactory } from "../kms/kms-service"; import { TOrgDALFactory } from "../org/org-dal"; import { TOrgServiceFactory } from "../org/org-service"; +import { TProjectBotDALFactory } from "../project-bot/project-bot-dal"; import { TProjectEnvDALFactory } from "../project-env/project-env-dal"; import { TProjectKeyDALFactory } from "../project-key/project-key-dal"; import { TProjectMembershipDALFactory } from "../project-membership/project-membership-dal"; @@ -74,6 +75,7 @@ type TProjectServiceFactoryDep = { licenseService: Pick; orgDAL: Pick; keyStore: Pick; + projectBotDAL: Pick; kmsService: Pick< TKmsServiceFactory, | "updateProjectSecretManagerKmsKey" @@ -106,7 +108,8 @@ export const projectServiceFactory = ({ certificateAuthorityDAL, certificateDAL, keyStore, - kmsService + kmsService, + projectBotDAL }: TProjectServiceFactoryDep) => { /* * Create workspace. Make user the admin @@ -206,7 +209,26 @@ export const projectServiceFactory = ({ tx ); - // const { iv, tag, ciphertext, encoding, algorithm } = infisicalSymmetricEncypt(ghostUser.keys.plainPrivateKey); + const { iv, tag, ciphertext, encoding, algorithm } = infisicalSymmetricEncypt(ghostUser.keys.plainPrivateKey); + + // 5. Create & a bot for the project + await projectBotDAL.create( + { + name: "Infisical Bot (Ghost)", + projectId: project.id, + tag, + iv, + encryptedProjectKey, + encryptedProjectKeyNonce: encryptedProjectKeyIv, + encryptedPrivateKey: ciphertext, + isActive: true, + publicKey: ghostUser.keys.publicKey, + senderId: ghostUser.user.id, + algorithm, + keyEncoding: encoding + }, + tx + ); // Find the ghost users latest key const latestKey = await projectKeyDAL.findLatestProjectKey(ghostUser.user.id, project.id, tx); diff --git a/frontend/src/components/v2/UpgradeOverlay/UpgradeOverlay.tsx b/frontend/src/components/v2/UpgradeOverlay/UpgradeOverlay.tsx deleted file mode 100644 index f6d8d71c7..000000000 --- a/frontend/src/components/v2/UpgradeOverlay/UpgradeOverlay.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { useRouter } from "next/router"; - -import { Spinner } from "@app/components/v2"; -import { useWorkspace } from "@app/context"; -import { useToggle } from "@app/hooks"; -import { useGetUpgradeProjectStatus } from "@app/hooks/api/workspace/queries"; -import { ProjectVersion } from "@app/hooks/api/workspace/types"; - -export const UpgradeOverlay = () => { - const router = useRouter(); - const { currentWorkspace } = useWorkspace(); - const [isUpgrading, setIsUpgrading] = useToggle(false); - - const isProjectRoute = router.pathname.includes("/project"); - - const { isLoading: isUpgradeStatusLoading } = useGetUpgradeProjectStatus({ - projectId: currentWorkspace?.id ?? "", - enabled: isProjectRoute && currentWorkspace && currentWorkspace.version === ProjectVersion.V1, - refetchInterval: 5_000, - onSuccess: (data) => { - if (!data) return; - - if (data.status !== "IN_PROGRESS") { - setIsUpgrading.off(); - } else if (data?.status === "IN_PROGRESS") { - setIsUpgrading.on(); - } - } - }); - - // make sure only to display this on /project routes - if (!currentWorkspace || !isProjectRoute) { - return null; - } - - return !isUpgradeStatusLoading && isUpgrading ? ( -
- -
-
Please wait
- Upgrading your project... -
-
- ) : ( -
- ); -}; diff --git a/frontend/src/components/v2/UpgradeOverlay/index.tsx b/frontend/src/components/v2/UpgradeOverlay/index.tsx deleted file mode 100644 index 1a74fb6f1..000000000 --- a/frontend/src/components/v2/UpgradeOverlay/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { UpgradeOverlay } from "./UpgradeOverlay"; diff --git a/frontend/src/components/v2/UpgradeProjectAlert/UpgradeProjectAlert.tsx b/frontend/src/components/v2/UpgradeProjectAlert/UpgradeProjectAlert.tsx deleted file mode 100644 index ebcba1d87..000000000 --- a/frontend/src/components/v2/UpgradeProjectAlert/UpgradeProjectAlert.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import { useCallback, useState } from "react"; -import Link from "next/link"; -import { useRouter } from "next/router"; -import { faWarning } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { twMerge } from "tailwind-merge"; - -import { createNotification } from "@app/components/notifications"; -import { useProjectPermission } from "@app/context"; -import { useGetUpgradeProjectStatus, useUpgradeProject } from "@app/hooks/api"; -import { Workspace } from "@app/hooks/api/types"; -import { workspaceKeys } from "@app/hooks/api/workspace/queries"; -import { ProjectVersion } from "@app/hooks/api/workspace/types"; -import { queryClient } from "@app/reactQuery"; - -import { Button } from "../Button"; -import { Tooltip } from "../Tooltip"; - -export type UpgradeProjectAlertProps = { - project: Workspace; - transparent?: boolean; -}; - -export const UpgradeProjectAlert = ({ - project, - transparent -}: UpgradeProjectAlertProps): JSX.Element | null => { - const router = useRouter(); - const { hasProjectRole } = useProjectPermission(); - const upgradeProject = useUpgradeProject(); - const [currentStatus, setCurrentStatus] = useState(null); - const [isUpgrading, setIsUpgrading] = useState(false); - - const isProjectAdmin = hasProjectRole("admin"); - - const { - data: projectStatus, - isLoading: statusIsLoading, - refetch: manualProjectStatusRefetch - } = useGetUpgradeProjectStatus({ - projectId: project.id, - enabled: isProjectAdmin && project.version === ProjectVersion.V1, - refetchInterval: 5_000, - onSuccess: (data) => { - if (!isProjectAdmin) { - return; - } - - if (data && data?.status !== null) { - if (data.status === "IN_PROGRESS") { - setCurrentStatus("Your upgrade is being processed."); - } else if (data.status === "FAILED") { - setCurrentStatus("Upgrade failed, please try again."); - } - } - - if (currentStatus !== null && data?.status === null) { - queryClient.invalidateQueries(workspaceKeys.getAllUserWorkspace); - router.reload(); - } - } - }); - - const onUpgradeProject = useCallback(async () => { - if (upgradeProject.isLoading) { - return; - } - setIsUpgrading(true); - const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY"); - - if (!PRIVATE_KEY) { - createNotification({ - type: "error", - text: "Private key not found" - }); - return; - } - - await upgradeProject.mutateAsync({ - projectId: project.id, - privateKey: PRIVATE_KEY - }); - - manualProjectStatusRefetch(); - - setTimeout(() => setIsUpgrading(false), 5_000); - }, []); - - const isLoading = - isUpgrading || - ((upgradeProject.isLoading || - currentStatus !== null || - (currentStatus === null && statusIsLoading)) && - projectStatus?.status !== "FAILED"); - - if (project.version !== ProjectVersion.V1) return null; - - if (transparent) { - return ( - - ); - } - - return ( -
- -
- Upgrade your project - {isProjectAdmin ? ( - <> -

- Upgrade your project version to continue receiving the latest improvements and - patches. -

- - - Learn more - - - - ) : ( - <> -

- Please ask a project admin to upgrade the project. -
- Upgrading the project version is required to continue receiving the latest - improvements and patches. -

- - - Learn more - - - - )} - {currentStatus &&

Status: {currentStatus}

} -
-
- - - -
-
- ); -}; diff --git a/frontend/src/components/v2/UpgradeProjectAlert/index.tsx b/frontend/src/components/v2/UpgradeProjectAlert/index.tsx deleted file mode 100644 index ab67f86cf..000000000 --- a/frontend/src/components/v2/UpgradeProjectAlert/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { UpgradeProjectAlert } from "./UpgradeProjectAlert"; diff --git a/frontend/src/hooks/api/secretApprovalRequest/queries.tsx b/frontend/src/hooks/api/secretApprovalRequest/queries.tsx index d990797b6..a15316018 100644 --- a/frontend/src/hooks/api/secretApprovalRequest/queries.tsx +++ b/frontend/src/hooks/api/secretApprovalRequest/queries.tsx @@ -194,7 +194,6 @@ const fetchSecretApprovalRequestDetails = async ({ export const useGetSecretApprovalRequestDetails = ({ id, - decryptKey, options = {} }: TGetSecretApprovalRequestDetails & { options?: Omit< @@ -210,7 +209,7 @@ export const useGetSecretApprovalRequestDetails = ({ useQuery({ queryKey: secretApprovalRequestKeys.detail({ id }), queryFn: () => fetchSecretApprovalRequestDetails({ id }), - enabled: Boolean(id && decryptKey) && (options?.enabled ?? true) + enabled: Boolean(id) && (options?.enabled ?? true) }); const fetchSecretApprovalRequestCount = async ({ workspaceId }: TGetSecretApprovalRequestCount) => { diff --git a/frontend/src/hooks/api/secretApprovalRequest/types.ts b/frontend/src/hooks/api/secretApprovalRequest/types.ts index 9d9e46a7f..c8a685115 100644 --- a/frontend/src/hooks/api/secretApprovalRequest/types.ts +++ b/frontend/src/hooks/api/secretApprovalRequest/types.ts @@ -1,4 +1,3 @@ -import { UserWsKeyPair } from "../keys/types"; import { TSecretApprovalPolicy } from "../secretApproval/types"; import { SecretV3Raw } from "../secrets/types"; import { WsTag } from "../tags/types"; @@ -110,7 +109,6 @@ export type TGetSecretApprovalRequestCount = { export type TGetSecretApprovalRequestDetails = { id: string; - decryptKey: UserWsKeyPair; }; export type TUpdateSecretApprovalReviewStatusDTO = { diff --git a/frontend/src/views/Org/Types/index.ts b/frontend/src/views/Org/Types/index.ts index 76f47c6f2..8fa062aa1 100644 --- a/frontend/src/views/Org/Types/index.ts +++ b/frontend/src/views/Org/Types/index.ts @@ -1,3 +1,3 @@ -import { TabSections, isTabSection } from "./TabSections"; +import { isTabSection,TabSections } from "./TabSections"; -export { TabSections, isTabSection }; +export { isTabSection,TabSections }; diff --git a/frontend/src/views/Org/UserPage/components/UserProjectsSection/UserAddToProjectModal.tsx b/frontend/src/views/Org/UserPage/components/UserProjectsSection/UserAddToProjectModal.tsx index 2cef4f5f3..713411ec2 100644 --- a/frontend/src/views/Org/UserPage/components/UserProjectsSection/UserAddToProjectModal.tsx +++ b/frontend/src/views/Org/UserPage/components/UserProjectsSection/UserAddToProjectModal.tsx @@ -58,7 +58,7 @@ export const UserAddToProjectModal = ({ membershipId, popUp, handlePopUpToggle } return (workspaces || []).filter( ({ id, orgId: projectOrgId, version }) => - !wsWorkspaceIds.has(id) && projectOrgId === currentOrg?.id && version === ProjectVersion.V2 + !wsWorkspaceIds.has(id) && projectOrgId === currentOrg?.id && version !== ProjectVersion.V1 ); }, [workspaces, projectMemberships]); diff --git a/frontend/src/views/Project/MembersPage/components/MembersTab/components/AddMemberModal.tsx b/frontend/src/views/Project/MembersPage/components/MembersTab/components/AddMemberModal.tsx index cd8137d8b..8a5fe705a 100644 --- a/frontend/src/views/Project/MembersPage/components/MembersTab/components/AddMemberModal.tsx +++ b/frontend/src/views/Project/MembersPage/components/MembersTab/components/AddMemberModal.tsx @@ -74,19 +74,12 @@ export const AddMemberModal = ({ popUp, handlePopUpToggle }: Props) => { decryptKey: wsKey, members: [{ orgMembershipId, userPublicKey: orgUser.user.publicKey }] }); - } else if (currentWorkspace.version === ProjectVersion.V2) { + } else { await addUserToWorkspaceNonE2EE({ projectId: workspaceId, usernames: [orgUser.user.username], orgId }); - } else { - createNotification({ - text: "Failed to add user to project, unknown project type", - type: "error" - }); - - return; } createNotification({ text: "Successfully added user to the project", diff --git a/frontend/src/views/Project/Types/index.ts b/frontend/src/views/Project/Types/index.ts index 76f47c6f2..8fa062aa1 100644 --- a/frontend/src/views/Project/Types/index.ts +++ b/frontend/src/views/Project/Types/index.ts @@ -1,3 +1,3 @@ -import { TabSections, isTabSection } from "./TabSections"; +import { isTabSection,TabSections } from "./TabSections"; -export { TabSections, isTabSection }; +export { isTabSection,TabSections }; diff --git a/frontend/src/views/SecretApprovalPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx b/frontend/src/views/SecretApprovalPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx index 45de6417c..f313149d3 100644 --- a/frontend/src/views/SecretApprovalPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx +++ b/frontend/src/views/SecretApprovalPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx @@ -16,7 +16,6 @@ import { Button, ContentLoader, EmptyState, IconButton, Tooltip } from "@app/com import { useUser } from "@app/context"; import { useGetSecretApprovalRequestDetails, - useGetUserWsKey, useUpdateSecretApprovalReviewStatus } from "@app/hooks/api"; import { ApprovalStatus, CommitType } from "@app/hooks/api/types"; @@ -81,14 +80,12 @@ export const SecretApprovalRequestChanges = ({ workspaceId }: Props) => { const { user: userSession } = useUser(); - const { data: decryptFileKey } = useGetUserWsKey(workspaceId); const { data: secretApprovalRequestDetails, isSuccess: isSecretApprovalRequestSuccess, isLoading: isSecretApprovalRequestLoading } = useGetSecretApprovalRequestDetails({ - id: approvalRequestId, - decryptKey: decryptFileKey! + id: approvalRequestId }); const { diff --git a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx index f9f279fe7..27e14e907 100644 --- a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx +++ b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx @@ -42,7 +42,6 @@ import { Tooltip, Tr } from "@app/components/v2"; -import { UpgradeProjectAlert } from "@app/components/v2/UpgradeProjectAlert"; import { ProjectPermissionActions, ProjectPermissionSub, @@ -64,7 +63,6 @@ import { import { useUpdateFolderBatch } from "@app/hooks/api/secretFolders/queries"; import { TUpdateFolderBatchDTO } from "@app/hooks/api/secretFolders/types"; import { SecretType, TSecretFolder } from "@app/hooks/api/types"; -import { ProjectVersion } from "@app/hooks/api/workspace/types"; import { FolderForm } from "../SecretMainPage/components/ActionBar/FolderForm"; import { CreateSecretForm } from "./components/CreateSecretForm"; @@ -520,11 +518,6 @@ export const SecretOverviewPage = () => { .

- - {currentWorkspace?.version === ProjectVersion.V1 && ( - - )} -
diff --git a/frontend/src/views/SecretOverviewPage/components/SecretOverviewTableRow/SecretEditRow.tsx b/frontend/src/views/SecretOverviewPage/components/SecretOverviewTableRow/SecretEditRow.tsx index 28f5fe964..1888bcda3 100644 --- a/frontend/src/views/SecretOverviewPage/components/SecretOverviewTableRow/SecretEditRow.tsx +++ b/frontend/src/views/SecretOverviewPage/components/SecretOverviewTableRow/SecretEditRow.tsx @@ -1,4 +1,4 @@ -import { useState, useCallback } from "react"; +import { useCallback,useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { subject } from "@casl/ability"; import { faCheck, faCopy, faTrash, faXmark } from "@fortawesome/free-solid-svg-icons"; @@ -7,7 +7,7 @@ import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; -import { IconButton, Tooltip, DeleteActionModal } from "@app/components/v2"; +import { DeleteActionModal,IconButton, Tooltip } from "@app/components/v2"; import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context"; import { useToggle } from "@app/hooks"; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx index 992b1b6c6..fa63f4c97 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx @@ -1,3 +1,6 @@ +import { useWorkspace } from "@app/context"; +import { ProjectVersion } from "@app/hooks/api/workspace/types"; + import { AuditLogsRetentionSection } from "../AuditLogsRetentionSection"; import { AutoCapitalizationSection } from "../AutoCapitalizationSection"; import { BackfillSecretReferenceSecretion } from "../BackfillSecretReferenceSection"; @@ -9,6 +12,8 @@ import { RebuildSecretIndicesSection } from "../RebuildSecretIndicesSection/Rebu import { SecretTagsSection } from "../SecretTagsSection"; export const ProjectGeneralTab = () => { + const { currentWorkspace } = useWorkspace(); + return (
@@ -18,7 +23,7 @@ export const ProjectGeneralTab = () => { - + {currentWorkspace?.version !== ProjectVersion.V3 && }
);