lamassu-server/bin/lamassu-revoke
Sérgio Salgado d58874cf02 fix: array length sum
fix: sql uppercasing
2021-07-05 12:22:33 +01:00

62 lines
2.5 KiB
JavaScript

#!/usr/bin/env node
const pgp = require('pg-promise')()
const _ = require('lodash/fp')
const db = require('../lib/db')
const argv = process.argv.slice(2)
if (argv.length !== 1) {
console.log('Usage: lamassu-revoke <user>')
console.log('Revokes admin panel access from a specific user.')
process.exit(1)
}
const name = argv[0]
const userTokenSql = `SELECT * FROM user_tokens WHERE name = $1`
return db.result(userTokenSql, [name])
.then(res => {
if (res.rowCount === 0) {
console.log(`User ${name} was not found!`)
process.exit(0)
}
return _.map(t => t.token, res.rows)
})
.then(tokens => {
const tokenClause = _.map(pgp.as.text, tokens).join(',')
return db.task('get-touched-customers', 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)
const cameraOverride = t.any(`UPDATE customers SET front_camera_override_by = null WHERE front_camera_override_by IN ($1^) RETURNING *`, tokenClause)
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)
return Promise.all([
smsOverride,
idDataOverride,
idPhotoOverride,
cameraOverride,
sanctionsOverride,
authorizedOverride,
usSsnOverride
])
})
})
.then(result => {
const count = _.sumBy(_.size, result)
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)
})
.then(res => console.log(`User ${name} (with ${res === 1 ? `token` : `tokens`} associated) successfully removed from the system!`))
.then(() => process.exit(0))