From 7a516cedb93d4a73cff89fd3952f84f6c330b8e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Salgado?= Date: Tue, 29 Jun 2021 16:42:08 +0100 Subject: [PATCH] fix: change from task to a DB transaction --- bin/lamassu-revoke | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/bin/lamassu-revoke b/bin/lamassu-revoke index 947b810e..06256902 100644 --- a/bin/lamassu-revoke +++ b/bin/lamassu-revoke @@ -28,7 +28,7 @@ return db.result(userTokenSql, [name]) .then(tokens => { const tokenClause = _.map(pgp.as.text, tokens).join(',') - return db.task('get-touched-customers', t => { + return db.tx(t => { const smsOverride = t.any(`UPDATE customers SET sms_override_by = null WHERE sms_override_by IN ($1^) RETURNING *`, tokenClause) const idDataOverride = t.any(`UPDATE customers SET id_card_data_override_by = null WHERE id_card_data_override_by IN ($1^) RETURNING *`, tokenClause) const idPhotoOverride = t.any(`UPDATE customers SET id_card_photo_override_by = null WHERE id_card_photo_override_by IN ($1^) RETURNING *`, tokenClause) @@ -36,27 +36,28 @@ return db.result(userTokenSql, [name]) const sanctionsOverride = t.any(`UPDATE customers SET sanctions_override_by = null WHERE sanctions_override_by IN ($1^) RETURNING *`, tokenClause) const authorizedOverride = t.any(`UPDATE customers SET authorized_override_by = null WHERE authorized_override_by IN ($1^) RETURNING *`, tokenClause) const usSsnOverride = t.any(`UPDATE customers SET us_ssn_override_by = null WHERE us_ssn_override_by IN ($1^)`, tokenClause) + const tokenDeletion = t.result(`DELETE FROM user_tokens WHERE name = $1 RETURNING *`, [name], r => r.rowCount) - return Promise.all([ + return t.batch([ smsOverride, idDataOverride, idPhotoOverride, cameraOverride, sanctionsOverride, authorizedOverride, - usSsnOverride + usSsnOverride, + tokenDeletion ]) }) }) .then(result => { - const count = _.sumBy(_.size, result) + const occurrences = result.slice(0, result.length - 1) + const count = _.sumBy(_.size, occurrences) if (count > 0) { console.log(`Removed ${count} ${count === 1 ? `entry` : `entries`} on the customer table, related with the user ${name}!`) } - }) - .then(() => { - const sql = `DELETE FROM user_tokens WHERE name = $1 RETURNING *` - return db.result(sql, [name], r => r.rowCount) + return result[result.length - 1] }) .then(res => console.log(`User ${name} (with ${res === 1 ? `token` : `tokens`} associated) successfully removed from the system!`)) - .then(() => process.exit(0)) + .catch(console.error) + .finally(() => process.exit(0))