/* eslint-disable no-undef, no-unused-vars, */ // 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 */ module.exports = function(grunt) { 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() { const done = this.async(); const email = grunt.option("email"); if ((email == null)) { console.error("Usage: grunt user:create-admin --email=joe@example.com"); process.exit(1); } const settings = require("settings-sharelatex"); const mongodb = require("../web/app/src/infrastructure/mongodb"); const UserRegistrationHandler = require("../web/app/src/Features/User/UserRegistrationHandler"); const OneTimeTokenHandler = require("../web/app/src/Features/Security/OneTimeTokenHandler"); return mongodb.waitForDb().then(() => UserRegistrationHandler.registerNewUser({ email, password: require("crypto").randomBytes(32).toString("hex") }, function(error, user) { if ((error != null) && ((error != null ? error.message : undefined) !== "EmailAlreadyRegistered")) { throw error; } user.isAdmin = true; return user.save(function(error) { if (error != null) { throw error; } const ONE_WEEK = 7 * 24 * 60 * 60; // seconds return OneTimeTokenHandler.getNewToken("password", { expiresIn: ONE_WEEK, email:user.email, user_id: user._id.toString() }, function(err, token){ if (err != null) { return next(err); } console.log(""); console.log(`\ Successfully created ${email} as an admin user. Please visit the following URL to set a password for ${email} and log in: ${settings.siteUrl}/user/password/set?passwordResetToken=${token} \ ` ); return done(); }); }); })); }); return grunt.registerTask('user:delete', "deletes a user and all their data, Usage: grunt user:delete --email joe@example.com", function() { const done = this.async(); const email = grunt.option("email"); if ((email == null)) { console.error("Usage: grunt user:delete --email=joe@example.com"); process.exit(1); } const settings = require("settings-sharelatex"); const mongodb = require("../web/app/src/infrastructure/mongodb"); const UserGetter = require("../web/app/src/Features/User/UserGetter"); const UserDeleter = require("../web/app/src/Features/User/UserDeleter"); return mongodb.waitForDb().then(() => UserGetter.getUser({email}, function(error, user) { if (error != null) { throw error; } if ((user == null)) { console.log(`user ${email} not in database, potentially already deleted`); return done(); } return UserDeleter.deleteUser(user._id, function(err){ if (err != null) { throw err; } return done(); }); })); }); };