diff --git a/backend/src/ee/controllers/v1/secretSnapshotController.ts b/backend/src/ee/controllers/v1/secretSnapshotController.ts index a6ee2ce4d..ace016afe 100644 --- a/backend/src/ee/controllers/v1/secretSnapshotController.ts +++ b/backend/src/ee/controllers/v1/secretSnapshotController.ts @@ -19,7 +19,13 @@ export const getSecretSnapshot = async (req: Request, res: Response) => { secretSnapshot = await SecretSnapshot.findById(secretSnapshotId) .lean() - .populate<{ secretVersions: ISecretVersion[] }>("secretVersions") + .populate<{ secretVersions: ISecretVersion[] }>({ + path: 'secretVersions', + populate: { + path: 'tags', + model: 'Tag' + } + }) .populate<{ folderVersion: TFolderRootVersionSchema }>("folderVersion"); if (!secretSnapshot) throw new Error("Failed to find secret snapshot"); diff --git a/backend/src/ee/models/secretVersion.ts b/backend/src/ee/models/secretVersion.ts index ea2a9fd2a..b915e640e 100644 --- a/backend/src/ee/models/secretVersion.ts +++ b/backend/src/ee/models/secretVersion.ts @@ -27,6 +27,7 @@ export interface ISecretVersion { keyEncoding: "utf8" | "base64"; createdAt: string; folder?: string; + tags?: string[]; } const secretVersionSchema = new Schema( @@ -112,6 +113,11 @@ const secretVersionSchema = new Schema( type: String, required: true, }, + tags: { + ref: 'Tag', + type: [Schema.Types.ObjectId], + default: [] + }, }, { timestamps: true, diff --git a/backend/src/utils/setup/backfillData.ts b/backend/src/utils/setup/backfillData.ts index ba56e266b..5886ff776 100644 --- a/backend/src/utils/setup/backfillData.ts +++ b/backend/src/utils/setup/backfillData.ts @@ -335,6 +335,33 @@ export const backfillSecretFolders = async () => { } ); + await SecretVersion.updateMany( + { + folder: { + $exists: false, + }, + }, + { + $set: { + folder: "root", + }, + } + ); + + // Back fill because tags were missing in secret versions + await SecretVersion.updateMany( + { + tags: { + $exists: false, + }, + }, + { + $set: { + tags: [], + }, + } + ); + let secretSnapshots = await SecretSnapshot.find({ environment: { $exists: false, @@ -352,12 +379,15 @@ export const backfillSecretFolders = async () => { groupSnapByEnv[secVer.environment].push(secVer); }); - const newSnapshots = Object.keys(groupSnapByEnv).map((snapEnv) => ({ - ...secSnapshot.toObject({ virtuals: false }), - _id: new Types.ObjectId(), - environment: snapEnv, - secretVersions: groupSnapByEnv[snapEnv], - })); + const newSnapshots = Object.keys(groupSnapByEnv).map((snapEnv) => { + const secretIdsOfEnvGroup = groupSnapByEnv[snapEnv] ? groupSnapByEnv[snapEnv].map(secretVersion => secretVersion._id) : [] + return { + ...secSnapshot.toObject({ virtuals: false }), + _id: new Types.ObjectId(), + environment: snapEnv, + secretVersions: secretIdsOfEnvGroup, + } + }); await SecretSnapshot.insertMany(newSnapshots); await secSnapshot.delete();