CreateAndDestroyUsers.coffee 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. module.exports = (grunt) ->
  2. grunt.registerTask 'user:create-admin', "Create a user with the given email address and make them an admin. Update in place if the user already exists. Usage: grunt user:create-admin --email joe@example.com", () ->
  3. done = @async()
  4. email = grunt.option("email")
  5. if !email?
  6. console.error "Usage: grunt user:create-admin --email=joe@example.com"
  7. process.exit(1)
  8. settings = require "settings-sharelatex"
  9. mongodb = require "../web/app/src/infrastructure/mongodb"
  10. UserRegistrationHandler = require "../web/app/src/Features/User/UserRegistrationHandler"
  11. OneTimeTokenHandler = require "../web/app/src/Features/Security/OneTimeTokenHandler"
  12. mongodb.waitForDb().then () ->
  13. UserRegistrationHandler.registerNewUser {
  14. email: email
  15. password: require("crypto").randomBytes(32).toString("hex")
  16. }, (error, user) ->
  17. if error? and error?.message != "EmailAlreadyRegistered"
  18. throw error
  19. user.isAdmin = true
  20. user.save (error) ->
  21. throw error if error?
  22. ONE_WEEK = 7 * 24 * 60 * 60 # seconds
  23. OneTimeTokenHandler.getNewToken "password", { expiresIn: ONE_WEEK, email:user.email, user_id: user._id.toString() }, (err, token)->
  24. return next(err) if err?
  25. console.log ""
  26. console.log """
  27. Successfully created #{email} as an admin user.
  28. Please visit the following URL to set a password for #{email} and log in:
  29. #{settings.siteUrl}/user/password/set?passwordResetToken=#{token}
  30. """
  31. done()
  32. grunt.registerTask 'user:delete', "deletes a user and all their data, Usage: grunt user:delete --email joe@example.com", () ->
  33. done = @async()
  34. email = grunt.option("email")
  35. if !email?
  36. console.error "Usage: grunt user:delete --email=joe@example.com"
  37. process.exit(1)
  38. settings = require "settings-sharelatex"
  39. mongodb = require "../web/app/src/infrastructure/mongodb"
  40. UserGetter = require "../web/app/src/Features/User/UserGetter"
  41. UserDeleter = require "../web/app/src/Features/User/UserDeleter"
  42. mongodb.waitForDb().then () ->
  43. UserGetter.getUser email:email, (error, user) ->
  44. if error?
  45. throw error
  46. if !user?
  47. console.log("user #{email} not in database, potentially already deleted")
  48. return done()
  49. UserDeleter.deleteUser user._id, (err)->
  50. if err?
  51. throw err
  52. done()