requested changes

This commit is contained in:
Daniel Hougaard
2024-10-16 01:33:57 +04:00
parent 96f5dc7300
commit d61f36bca8
2 changed files with 31 additions and 15 deletions

View File

@@ -89,6 +89,13 @@ export const parseEnvKeyDataFn = async (decryptedJson: string): Promise<Infisica
});
}
// make sure that all the projectIds in the enviroments are present in the projects
for (const env of infisicalImportData.environments) {
if (!infisicalImportData.projects.find((project) => project.id === env.projectId)) {
infisicalImportData.projects.push({ name: "Unknown", id: env.projectId });
}
}
// secrets
for (const env of Object.keys(parsedJson.envs)) {
if (!env.includes("|")) {
@@ -126,6 +133,7 @@ export const importDataIntoInfisicalFn = async ({
const originalToNewProjectId = new Map<string, string>();
const originalToNewEnvironmentId = new Map<string, string>();
const projectsNotImported: string[] = [];
await projectDAL.transaction(async (tx) => {
for await (const project of data.projects) {
@@ -149,23 +157,13 @@ export const importDataIntoInfisicalFn = async ({
// Import environments
if (data.environments) {
for await (const environment of data.environments) {
let projectId = originalToNewProjectId.get(environment.projectId);
const projectId = originalToNewProjectId.get(environment.projectId);
const slug = slugify(`${environment.name}-${alphaNumericNanoId(4)}`);
// case: if for some reason the project ID is not found, we will create a new project and import the corresponding environment into it.
if (!projectId) {
const newProject = await projectService.createProject({
actor,
actorId,
actorOrgId,
actorAuthMethod,
workspaceName: `project-import-${environment.projectId}`,
createDefaultEnvs: false,
tx
});
originalToNewProjectId.set(environment.projectId, newProject.id);
projectId = newProject.id;
projectsNotImported.push(environment.projectId);
// eslint-disable-next-line no-continue
continue;
}
const existingEnv = await projectEnvDAL.findOne({ projectId, slug }, tx);
@@ -195,6 +193,11 @@ export const importDataIntoInfisicalFn = async ({
>();
for (const secret of data.secrets) {
if (!originalToNewEnvironmentId.get(secret.environmentId)) {
// eslint-disable-next-line no-continue
continue;
}
if (!mappedToEnvironmentId.has(secret.environmentId)) {
mappedToEnvironmentId.set(secret.environmentId, []);
}
@@ -269,4 +272,6 @@ export const importDataIntoInfisicalFn = async ({
}
}
});
return { projectsNotImported };
};

View File

@@ -97,7 +97,7 @@ export const externalMigrationQueueFactory = ({
const decryptedJson = JSON.parse(decrypted) as TImportInfisicalDataCreate;
await importDataIntoInfisicalFn({
const { projectsNotImported } = await importDataIntoInfisicalFn({
input: decryptedJson,
projectDAL,
projectEnvDAL,
@@ -112,6 +112,17 @@ export const externalMigrationQueueFactory = ({
secretV2BridgeService
});
if (projectsNotImported.length) {
logger.info(
{
actorEmail,
actorOrgId: decryptedJson.actorOrgId,
projectsNotImported
},
"One or more projects were not imported during import from external source"
);
}
await smtpService.sendMail({
recipients: [actorEmail],
subjectLine: "Infisical import successful",