mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 09:28:06 +00:00
fix(folders): fixed algorithm missing in rollback versions and resolved env change reset folderid
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user