minor improvements

This commit is contained in:
Scott Wilson
2024-10-17 13:55:17 -07:00
committed by =
parent 8094ef607a
commit fae4e1fa55
4 changed files with 30 additions and 25 deletions

View File

@@ -541,8 +541,8 @@ export const expandSecretReferencesFactory = ({
secretPath: string; secretPath: string;
environment: string; environment: string;
}) => { }) => {
const { stackTrace } = await recursivelyExpandSecret({ ...inputSecret, shouldStackTrace: true }); const { stackTrace, expandedValue } = await recursivelyExpandSecret({ ...inputSecret, shouldStackTrace: true });
return stackTrace; return { stackTrace, expandedValue };
}; };
return { expandSecretReferences: expandSecret, getExpandedSecretStackTrace }; return { expandSecretReferences: expandSecret, getExpandedSecretStackTrace };

View File

@@ -1976,7 +1976,7 @@ export const secretV2BridgeServiceFactory = ({
? secretManagerDecryptor({ cipherTextBlob: secret.encryptedValue }).toString() ? secretManagerDecryptor({ cipherTextBlob: secret.encryptedValue }).toString()
: ""; : "";
const { getExpandedSecretStackTrace, expandSecretReferences } = expandSecretReferencesFactory({ const { getExpandedSecretStackTrace } = expandSecretReferencesFactory({
projectId, projectId,
folderDAL, folderDAL,
secretDAL, secretDAL,
@@ -1988,17 +1988,13 @@ export const secretV2BridgeServiceFactory = ({
) )
}); });
const tree = await getExpandedSecretStackTrace({ const { expandedValue, stackTrace } = await getExpandedSecretStackTrace({
environment, environment,
secretPath, secretPath,
value: secretValue value: secretValue
}); });
const value = await expandSecretReferences({
environment, return { tree: stackTrace, value: expandedValue };
secretPath,
value: secretValue
});
return { tree, value };
}; };
return { return {

View File

@@ -65,6 +65,8 @@ type Props = {
handleSecretShare: (value: string) => void; handleSecretShare: (value: string) => void;
}; };
const INTERPOLATION_SYNTAX_REG = /\${([^}]+)}/g;
export const SecretDetailSidebar = ({ export const SecretDetailSidebar = ({
isOpen, isOpen,
onToggle, onToggle,
@@ -174,6 +176,8 @@ export const SecretDetailSidebar = ({
const secretReminderRepeatDays = watch("reminderRepeatDays"); const secretReminderRepeatDays = watch("reminderRepeatDays");
const secretReminderNote = watch("reminderNote"); const secretReminderNote = watch("reminderNote");
const hasReferences = secret?.value?.match(INTERPOLATION_SYNTAX_REG);
return ( return (
<> <>
<CreateReminderForm <CreateReminderForm
@@ -460,16 +464,21 @@ export const SecretDetailSidebar = ({
> >
{(isAllowed) => ( {(isAllowed) => (
<Modal> <Modal>
<ModalTrigger asChild> <Tooltip
<Button className="text-center"
variant="outline_bg" content={hasReferences ? "" : "Secret does not contain references"}
className="w-full px-2 py-1" >
leftIcon={<FontAwesomeIcon icon={faProjectDiagram} />} <ModalTrigger asChild>
isDisabled={!isAllowed} <Button
> variant="outline_bg"
Reference Tree className="w-full px-2 py-1"
</Button> leftIcon={<FontAwesomeIcon icon={faProjectDiagram} />}
</ModalTrigger> isDisabled={!isAllowed || !hasReferences}
>
Reference Tree
</Button>
</ModalTrigger>
</Tooltip>
<ModalContent <ModalContent
title="Secret Reference Tree" title="Secret Reference Tree"
subTitle="Visual breakdown of secrets referenced by this secret." subTitle="Visual breakdown of secrets referenced by this secret."

View File

@@ -29,10 +29,10 @@ export const SecretReferenceNode = ({
/> />
</FormControl> </FormControl>
) : ( ) : (
<div className="py-2 text-sm"> <div className="bg-bunker-700 py-2 text-sm">
<div> <div>
{node.key} {node.key}
<Tooltip content={node.value}> <Tooltip className="break-words" content={node.value}>
<span <span
className={twMerge( className={twMerge(
"ml-2 rounded border border-gray-400 px-1 text-xs text-gray-400", "ml-2 rounded border border-gray-400 px-1 text-xs text-gray-400",
@@ -79,11 +79,11 @@ export const SecretReferenceNode = ({
</div> </div>
</div> </div>
</div> </div>
<div className="w-full border-b border-gray-800 py-1" /> <div className="w-full border-b border-mineshaft-500 py-1" />
</div> </div>
)} )}
{node.children.length > 0 && ( {node.children.length > 0 && (
<div className="border-l border-gray-600 pl-6 transition-all hover:border-primary-600"> <div className="border-l border-gray-600 bg-bunker-700 pl-6 transition-all hover:border-gray-400">
{node.children.map((el, index) => ( {node.children.map((el, index) => (
<SecretReferenceNode node={el} key={`node-${node.key}-${index + 1}`} /> <SecretReferenceNode node={el} key={`node-${node.key}-${index + 1}`} />
))} ))}
@@ -124,7 +124,7 @@ export const SecretReferenceTree = ({ secretPath, environment, secret }: Props)
containerClassName="text-bunker-300 hover:border-primary-400/50 border border-mineshaft-600 bg-bunker-800 px-2 py-1.5" containerClassName="text-bunker-300 hover:border-primary-400/50 border border-mineshaft-600 bg-bunker-800 px-2 py-1.5"
/> />
</FormControl> </FormControl>
<div className="max-h-96 overflow-auto"> <div className="max-h-96 overflow-auto rounded">
{tree && <SecretReferenceNode node={tree} isRoot />} {tree && <SecretReferenceNode node={tree} isRoot />}
</div> </div>
</div> </div>