CreateAndDestroyUsers.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* eslint-disable
  2. no-undef,
  3. no-unused-vars,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS102: Remove unnecessary code created because of implicit returns
  10. * DS207: Consider shorter variations of null checks
  11. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  12. */
  13. module.exports = function(grunt) {
  14. 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", function() {
  15. const done = this.async();
  16. const email = grunt.option("email");
  17. if ((email == null)) {
  18. console.error("Usage: grunt user:create-admin --email=joe@example.com");
  19. process.exit(1);
  20. }
  21. const settings = require("settings-sharelatex");
  22. const mongodb = require("../web/app/src/infrastructure/mongodb");
  23. const UserRegistrationHandler = require("../web/app/src/Features/User/UserRegistrationHandler");
  24. const OneTimeTokenHandler = require("../web/app/src/Features/Security/OneTimeTokenHandler");
  25. return mongodb.waitForDb().then(() => UserRegistrationHandler.registerNewUser({
  26. email,
  27. password: require("crypto").randomBytes(32).toString("hex")
  28. }, function(error, user) {
  29. if ((error != null) && ((error != null ? error.message : undefined) !== "EmailAlreadyRegistered")) {
  30. throw error;
  31. }
  32. user.isAdmin = true;
  33. return user.save(function(error) {
  34. if (error != null) { throw error; }
  35. const ONE_WEEK = 7 * 24 * 60 * 60; // seconds
  36. return OneTimeTokenHandler.getNewToken("password", { expiresIn: ONE_WEEK, email:user.email, user_id: user._id.toString() }, function(err, token){
  37. if (err != null) { return next(err); }
  38. console.log("");
  39. console.log(`\
  40. Successfully created ${email} as an admin user.
  41. Please visit the following URL to set a password for ${email} and log in:
  42. ${settings.siteUrl}/user/password/set?passwordResetToken=${token}
  43. \
  44. `
  45. );
  46. return done();
  47. });
  48. });
  49. }));
  50. });
  51. return grunt.registerTask('user:delete', "deletes a user and all their data, Usage: grunt user:delete --email joe@example.com", function() {
  52. const done = this.async();
  53. const email = grunt.option("email");
  54. if ((email == null)) {
  55. console.error("Usage: grunt user:delete --email=joe@example.com");
  56. process.exit(1);
  57. }
  58. const settings = require("settings-sharelatex");
  59. const mongodb = require("../web/app/src/infrastructure/mongodb");
  60. const UserGetter = require("../web/app/src/Features/User/UserGetter");
  61. const UserDeleter = require("../web/app/src/Features/User/UserDeleter");
  62. return mongodb.waitForDb().then(() => UserGetter.getUser({email}, function(error, user) {
  63. if (error != null) {
  64. throw error;
  65. }
  66. if ((user == null)) {
  67. console.log(`user ${email} not in database, potentially already deleted`);
  68. return done();
  69. }
  70. return UserDeleter.deleteUser(user._id, function(err){
  71. if (err != null) {
  72. throw err;
  73. }
  74. return done();
  75. });
  76. }));
  77. });
  78. };