blob: d1c88c31a393b9728aee8265cce799368074efe3 [file]
// Copyright (c) 2017 Chandan B N. All rights reserved.
// Command line utility to add users.
const pbkdf2 = require('../lib/pbkdf2.js');
const User = require('../models/user.js');
const readline = require('readline');
const mongo = require('../lib/mongo');
const config = require('../config/conf');
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 = {
name: args[4],
email: args[3],
username: (args[2] || '').toLowerCase(),
priv: Number(args[6]),
group: args[5],
emoji: '',
password: "dummy"
};
let error = User.validateUserDocument(newUser);
if (error) {
console.log("Error: " + error);
process.exit(1);
}
function hashPassword(password) {
return new Promise(function (resolve, reject) {
pbkdf2.hash(password, function (err, hash) {
if (err) {
reject(err);
} else {
resolve(hash);
}
});
});
}
hidden('Enter Password: ', (password1) => {
hidden('Enter Password again: ', async (password2) => {
if (password1 && password1 == password2) {
try {
await mongo.connect(config.database);
var hash = await hashPassword(password1);
newUser.password = hash;
var doc = await User.findOneAndUpdate({
username: newUser.username
},
newUser, {
upsert: true,
setDefaultsOnInsert: true
});
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);
}
} catch (err) {
console.error(err);
process.exitCode = 1;
} finally {
try {
await mongo.close();
} catch (e) {
}
rl.close();
}
} else {
console.error("Passwords do not match! Try again.");
process.exitCode = 1;
rl.close();
}
});
});