overleaf/services/web/scripts/remove_email.js
Mathias Jakobsen e0c23d83da [web] Add auditing of email removals (#8904)
* [web] Add auditing of email removals

* [web] Improve auditing of email removal from script

GitOrigin-RevId: ccb948f01616a0bcb2d8f718d6b9e69585e8bb89
2022-07-27 12:17:31 +00:00

65 lines
1.4 KiB
JavaScript

const { ObjectId, waitForDb } = require('../app/src/infrastructure/mongodb')
const UserUpdater = require('../app/src/Features/User/UserUpdater')
const UserGetter = require('../app/src/Features/User/UserGetter')
waitForDb()
.then(removeEmail)
.catch(error => {
console.error(error)
process.exit(1)
})
.then(() => {
console.log('Done.')
process.exit()
})
async function removeEmail() {
const userId = process.argv[2]
let email = process.argv[3]
if (!ObjectId.isValid(userId)) {
throw new Error(`user ID ${userId} is not valid`)
}
if (!email) {
throw new Error('no email provided')
}
// email arg can be within double quotes for arg so that we can handle
// malformed emails with spaces
email = email.replace(/"/g, '')
console.log(
`\nBegin request to remove email "${email}" from user "${userId}"\n`
)
const userWithEmail = await UserGetter.promises.getUserByAnyEmail(email, {
_id: 1,
})
if (!userWithEmail) {
throw new Error(`no user found with email "${email}"`)
}
if (userWithEmail._id.toString() !== userId) {
throw new Error(
`email does not belong to user. Belongs to ${userWithEmail._id}`
)
}
const auditLog = {
initiatorId: undefined,
ipAddress: '0.0.0.0',
extraInfo: {
script: true,
},
}
const skipParseEmail = true
await UserUpdater.promises.removeEmailAddress(
userId,
email,
auditLog,
skipParseEmail
)
}