From 56bf82e4f630baec256ccce26145ecc26bf053cd Mon Sep 17 00:00:00 2001 From: Rhythm Bhiwani Date: Mon, 11 Mar 2024 06:52:37 +0530 Subject: [PATCH 1/7] Redirecting to overview page if environment doesn't exists in secrets main page --- .../views/SecretMainPage/SecretMainPage.tsx | 21 ++++++++++++++-- .../SecretOverviewPage/SecretOverviewPage.tsx | 24 ++++++++++--------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/frontend/src/views/SecretMainPage/SecretMainPage.tsx b/frontend/src/views/SecretMainPage/SecretMainPage.tsx index b0e34d507..dbc03af53 100644 --- a/frontend/src/views/SecretMainPage/SecretMainPage.tsx +++ b/frontend/src/views/SecretMainPage/SecretMainPage.tsx @@ -1,10 +1,11 @@ -import { useCallback, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useRouter } from "next/router"; import { subject } from "@casl/ability"; import { faArrowDown, faArrowUp } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; import NavHeader from "@app/components/navigation/NavHeader"; import { PermissionDeniedBanner } from "@app/components/permissions"; import { ContentLoader } from "@app/components/v2"; @@ -47,9 +48,10 @@ const LOADER_TEXT = [ export const SecretMainPage = () => { const { t } = useTranslation(); - const { currentWorkspace } = useWorkspace(); + const { currentWorkspace, isLoading: isWorkspaceLoading } = useWorkspace(); const router = useRouter(); const { permission } = useProjectPermission(); + const { createNotification } = useNotificationContext(); const [isVisible, setIsVisible] = useState(false); const [sortDir, setSortDir] = useState(SortDir.ASC); @@ -65,6 +67,7 @@ export const SecretMainPage = () => { // env slug const environment = router.query.env as string; const workspaceId = currentWorkspace?.id || ""; + console.log("currentWorkspace", currentWorkspace, environment); const secretPath = (router.query.secretPath as string) || "/"; const canReadSecret = permission.can( ProjectPermissionActions.Read, @@ -75,6 +78,20 @@ export const SecretMainPage = () => { ProjectPermissionSub.SecretRollback ); + useEffect(() => { + if ( + !isWorkspaceLoading && + !currentWorkspace?.environments.find((env) => env.slug === environment) && + router.isReady + ) { + router.push(`/project/${workspaceId}/secrets/overview`); + createNotification({ + text: "No envronment found with given slug", + type: "error" + }); + } + }, [isWorkspaceLoading, currentWorkspace, environment, router.isReady]); + const { data: decryptFileKey } = useGetUserWsKey(workspaceId); // fetch secrets diff --git a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx index 1fba46266..37916884b 100644 --- a/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx +++ b/frontend/src/views/SecretOverviewPage/SecretOverviewPage.tsx @@ -2,15 +2,15 @@ import { useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import Link from "next/link"; import { useRouter } from "next/router"; -import { faCheckCircle } from "@fortawesome/free-regular-svg-icons"; import { subject } from "@casl/ability"; +import { faCheckCircle } from "@fortawesome/free-regular-svg-icons"; import { faAngleDown, faArrowDown, faArrowUp, faFolderBlank, - faList, faFolderPlus, + faList, faMagnifyingGlass, faPlus } from "@fortawesome/free-solid-svg-icons"; @@ -207,10 +207,10 @@ export const SecretOverviewPage = () => { }; const handleEnvSelect = (envId: string) => { - if (visibleEnvs.map(env => env.id).includes(envId)) { - setVisisbleEnvs(visibleEnvs.filter(env => env.id !== envId)) + if (visibleEnvs.map((env) => env.id).includes(envId)) { + setVisisbleEnvs(visibleEnvs.filter((env) => env.id !== envId)); } else { - setVisisbleEnvs(visibleEnvs.concat(userAvailableEnvs.filter(env => env.id === envId))) + setVisisbleEnvs(visibleEnvs.concat(userAvailableEnvs.filter((env) => env.id === envId))); } }; @@ -396,7 +396,7 @@ export const SecretOverviewPage = () => { ariaLabel="Environments" variant="plain" size="sm" - className="flex justify-center items-center overflow-hidden p-0 w-11 bg-mineshaft-800 hover:bg-primary/10 hover:border-primary/60 border border-mineshaft-600 mr-2" + className="mr-2 flex w-11 items-center justify-center overflow-hidden border border-mineshaft-600 bg-mineshaft-800 p-0 hover:border-primary/60 hover:bg-primary/10" > @@ -408,17 +408,19 @@ export const SecretOverviewPage = () => { {userAvailableEnvs.map((avaiableEnv) => { const { id: envId, name } = avaiableEnv; - const isEnvSelected = visibleEnvs.map(env => env.id).includes(envId); + const isEnvSelected = visibleEnvs.map((env) => env.id).includes(envId); return ( handleEnvSelect(envId)} key={envId} - icon={isEnvSelected && } + icon={ + isEnvSelected && ( + + ) + } iconPos="left" > -
- {name} -
+
{name}
); })} From 522a03c2ad5d2661e961de04f4ca046dc70e2700 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:05:33 +0100 Subject: [PATCH 2/7] Fix: Helper function for getting service token --- cli/packages/util/helper.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cli/packages/util/helper.go b/cli/packages/util/helper.go index 043db468e..413afb2b8 100644 --- a/cli/packages/util/helper.go +++ b/cli/packages/util/helper.go @@ -11,6 +11,7 @@ import ( "strings" "github.com/Infisical/infisical-merge/packages/models" + "github.com/spf13/cobra" ) type DecodedSymmetricEncryptionDetails = struct { @@ -63,6 +64,20 @@ func IsSecretTypeValid(s string) bool { return false } +func GetInfisicalServiceToken(cmd *cobra.Command) (serviceToken string, err error) { + infisicalToken, err := cmd.Flags().GetString("token") + + if infisicalToken == "" { + infisicalToken = os.Getenv(INFISICAL_TOKEN_NAME) + } + + if err != nil { + return "", err + } + + return infisicalToken, nil +} + // Checks if the passed in email already exists in the users slice func ConfigContainsEmail(users []models.LoggedInUser, email string) bool { for _, value := range users { From 74b5e8cbebeac0238781d691cdfd429447239d4e Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:05:47 +0100 Subject: [PATCH 3/7] Fix: Failing to get service token --- cli/packages/cmd/secrets.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 667f39b95..ffe82179c 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -7,7 +7,6 @@ import ( "crypto/sha256" "encoding/base64" "fmt" - "os" "regexp" "sort" "strings" @@ -39,10 +38,10 @@ var secretsCmd = &cobra.Command{ } } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) - if infisicalToken == "" { - infisicalToken = os.Getenv(util.INFISICAL_TOKEN_NAME) + if err != nil { + util.HandleError(err, "Unable to parse flag") } if err != nil { @@ -399,7 +398,8 @@ func getSecretsByNames(cmd *cobra.Command, args []string) { } } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) + if err != nil { util.HandleError(err, "Unable to parse flag") } @@ -466,7 +466,8 @@ func generateExampleEnv(cmd *cobra.Command, args []string) { util.HandleError(err, "Unable to parse flag") } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) + if err != nil { util.HandleError(err, "Unable to parse flag") } From 1f3fded404f3bf7f20a3b2395cf7674dd8539be5 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:05:52 +0100 Subject: [PATCH 4/7] Fix: Failing to get service token --- cli/packages/cmd/run.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cli/packages/cmd/run.go b/cli/packages/cmd/run.go index 48eaffea9..d008af1ec 100644 --- a/cli/packages/cmd/run.go +++ b/cli/packages/cmd/run.go @@ -62,7 +62,8 @@ var runCmd = &cobra.Command{ } } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) + if err != nil { util.HandleError(err, "Unable to parse flag") } From 9cc3e585616ad7780642bdce4656f48ef01528bd Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:05:54 +0100 Subject: [PATCH 5/7] Fix: Failing to get service token --- cli/packages/cmd/folder.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cli/packages/cmd/folder.go b/cli/packages/cmd/folder.go index 12e2206fa..290f32c38 100644 --- a/cli/packages/cmd/folder.go +++ b/cli/packages/cmd/folder.go @@ -36,7 +36,8 @@ var getCmd = &cobra.Command{ } } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) + if err != nil { util.HandleError(err, "Unable to parse flag") } From 40ccab65766dee0534b48b3253dcd57537a13621 Mon Sep 17 00:00:00 2001 From: Daniel Hougaard <62331820+DanielHougaard@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:05:56 +0100 Subject: [PATCH 6/7] Fix: Failing to get service token --- cli/packages/cmd/export.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cli/packages/cmd/export.go b/cli/packages/cmd/export.go index 9c3590e89..1a34219eb 100644 --- a/cli/packages/cmd/export.go +++ b/cli/packages/cmd/export.go @@ -59,7 +59,8 @@ var exportCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - infisicalToken, err := cmd.Flags().GetString("token") + infisicalToken, err := util.GetInfisicalServiceToken(cmd) + if err != nil { util.HandleError(err, "Unable to parse flag") } From e527d99654770a0795db2b5863a6efacff9f6a72 Mon Sep 17 00:00:00 2001 From: Rhythm Bhiwani <47269183+rhythmbhiwani@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:42:18 +0530 Subject: [PATCH 7/7] Remove console.log --- frontend/src/views/SecretMainPage/SecretMainPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/views/SecretMainPage/SecretMainPage.tsx b/frontend/src/views/SecretMainPage/SecretMainPage.tsx index dbc03af53..312b676b7 100644 --- a/frontend/src/views/SecretMainPage/SecretMainPage.tsx +++ b/frontend/src/views/SecretMainPage/SecretMainPage.tsx @@ -67,7 +67,6 @@ export const SecretMainPage = () => { // env slug const environment = router.query.env as string; const workspaceId = currentWorkspace?.id || ""; - console.log("currentWorkspace", currentWorkspace, environment); const secretPath = (router.query.secretPath as string) || "/"; const canReadSecret = permission.can( ProjectPermissionActions.Read,