diff --git a/scripts/gdpr-delete-users.js b/scripts/gdpr-delete-users.js index 4b61eeec1f..ebbe763217 100644 --- a/scripts/gdpr-delete-users.js +++ b/scripts/gdpr-delete-users.js @@ -27,12 +27,13 @@ async function _deleteAmplitudeData (userId, email) { if (response) console.log(`${response.status} ${response.statusText}`); } -async function _deleteHabiticaData (user) { +async function _deleteHabiticaData (user, email) { await User.update( {_id: user._id}, {$set: { - 'auth.local.passwordHashMethod': 'bcrypt', + 'auth.local.email': email, 'auth.local.hashed_password': '$2a$10$QDnNh1j1yMPnTXDEOV38xOePEWFd4X8DSYwAM8XTmqmacG5X0DKjW', + 'auth.local.passwordHashMethod': 'bcrypt', }} ); const response = await axios.delete( @@ -61,8 +62,8 @@ async function _processEmailAddress (email) { const users = await User.find({ $or: [ {'auth.local.email': emailRegex}, - {'auth.facebook.emails.value': emailRegex}, - {'auth.google.emails.value': emailRegex}, + {'auth.facebook.emails': emailRegex}, + {'auth.google.emails': emailRegex}, ]}, { _id: 1, @@ -75,7 +76,7 @@ async function _processEmailAddress (email) { } else { for (const user of users) { await _deleteAmplitudeData(user._id, email); // eslint-disable-line no-await-in-loop - await _deleteHabiticaData(user); // eslint-disable-line no-await-in-loop + await _deleteHabiticaData(user, email); // eslint-disable-line no-await-in-loop } } } diff --git a/website/server/models/group.js b/website/server/models/group.js index 9a0d4c2d29..258c288476 100644 --- a/website/server/models/group.js +++ b/website/server/models/group.js @@ -1376,12 +1376,15 @@ schema.methods.unlinkTask = async function groupUnlinkTask (unlinkingTask, user, } else { // keep = 'remove-all' let task = await Tasks.Task.findOne(findQuery).select('_id type completed').exec(); // Remove task from user.tasksOrder and delete them - if (task.type !== 'todo' || !task.completed) { + if (task && (task.type !== 'todo' || !task.completed)) { removeFromArray(user.tasksOrder[`${task.type}s`], task._id); user.markModified('tasksOrder'); } - const promises = [task.remove(), unlinkingTask.save()]; + let promises = [unlinkingTask.save()]; + if (task) { + promises.push(task.remove()); + } // When multiple tasks are being unlinked at the same time, // save the user once outside of this function if (saveUser) promises.push(user.save());