mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-04 12:26:13 +00:00
feat: handled import overwrite in the API layer
This commit is contained in:
@@ -952,15 +952,48 @@ export const secretServiceFactory = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const decryptedSecrets = secrets.map((el) => decryptSecretRaw(el, botKey));
|
const decryptedSecrets = secrets.map((el) => decryptSecretRaw(el, botKey));
|
||||||
const decryptedImports = (imports || [])?.map(({ secrets: importedSecrets, ...el }) => ({
|
const processedImports = (imports || [])?.map(({ secrets: importedSecrets, ...el }) => {
|
||||||
...el,
|
const decryptedImportSecrets = importedSecrets.map((sec) =>
|
||||||
secrets: importedSecrets.map((sec) =>
|
|
||||||
decryptSecretRaw(
|
decryptSecretRaw(
|
||||||
{ ...sec, environment: el.environment, workspace: projectId, secretPath: el.secretPath },
|
{ ...sec, environment: el.environment, workspace: projectId, secretPath: el.secretPath },
|
||||||
botKey
|
botKey
|
||||||
)
|
)
|
||||||
)
|
);
|
||||||
}));
|
|
||||||
|
// secret-override to handle duplicate keys from different import levels
|
||||||
|
// this prioritizes secret values from direct imports
|
||||||
|
const importedKeys: Record<string, boolean> = {};
|
||||||
|
const importedEntries = decryptedImportSecrets.reduce(
|
||||||
|
(
|
||||||
|
accum: {
|
||||||
|
secretKey: string;
|
||||||
|
secretPath: string;
|
||||||
|
workspace: string;
|
||||||
|
environment: string;
|
||||||
|
secretValue: string;
|
||||||
|
secretComment: string;
|
||||||
|
version: number;
|
||||||
|
type: string;
|
||||||
|
_id: string;
|
||||||
|
id: string;
|
||||||
|
user: string | null | undefined;
|
||||||
|
}[],
|
||||||
|
sec
|
||||||
|
) => {
|
||||||
|
if (!importedKeys[sec.secretKey]) {
|
||||||
|
importedKeys[sec.secretKey] = true;
|
||||||
|
return [...accum, sec];
|
||||||
|
}
|
||||||
|
return accum;
|
||||||
|
},
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
...el,
|
||||||
|
secrets: importedEntries
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
if (expandSecretReferences) {
|
if (expandSecretReferences) {
|
||||||
const expandSecrets = interpolateSecrets({
|
const expandSecrets = interpolateSecrets({
|
||||||
@@ -1011,12 +1044,12 @@ export const secretServiceFactory = ({
|
|||||||
await batchSecretsExpand(decryptedSecrets);
|
await batchSecretsExpand(decryptedSecrets);
|
||||||
|
|
||||||
// expand imports by batch
|
// expand imports by batch
|
||||||
await Promise.all(decryptedImports.map((decryptedImport) => batchSecretsExpand(decryptedImport.secrets)));
|
await Promise.all(processedImports.map((processedImport) => batchSecretsExpand(processedImport.secrets)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
secrets: decryptedSecrets,
|
secrets: decryptedSecrets,
|
||||||
imports: decryptedImports
|
imports: processedImports
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user