Make add
and reset
CLI commands scriptable
Add CLI options `--password` and `--save-logs` (for `add` only) in order to make adding users and changing user passwords scriptable. Closes #3913
This commit is contained in:
parent
6ca3bae73e
commit
e790a72e59
@ -11,7 +11,9 @@ program
|
|||||||
.command("add <name>")
|
.command("add <name>")
|
||||||
.description("Add a new user")
|
.description("Add a new user")
|
||||||
.on("--help", Utils.extraHelp)
|
.on("--help", Utils.extraHelp)
|
||||||
.action(function (name) {
|
.option("--password [password]", "new password, will be prompted if not specified")
|
||||||
|
.option("--save-logs", "if password is specified, this enables saving logs to disk")
|
||||||
|
.action(function (name, cmdObj) {
|
||||||
if (!fs.existsSync(Helper.getUsersPath())) {
|
if (!fs.existsSync(Helper.getUsersPath())) {
|
||||||
log.error(`${Helper.getUsersPath()} does not exist.`);
|
log.error(`${Helper.getUsersPath()} does not exist.`);
|
||||||
return;
|
return;
|
||||||
@ -31,6 +33,11 @@ program
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cmdObj.password) {
|
||||||
|
add(manager, name, cmdObj.password, !!cmdObj.saveLogs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
log.prompt(
|
log.prompt(
|
||||||
{
|
{
|
||||||
text: "Enter password:",
|
text: "Enter password:",
|
||||||
|
@ -11,7 +11,8 @@ program
|
|||||||
.command("reset <name>")
|
.command("reset <name>")
|
||||||
.description("Reset user password")
|
.description("Reset user password")
|
||||||
.on("--help", Utils.extraHelp)
|
.on("--help", Utils.extraHelp)
|
||||||
.action(function (name) {
|
.option("--password [password]", "new password, will be prompted if not specified")
|
||||||
|
.action(function (name, cmdObj) {
|
||||||
if (!fs.existsSync(Helper.getUsersPath())) {
|
if (!fs.existsSync(Helper.getUsersPath())) {
|
||||||
log.error(`${Helper.getUsersPath()} does not exist.`);
|
log.error(`${Helper.getUsersPath()} does not exist.`);
|
||||||
return;
|
return;
|
||||||
@ -30,9 +31,10 @@ program
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const pathReal = Helper.getUserConfigPath(name);
|
if (cmdObj.password) {
|
||||||
const pathTemp = pathReal + ".tmp";
|
change(name, cmdObj.password);
|
||||||
const user = JSON.parse(fs.readFileSync(pathReal, "utf-8"));
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
log.prompt(
|
log.prompt(
|
||||||
{
|
{
|
||||||
@ -44,17 +46,25 @@ program
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
user.password = Helper.password.hash(password);
|
change(name, password);
|
||||||
user.sessions = {};
|
|
||||||
|
|
||||||
const newUser = JSON.stringify(user, null, "\t");
|
|
||||||
|
|
||||||
// Write to a temp file first, in case the write fails
|
|
||||||
// we do not lose the original file (for example when disk is full)
|
|
||||||
fs.writeFileSync(pathTemp, newUser);
|
|
||||||
fs.renameSync(pathTemp, pathReal);
|
|
||||||
|
|
||||||
log.info(`Successfully reset password for ${colors.bold(name)}.`);
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function change(name, password) {
|
||||||
|
const pathReal = Helper.getUserConfigPath(name);
|
||||||
|
const pathTemp = pathReal + ".tmp";
|
||||||
|
const user = JSON.parse(fs.readFileSync(pathReal, "utf-8"));
|
||||||
|
|
||||||
|
user.password = Helper.password.hash(password);
|
||||||
|
user.sessions = {};
|
||||||
|
|
||||||
|
const newUser = JSON.stringify(user, null, "\t");
|
||||||
|
|
||||||
|
// Write to a temp file first, in case the write fails
|
||||||
|
// we do not lose the original file (for example when disk is full)
|
||||||
|
fs.writeFileSync(pathTemp, newUser);
|
||||||
|
fs.renameSync(pathTemp, pathReal);
|
||||||
|
|
||||||
|
log.info(`Successfully reset password for ${colors.bold(name)}.`);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user