scripts/useradd.js (89 lines of code) (raw):

// Copyright (c) 2017 Chandan B N. All rights reserved. // Command line utility to add users. const pbkdf2 = require('../lib/pbkdf2.js'); const passport = require('passport'); const User = require('../models/user.js'); const readline = require('readline'); const mongoose = require('mongoose'); const config = require('../config/conf'); mongoose.Promise = global.Promise; mongoose.set('strictQuery', false); function hidden(query, callback) { var stdin = process.openStdin(); var onDataHandler = function (char) { char = char + ""; switch (char) { case "\n": case "\r": case "\u0004": // Remove this handler stdin.removeListener("data", onDataHandler); break; //stdin.pause(); break; default: process.stdout.write("\033[2K\033[200D" + query + Array(rl.line.length + 1).join("*")); break; } }; process.stdin.on("data", onDataHandler); rl.question(query, function (value) { rl.history = rl.history.slice(1); callback(value); }); } const args = process.argv; if (args.length != 7) { console.error('Usage node useradd.js username email "Name" CNA_email priv(0=admin, 1=read-write, 2=read only)'); process.exit(1); } const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let newUser = new User({ name: args[4], email: args[3], username: args[2], priv: args[6], group: args[5], password : "dummy" }, { _id: false }); if(error = newUser.validateSync()) { console.log("Error: " + error); process.exit(1); } newUser = newUser._doc; delete newUser._id; hidden('Enter Password: ', (password1) => { hidden('Enter Password again: ', (password2) => { if (password1 && password1 == password2) { pbkdf2.hash(password1, function (err, hash) { if (err) { console.error(err); } newUser.password = hash; mongoose.connect(config.database, { keepAlive: false, }); User.findOneAndUpdate({ username: newUser.username }, newUser, { upsert: true, setDefaultsOnInsert: true }, function (err, doc) { if (err) { console.error(err); } else { if (doc) { console.log('Success', 'User ' + doc.username + ' is now updated.\n'); } else { console.log('Success', 'New user is now registered and can log in: ' + newUser.username); } } mongoose.connection.close(); }); }); } else { console.error("Passwords do not match! Try again."); } rl.close(); }); });