diff --git a/frontend/src/lib/fn/string.ts b/frontend/src/lib/fn/string.ts
index 6b2842701..a733308b7 100644
--- a/frontend/src/lib/fn/string.ts
+++ b/frontend/src/lib/fn/string.ts
@@ -8,6 +8,11 @@ export const formatReservedPaths = (secretPath: string) => {
return secretPath;
};
+export const parsePathFromReplicatedPath = (secretPath: string) => {
+ const i = secretPath.indexOf(ReservedFolders.SecretReplication);
+ return secretPath.slice(0, i);
+};
+
export const camelCaseToSpaces = (input: string) => {
return input.replace(/([a-z])([A-Z])/g, "$1 $2");
};
diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx
index 1de35b528..ca0e598a2 100644
--- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx
+++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/SecretApprovalRequest.tsx
@@ -224,8 +224,7 @@ export const SecretApprovalRequest = () => {
createdAt,
reviewers,
status,
- committerUser,
- isReplicated: isReplication
+ committerUser
} = secretApproval;
const isReviewed = reviewers.some(
({ status: reviewStatus, userId }) =>
@@ -244,13 +243,15 @@ export const SecretApprovalRequest = () => {
>
- {generateCommitText(commits)}
+ {secretApproval.isReplicated
+ ? `${commits.length} secret pending import`
+ : generateCommitText(commits)}
#{secretApproval.slug}
Opened {formatDistance(new Date(createdAt), new Date())} ago by{" "}
{committerUser?.firstName || ""} {committerUser?.lastName || ""} (
- {committerUser?.email}){isReplication && " via replication"}
+ {committerUser?.email})
{!isReviewed && status === "open" && " - Review required"}
diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx
index 43a729bd8..806cda25d 100644
--- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx
+++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChangeItem.tsx
@@ -12,7 +12,7 @@ import {
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import { Tag, Tooltip } from "@app/components/v2";
+import { SecretInput, Tag, Tooltip } from "@app/components/v2";
import { CommitType, SecretV3Raw, TSecretApprovalSecChange, WsTag } from "@app/hooks/api/types";
export type Props = {
@@ -86,10 +86,10 @@ export const SecretApprovalRequestChangeItem = ({
{op === CommitType.UPDATE || op === CommitType.DELETE ? (
-
Legacy Secret
+
Previous Secret
- Deprecated
+ Previous
@@ -104,27 +104,22 @@ export const SecretApprovalRequestChangeItem = ({
Rotated Secret value will not be affected
) : (
-
setIsOldSecretValueVisible(!isOldSecretValueVisible)}
- className="relative flex max-w-[100vh] flex-row items-center justify-between rounded-md border border-mineshaft-500 bg-mineshaft-900 px-2"
- >
+
+
setIsOldSecretValueVisible(!isOldSecretValueVisible)}
>
- {isOldSecretValueVisible
- ? secretVersion?.secretValue || "EMPTY"
- : secretVersion?.secretValue
- ? secretVersion?.secretValue?.split("").map(() => "•")
- : "EMPTY"}{" "}
+
- {secretVersion?.secretValue && (
-
-
-
- )}
)}
@@ -191,8 +186,7 @@ export const SecretApprovalRequestChangeItem = ({
) : (
- {" "}
- Secret not existent in the previous version.
+ Secret did not exist in the previous version.
)}
{op === CommitType.UPDATE || op === CommitType.CREATE ? (
@@ -216,27 +210,22 @@ export const SecretApprovalRequestChangeItem = ({
Rotated Secret value will not be affected
) : (
-
setIsNewSecretValueVisible(!isNewSecretValueVisible)}
- className="relative flex max-w-[100vh] flex-row items-center justify-between rounded-md border border-mineshaft-500 bg-mineshaft-900 px-2"
- >
+
+
setIsNewSecretValueVisible(!isNewSecretValueVisible)}
>
- {isNewSecretValueVisible
- ? newVersion?.secretValue || "EMPTY"
- : newVersion?.secretValue
- ? newVersion?.secretValue?.split("").map(() => "•")
- : "EMPTY"}{" "}
+
- {newVersion?.secretValue && (
-
-
-
- )}
)}
@@ -302,7 +291,7 @@ export const SecretApprovalRequestChangeItem = ({
) : (
{" "}
- Secret not existent in the new version.
+ Secret did not exist in the previous version.
)}
diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx
index 218365ae9..940d11fdb 100644
--- a/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx
+++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/components/SecretApprovalRequest/components/SecretApprovalRequestChanges.tsx
@@ -30,19 +30,24 @@ import {
TextArea,
Tooltip
} from "@app/components/v2";
-import { useUser } from "@app/context";
+import { useUser, useWorkspace } from "@app/context";
import { usePopUp } from "@app/hooks";
import {
useGetSecretApprovalRequestDetails,
+ useGetSecretImports,
useUpdateSecretApprovalReviewStatus
} from "@app/hooks/api";
import { ApprovalStatus, CommitType } from "@app/hooks/api/types";
-import { formatReservedPaths } from "@app/lib/fn/string";
+import { formatReservedPaths, parsePathFromReplicatedPath } from "@app/lib/fn/string";
import { SecretApprovalRequestAction } from "./SecretApprovalRequestAction";
import { SecretApprovalRequestChangeItem } from "./SecretApprovalRequestChangeItem";
-export const generateCommitText = (commits: { op: CommitType }[] = []) => {
+export const generateCommitText = (commits: { op: CommitType }[] = [], isReplicated = false) => {
+ if (isReplicated) {
+ return {commits.length} secret pending import;
+ }
+
const score: Record = {};
commits.forEach(({ op }) => {
score[op] = (score?.[op] || 0) + 1;
@@ -74,7 +79,6 @@ export const generateCommitText = (commits: { op: CommitType }[] = []) => {
deleted
);
-
return text;
};
@@ -105,6 +109,7 @@ export const SecretApprovalRequestChanges = ({
workspaceId
}: Props) => {
const { user: userSession } = useUser();
+ const { currentWorkspace } = useWorkspace();
const {
data: secretApprovalRequestDetails,
isSuccess: isSecretApprovalRequestSuccess,
@@ -112,6 +117,20 @@ export const SecretApprovalRequestChanges = ({
} = useGetSecretApprovalRequestDetails({
id: approvalRequestId
});
+ const approvalSecretPath = parsePathFromReplicatedPath(
+ secretApprovalRequestDetails?.secretPath || ""
+ );
+ const { data: secretImports } = useGetSecretImports({
+ environment: secretApprovalRequestDetails?.environment || "",
+ projectId: currentWorkspace.id,
+ path: approvalSecretPath
+ });
+
+ const replicatedImport = secretApprovalRequestDetails?.isReplicated
+ ? secretImports?.find(
+ (el) => secretApprovalRequestDetails?.secretPath?.includes(el.id) && el.isReplication
+ )
+ : undefined;
const {
mutateAsync: updateSecretApprovalRequestStatus,
@@ -226,34 +245,16 @@ export const SecretApprovalRequestChanges = ({
: secretApprovalRequestDetails.status}
-
-
- {generateCommitText(secretApprovalRequestDetails.commits)}
- {secretApprovalRequestDetails.isReplicated && (
-
(replication)
+
+
+ {generateCommitText(
+ secretApprovalRequestDetails.commits,
+ secretApprovalRequestDetails.isReplicated
)}
-
-
- {secretApprovalRequestDetails?.committerUser?.firstName || ""}
- {secretApprovalRequestDetails?.committerUser?.lastName || ""} (
- {secretApprovalRequestDetails?.committerUser?.email}) wants to change{" "}
- {secretApprovalRequestDetails.commits.length} secret values in
-
-
- {secretApprovalRequestDetails.environment}
-
-
-
-
-
-
- {formatReservedPaths(secretApprovalRequestDetails.secretPath)}
-
-
+
+ By {secretApprovalRequestDetails?.committerUser?.firstName} (
+ {secretApprovalRequestDetails?.committerUser?.email})
{!hasMerged &&
@@ -367,10 +368,87 @@ export const SecretApprovalRequestChanges = ({
)}
+
+
+ {secretApprovalRequestDetails.isReplicated ? (
+
+ A secret import in
+
+ {secretApprovalRequestDetails?.environment}
+
+
+
+
+
+
+
+ {approvalSecretPath}
+
+
+
+ has pending changes to be accepted from its source at{" "}
+
+ {replicatedImport?.importEnv?.slug}
+
+
+
+
+
+
+
+ {replicatedImport?.importPath}
+
+
+
+ . Approving these changes will add them to that import.
+
+ ) : (
+
+
Secret(s) in
+
+ {secretApprovalRequestDetails?.environment}
+
+
+
+
+
+
+
+ {formatReservedPaths(secretApprovalRequestDetails.secretPath)}
+
+
+
+
+ have pending changes. Approving these changes will add them to that environment
+ and path.
+
+
+ )}
+
+
{secretApprovalRequestDetails.commits.map(
({ op, secretVersion, secret, ...newVersion }, index) => (