diff --git a/src/onDeleteAccount.js b/src/onDeleteAccount.js index 07911479739038c52fa4166b5644ae8df99b679d..aba5bbc230372435293e28af0b297e9895e4f34c 100644 --- a/src/onDeleteAccount.js +++ b/src/onDeleteAccount.js @@ -1,4 +1,4 @@ -const { cozyClient, log, errors } = require('cozy-konnector-libs') +const { cozyClient, log } = require('cozy-konnector-libs') const getAccountId = require('./helpers/getAccountId') const getAccountRev = require('./helpers/getAccountRev') const getAccountSecret = require('./helpers/getAccountSecret') @@ -135,47 +135,51 @@ async function onDeleteAccount(accountId) { let backoff = INITIAL_BACKOFF let accountDeleted = false log('info', 'Deleting account ...') - log('info', 'Getting secrets ...') while (retries < MAX_RETRIES && !accountDeleted) { try { const accountRev = getAccountRev() - if (accountRev) { - let oauthAccount = await getAccessToken(accountId, accountRev) - let fetchedNewAccessToken = oauthAccount.oauth.access_token - if (moment().diff(oauthAccount.oauth.expires_at) > 0) { - log('info', 'expired token, need a new one') - // token is expired, need a new one. - // we request a new one from a client_credentials query - // with credentials secrets from account-type - const accountSecret = getAccountSecret() - if (accountSecret) { - fetchedNewAccessToken = await fetchNewAccessToken(accountSecret) - } else { - throw new Error( - 'Access Token is expired and konnector failed to get a new one' - ) - } - } - let accessRights = await fetchDroitAccessGrdf( - fetchedNewAccessToken, - oauthAccount.oauth_callback_results.pce - ) - // remove unwanted commas - accessRights = accessRights.toString().replace(/,\s*$/, '') - if (accessRights) { - accountDeleted = await deleteUserConsent( - fetchedNewAccessToken, - accessRights - ) - } else { - log('debug', 'No active consent') - throw new Error('No active access right was found for given user') - } - } else { + if (!accountRev) { throw new Error( 'No account revision was found, something went wrong during the deletion of said account' ) } + + const oauthAccount = await getAccessToken(accountId, accountRev) + let fetchedNewAccessToken = oauthAccount.oauth.access_token + + if (moment().diff(oauthAccount.oauth.expires_at) <= 0) { + log('info', 'Token still valid, no need to fetch a new one') + } else { + log('info', 'expired token, need a new one') + // token is expired, need a new one. + // we request a new one from a client_credentials query + // with credentials secrets from account-type + const accountSecret = getAccountSecret() + if (!accountSecret) { + throw new Error( + 'Access Token is expired and konnector failed to get a new one' + ) + } + fetchedNewAccessToken = await fetchNewAccessToken(accountSecret) + } + + let accessRights = await fetchDroitAccessGrdf( + fetchedNewAccessToken, + oauthAccount.oauth_callback_results.pce + ) + + // remove unwanted commas + accessRights = accessRights.toString().replace(/,\s*$/, '') + + if (!accessRights) { + log('debug', 'No active consent') + throw new Error('No active access right was found for given user') + } + + accountDeleted = await deleteUserConsent( + fetchedNewAccessToken, + accessRights + ) } catch (error) { // If the API call fails, log the error and retry with an increased backoff interval log( @@ -209,7 +213,6 @@ onDeleteAccount(accountId).then( const errorMessage = `onDeleteAccount GRDF: An error occurred during script: ${err.message}` log('error', errorMessage) Sentry.captureException(errorMessage) - throw errors.VENDOR_DOWN } )