fix(folders): fixed algorithm missing in rollback versions and resolved env change reset folderid

This commit is contained in:
akhilmhdh
2023-06-04 13:18:05 +05:30
parent 467e85b717
commit 6ce0f48b2c
5 changed files with 35 additions and 18 deletions
@@ -116,7 +116,7 @@ export const updateFolderById = async (req: Request, res: Response) => {
await EESecretService.takeSecretSnapshot({ await EESecretService.takeSecretSnapshot({
workspaceId, workspaceId,
environment, environment,
folderId: parentFolder.name === "root" ? undefined : parentFolder.id, folderId: parentFolder.id,
}); });
} }
@@ -649,7 +649,7 @@ export const getSecrets = async (req: Request, res: Response) => {
const folders = await Folder.findOne({ workspace: workspaceId, environment }); const folders = await Folder.findOne({ workspace: workspaceId, environment });
if ( if (
(!folders && folderId !== "root" && folderId) || (!folders && folderId && folderId !== "root") ||
(!folders && secretPath) (!folders && secretPath)
) { ) {
throw BadRequestError({ message: "Folder not found" }); throw BadRequestError({ message: "Folder not found" });
@@ -300,6 +300,8 @@ export const rollbackWorkspaceSecretSnapshot = async (
secretValueTag, secretValueTag,
secretValueHash, secretValueHash,
createdAt, createdAt,
algorithm,
keyEncoding,
folder: secFolderId, folder: secFolderId,
} = oldSecretVersionsObj[secretId.toString()]; } = oldSecretVersionsObj[secretId.toString()];
@@ -323,6 +325,8 @@ export const rollbackWorkspaceSecretSnapshot = async (
secretCommentIV: "", secretCommentIV: "",
secretCommentTag: "", secretCommentTag: "",
createdAt, createdAt,
algorithm,
keyEncoding,
folder: secFolderId, folder: secFolderId,
}; };
}) })
@@ -347,6 +351,8 @@ export const rollbackWorkspaceSecretSnapshot = async (
secretValueIV, secretValueIV,
secretValueTag, secretValueTag,
secretValueHash, secretValueHash,
algorithm,
keyEncoding,
folder: secFolderId, folder: secFolderId,
}) => ({ }) => ({
_id: new Types.ObjectId(), _id: new Types.ObjectId(),
@@ -366,22 +372,27 @@ export const rollbackWorkspaceSecretSnapshot = async (
secretValueIV, secretValueIV,
secretValueTag, secretValueTag,
secretValueHash, secretValueHash,
algorithm,
keyEncoding,
folder: secFolderId, folder: secFolderId,
}) })
) )
); );
const newFolder = new Folder(folders); if (folders) {
newFolder._id = new Types.ObjectId(); const newFolder = new Folder(folders);
newFolder.isNew = true; newFolder._id = new Types.ObjectId();
await newFolder.save(); newFolder.isNew = true;
// create new folder version // when there is no
const newFolderVersion = new FolderVersion({ await newFolder.save();
workspace: workspaceId, // create new folder version
environment, const newFolderVersion = new FolderVersion({
nodes: newFolder.nodes, workspace: workspaceId,
}); environment,
await newFolderVersion.save(); nodes: newFolder.nodes,
});
await newFolderVersion.save();
}
// update secret versions of restored secrets as not deleted // update secret versions of restored secrets as not deleted
await SecretVersion.updateMany( await SecretVersion.updateMany(
+2
View File
@@ -99,11 +99,13 @@ const secretVersionSchema = new Schema<ISecretVersion>(
type: String, type: String,
enum: [ALGORITHM_AES_256_GCM], enum: [ALGORITHM_AES_256_GCM],
required: true, required: true,
default: ALGORITHM_AES_256_GCM,
}, },
keyEncoding: { keyEncoding: {
type: String, type: String,
enum: [ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64], enum: [ENCODING_SCHEME_UTF8, ENCODING_SCHEME_BASE64],
required: true, required: true,
default: ENCODING_SCHEME_UTF8,
}, },
folder: { folder: {
type: String, type: String,
@@ -392,9 +392,11 @@ export const DashboardPage = ({ envFromTop }: { envFromTop: string }) => {
} }
const env = wsEnv?.find((el) => el.slug === slug); const env = wsEnv?.find((el) => el.slug === slug);
if (env) setSelectedEnv(env); if (env) setSelectedEnv(env);
const query: Record<string, string> = { ...router.query, env: slug };
delete query.folderId;
router.push({ router.push({
pathname: router.pathname, pathname: router.pathname,
query: { ...router.query, env: slug } query
}); });
}; };
@@ -517,11 +519,13 @@ export const DashboardPage = ({ envFromTop }: { envFromTop: string }) => {
const folderList = isRollbackMode ? snapshotSecret?.folders : folderData?.folders; const folderList = isRollbackMode ? snapshotSecret?.folders : folderData?.folders;
// when using snapshot mode and snapshot is loading and snapshot list is empty // when using snapshot mode and snapshot is loading and snapshot list is empty
const isFoldersEmpty = !isFolderListLoading && !folderList?.length;
const isSnapshotSecretEmtpy = const isSnapshotSecretEmtpy =
isRollbackMode && !isSnapshotSecretsLoading && !snapshotSecret?.secrets?.length; isRollbackMode && !isSnapshotSecretsLoading && !snapshotSecret?.secrets?.length;
const isSecretEmpty = (!isRollbackMode && isDashboardSecretEmpty) || isSnapshotSecretEmtpy; const isSecretEmpty = (!isRollbackMode && isDashboardSecretEmpty) || isSnapshotSecretEmtpy;
const isEmptyPage = isFoldersEmpty && isSecretEmpty;
if (isSecretsLoading || isEnvListLoading || isFolderListLoading) { if (isSecretsLoading || isEnvListLoading) {
return ( return (
<div className="container mx-auto flex h-1/2 w-full items-center justify-center px-8 text-mineshaft-50 dark:[color-scheme:dark]"> <div className="container mx-auto flex h-1/2 w-full items-center justify-center px-8 text-mineshaft-50 dark:[color-scheme:dark]">
<img src="/images/loading/loading.gif" height={70} width={120} alt="loading animation" /> <img src="/images/loading/loading.gif" height={70} width={120} alt="loading animation" />
@@ -723,11 +727,11 @@ export const DashboardPage = ({ envFromTop }: { envFromTop: string }) => {
</div> </div>
<div <div
className={`${ className={`${
isSecretEmpty ? 'flex flex-col items-center justify-center' : '' isEmptyPage ? 'flex flex-col items-center justify-center' : ''
} no-scrollbar::-webkit-scrollbar mt-3 h-3/4 overflow-x-hidden overflow-y-scroll no-scrollbar`} } no-scrollbar::-webkit-scrollbar mt-3 h-3/4 overflow-x-hidden overflow-y-scroll no-scrollbar`}
ref={secretContainer} ref={secretContainer}
> >
{!isSecretEmpty && ( {!isEmptyPage && (
<TableContainer className="no-scrollbar::-webkit-scrollbar max-h-[calc(100%-120px)] no-scrollbar"> <TableContainer className="no-scrollbar::-webkit-scrollbar max-h-[calc(100%-120px)] no-scrollbar">
<table className="secret-table relative"> <table className="secret-table relative">
<SecretTableHeader sortDir={sortDir} onSort={onSortSecrets} /> <SecretTableHeader sortDir={sortDir} onSort={onSortSecrets} />
@@ -793,7 +797,7 @@ export const DashboardPage = ({ envFromTop }: { envFromTop: string }) => {
onEnvCompare={(key) => handlePopUpOpen('compareSecrets', key)} onEnvCompare={(key) => handlePopUpOpen('compareSecrets', key)}
/> />
<SecretDropzone <SecretDropzone
isSmaller={!isSecretEmpty} isSmaller={!isEmptyPage}
onParsedEnv={handleUploadedEnv} onParsedEnv={handleUploadedEnv}
onAddNewSecret={onAppendSecret} onAddNewSecret={onAppendSecret}
/> />