| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /* eslint-disable
- camelcase,
- handle-callback-err,
- max-len,
- no-unused-vars,
- standard/no-callback-literal,
- */
- // TODO: This file was created by bulk-decaffeinate.
- // Fix any style issues and re-enable lint.
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let UserDeleter
- const { User } = require('../../models/User')
- const NewsletterManager = require('../Newsletter/NewsletterManager')
- const ProjectDeleter = require('../Project/ProjectDeleter')
- const logger = require('logger-sharelatex')
- const SubscriptionHandler = require('../Subscription/SubscriptionHandler')
- const SubscriptionUpdater = require('../Subscription/SubscriptionUpdater')
- const SubscriptionLocator = require('../Subscription/SubscriptionLocator')
- const UserMembershipsHandler = require('../UserMembership/UserMembershipsHandler')
- const async = require('async')
- const InstitutionsAPI = require('../Institutions/InstitutionsAPI')
- const Errors = require('../Errors/Errors')
- const { db, ObjectId } = require('../../infrastructure/mongojs')
- module.exports = UserDeleter = {
- softDeleteUserForMigration(user_id, callback) {
- if (callback == null) {
- callback = function(err) {}
- }
- if (user_id == null) {
- logger.warn('user_id is null when trying to delete user')
- return callback(new Error('no user_id'))
- }
- return User.findById(user_id, function(err, user) {
- if (err != null) {
- return callback(err)
- }
- if (user == null) {
- return callback(new Errors.NotFoundError('user not found'))
- }
- return async.series(
- [
- cb => UserDeleter._ensureCanDeleteUser(user, cb),
- cb => UserDeleter._cleanupUser(user, cb),
- cb => ProjectDeleter.deleteUsersProjects(user._id, cb),
- function(cb) {
- user.deletedAt = new Date()
- return db.usersDeletedByMigration.insert(user, cb)
- },
- cb => user.remove(cb)
- ],
- callback
- )
- })
- },
- deleteUser(user_id, callback) {
- if (callback == null) {
- callback = function() {}
- }
- if (user_id == null) {
- logger.warn('user_id is null when trying to delete user')
- return callback(new Error('no user_id'))
- }
- return User.findById(user_id, function(err, user) {
- if (err != null) {
- return callback(err)
- }
- logger.log({ user }, 'deleting user')
- return async.series(
- [
- cb => UserDeleter._ensureCanDeleteUser(user, cb),
- cb => UserDeleter._cleanupUser(user, cb),
- cb => ProjectDeleter.deleteUsersProjects(user._id, cb),
- cb => user.remove(cb)
- ],
- function(err) {
- if (err != null) {
- logger.warn(
- { err, user_id },
- 'something went wrong deleteing the user'
- )
- }
- return callback(err)
- }
- )
- })
- },
- _cleanupUser(user, callback) {
- if (user == null) {
- return callback(new Error('no user supplied'))
- }
- return async.series(
- [
- cb =>
- NewsletterManager.unsubscribe(user, function(err) {
- logger.err('Failed to unsubscribe user from newsletter', {
- user_id: user._id,
- error: err
- })
- return cb()
- }),
- cb => SubscriptionHandler.cancelSubscription(user, cb),
- cb => InstitutionsAPI.deleteAffiliations(user._id, cb),
- cb => SubscriptionUpdater.removeUserFromAllGroups(user._id, cb),
- cb => UserMembershipsHandler.removeUserFromAllEntities(user._id, cb)
- ],
- callback
- )
- },
- _ensureCanDeleteUser(user, callback) {
- return SubscriptionLocator.getUsersSubscription(user, function(
- error,
- subscription
- ) {
- if (subscription != null) {
- if (!error) {
- error = new Errors.SubscriptionAdminDeletionError()
- }
- }
- return callback(error)
- })
- }
- }
|