UserDeleter.coffee 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. User = require("../../models/User").User
  2. NewsletterManager = require "../Newsletter/NewsletterManager"
  3. ProjectDeleter = require("../Project/ProjectDeleter")
  4. logger = require("logger-sharelatex")
  5. SubscriptionHandler = require("../Subscription/SubscriptionHandler")
  6. SubscriptionUpdater = require("../Subscription/SubscriptionUpdater")
  7. UserMembershipsHandler = require("../UserMembership/UserMembershipsHandler")
  8. async = require("async")
  9. InstitutionsAPI = require("../Institutions/InstitutionsAPI")
  10. Errors = require("../Errors/Errors")
  11. {db, ObjectId} = require("../../infrastructure/mongojs")
  12. module.exports = UserDeleter =
  13. softDeleteUser: (user_id, callback = (err)->)->
  14. if !user_id?
  15. logger.err "user_id is null when trying to delete user"
  16. return callback(new Error("no user_id"))
  17. User.findById user_id, (err, user)->
  18. return callback(err) if err?
  19. return callback(new Errors.NotFoundError("user not found")) unless user?
  20. async.series([
  21. (cb) ->
  22. UserDeleter._cleanupUser user, cb
  23. (cb) ->
  24. ProjectDeleter.softDeleteUsersProjects user._id, cb
  25. (cb) ->
  26. user.deletedAt = new Date()
  27. db.deletedUsers.insert user, cb
  28. (cb) ->
  29. user.remove cb
  30. ], callback)
  31. deleteUser: (user_id, callback = ()->)->
  32. if !user_id?
  33. logger.err "user_id is null when trying to delete user"
  34. return callback("no user_id")
  35. User.findById user_id, (err, user)->
  36. if err?
  37. return callback(err)
  38. logger.log user:user, "deleting user"
  39. async.series [
  40. (cb)->
  41. UserDeleter._cleanupUser user, cb
  42. (cb)->
  43. ProjectDeleter.deleteUsersProjects user._id, cb
  44. (cb)->
  45. user.remove cb
  46. ], (err)->
  47. if err?
  48. logger.err err:err, user_id:user_id, "something went wrong deleteing the user"
  49. callback err
  50. _cleanupUser: (user, callback) ->
  51. return callback(new Error("no user supplied")) unless user?
  52. async.series([
  53. (cb)->
  54. NewsletterManager.unsubscribe user, cb
  55. (cb)->
  56. SubscriptionHandler.cancelSubscription user, cb
  57. (cb)->
  58. InstitutionsAPI.deleteAffiliations user._id, cb
  59. (cb)->
  60. SubscriptionUpdater.removeUserFromAllGroups user._id, cb
  61. (cb)->
  62. UserMembershipsHandler.removeUserFromAllEntities user._id, cb
  63. ], callback)