Add secret recovery for setting deleted secrets for Azure integration

This commit is contained in:
Tuan Dang
2023-03-03 14:59:59 +07:00
parent ff2ee989d6
commit c73d64d784
+64 -20
View File
@@ -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) {