diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index c1125dad8..7380f272d 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -767,7 +767,7 @@ export const updateSecretHelper = async ({ workspaceId: new Types.ObjectId(workspaceId) }); - const secretBlindIndex = await generateSecretBlindIndexWithSaltHelper({ + const oldSecretBlindIndex = await generateSecretBlindIndexWithSaltHelper({ secretName, salt }); @@ -778,7 +778,7 @@ export const updateSecretHelper = async ({ let newSecretNameBlindIndex = undefined; if (newSecretName) { newSecretNameBlindIndex = await generateSecretBlindIndexWithSaltHelper({ - secretName, + secretName: newSecretName, salt }); const doesSecretAlreadyExist = await Secret.exists({ @@ -788,15 +788,17 @@ export const updateSecretHelper = async ({ folder: folderId, type }); - if (!doesSecretAlreadyExist) + + if (doesSecretAlreadyExist) { throw BadRequestError({ message: "Secret with the provided name already exist" }); + } } if (type === SECRET_SHARED) { // case: update shared secret secret = await Secret.findOneAndUpdate( { - secretBlindIndex, + secretBlindIndex: oldSecretBlindIndex, workspace: new Types.ObjectId(workspaceId), environment, folder: folderId, @@ -826,13 +828,10 @@ export const updateSecretHelper = async ({ secret = await Secret.findOneAndUpdate( { - secretBlindIndex, + secretBlindIndex: oldSecretBlindIndex, workspace: new Types.ObjectId(workspaceId), environment, type, - secretKeyIV, - secretKeyTag, - secretKeyCiphertext, folder: folderId, ...getAuthDataPayloadUserObj(authData) }, @@ -840,13 +839,13 @@ export const updateSecretHelper = async ({ secretValueCiphertext, secretValueIV, secretValueTag, + secretKeyIV, + secretKeyTag, + secretKeyCiphertext, tags, skipMultilineEncoding, secretBlindIndex: newSecretNameBlindIndex, $inc: { version: 1 } - }, - { - new: true } ); } @@ -863,7 +862,7 @@ export const updateSecretHelper = async ({ ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}), environment: secret.environment, isDeleted: false, - secretBlindIndex: newSecretName ? newSecretNameBlindIndex : secretBlindIndex, + secretBlindIndex: newSecretName ? newSecretNameBlindIndex : oldSecretBlindIndex, secretKeyCiphertext: secret.secretKeyCiphertext, secretKeyIV: secret.secretKeyIV, secretKeyTag: secret.secretKeyTag, @@ -1154,6 +1153,7 @@ const recursivelyExpandSecret = async ( let interpolatedValue = interpolatedSec[key]; if (!interpolatedValue) { + // eslint-disable-next-line no-console console.error(`Couldn't find referenced value - ${key}`); return ""; } diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx index 754a57103..a2eb5eb31 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx @@ -210,6 +210,7 @@ export const SecretItem = memo( isReadOnly={isReadOnly} autoCapitalization={currentWorkspace?.autoCapitalization} variant="plain" + isDisabled={isOverriden} {...field} className="w-full focus:text-bunker-100 focus:ring-transparent px-0" /> diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx index 98a18881e..fb98bef98 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretListView.tsx @@ -9,10 +9,9 @@ import { usePopUp } from "@app/hooks"; import { useCreateSecretV3, useDeleteSecretV3, useUpdateSecretV3 } from "@app/hooks/api"; import { secretKeys } from "@app/hooks/api/secrets/queries"; import { DecryptedSecret } from "@app/hooks/api/secrets/types"; +import { secretSnapshotKeys } from "@app/hooks/api/secretSnapshots/queries"; import { UserWsKeyPair, WsTag } from "@app/hooks/api/types"; -import { secretSnapshotKeys } from "~/hooks/api/secretSnapshots/queries"; - import { useSelectedSecretActions, useSelectedSecrets } from "../../SecretMainPage.store"; import { Filter, GroupBy, SortDir } from "../../SecretMainPage.types"; import { SecretDetailSidebar } from "./SecretDetaiSidebar"; @@ -194,19 +193,8 @@ export const SecretListView = ({ ) && isSameTags; try { - // personal secret change - if (overrideAction === "deleted") await handleSecretOperation("delete", "personal", key); - else if (overrideAction && idOverride) - await handleSecretOperation("update", "personal", oldKey, { - value: valueOverride, - newKey: hasKeyChanged ? key : undefined, - skipMultilineEncoding: modSecret.skipMultilineEncoding - }); - else if (overrideAction) - await handleSecretOperation("create", "personal", key, { value: valueOverride }); - // shared secret change - if (!isSharedSecUnchanged) + if (!isSharedSecUnchanged) { await handleSecretOperation("update", "shared", oldKey, { value, tags: tagIds, @@ -214,6 +202,20 @@ export const SecretListView = ({ newKey: hasKeyChanged ? key : undefined, skipMultilineEncoding: modSecret.skipMultilineEncoding }); + } + + // personal secret change + if (overrideAction === "deleted") { + await handleSecretOperation("delete", "personal", key); + } else if (overrideAction && idOverride){ + await handleSecretOperation("update", "personal", oldKey, { + value: valueOverride, + newKey: hasKeyChanged ? key : undefined, + skipMultilineEncoding: modSecret.skipMultilineEncoding + }); + } else if (overrideAction) { + await handleSecretOperation("create", "personal", key, { value: valueOverride }); + } queryClient.invalidateQueries( secretKeys.getProjectSecret({ workspaceId, environment, secretPath })