mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-02 20:25:47 +00:00
Add secret recovery for setting deleted secrets for Azure integration
This commit is contained in:
@@ -272,31 +272,75 @@ const syncSecretsAzureKeyVault = async ({
|
|||||||
deleteSecrets.push(res[key]);
|
deleteSecrets.push(res[key]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const setSecretAzureKeyVault = async ({
|
||||||
|
key,
|
||||||
|
value,
|
||||||
|
integration,
|
||||||
|
accessToken
|
||||||
|
}: {
|
||||||
|
key: string;
|
||||||
|
value: string;
|
||||||
|
integration: IIntegration;
|
||||||
|
accessToken: string;
|
||||||
|
}) => {
|
||||||
|
let isSecretSet = false;
|
||||||
|
let maxTries = 6;
|
||||||
|
|
||||||
|
while (!isSecretSet && maxTries > 0) {
|
||||||
|
// try to set secret
|
||||||
|
try {
|
||||||
|
await request.put(
|
||||||
|
`${integration.app}/secrets/${key}?api-version=7.3`,
|
||||||
|
{
|
||||||
|
value
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
isSecretSet = true;
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
const error: any = err;
|
||||||
|
if (error?.response?.data?.error?.innererror?.code === 'ObjectIsDeletedButRecoverable') {
|
||||||
|
await request.post(
|
||||||
|
`${integration.app}/deletedsecrets/${key}/recover?api-version=7.3`, {},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${accessToken}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 10000));
|
||||||
|
} else {
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 10000));
|
||||||
|
maxTries--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Sync/push set secrets
|
// Sync/push set secrets
|
||||||
if (setSecrets.length > 0) {
|
for await (const setSecret of setSecrets) {
|
||||||
setSecrets.forEach(async ({ key, value }) => {
|
const { key, value } = setSecret;
|
||||||
await request.put(
|
setSecretAzureKeyVault({
|
||||||
`${integration.app}/secrets/${key}?api-version=7.3`,
|
key,
|
||||||
{
|
value,
|
||||||
value
|
integration,
|
||||||
},
|
accessToken
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${accessToken}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deleteSecrets.length > 0) {
|
for await (const deleteSecret of deleteSecrets) {
|
||||||
deleteSecrets.forEach(async (secret) => {
|
const { key } = deleteSecret;
|
||||||
await request.delete(`${integration.app}/secrets/${secret.key}?api-version=7.3`, {
|
await request.delete(`${integration.app}/secrets/${key}?api-version=7.3`, {
|
||||||
headers: {
|
headers: {
|
||||||
'Authorization': `Bearer ${accessToken}`
|
'Authorization': `Bearer ${accessToken}`
|
||||||
}
|
}
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user