When updating user file, write to temp file first
This commit is contained in:
parent
86341f063c
commit
c1920eb566
@ -195,8 +195,15 @@ ClientManager.prototype.updateUser = function(name, opts, callback) {
|
|||||||
return callback ? callback() : true;
|
return callback ? callback() : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const pathReal = Helper.getUserConfigPath(name);
|
||||||
|
const pathTemp = pathReal + ".tmp";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fs.writeFileSync(Helper.getUserConfigPath(name), newUser);
|
// 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);
|
||||||
|
|
||||||
return callback ? callback() : true;
|
return callback ? callback() : true;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.error(`Failed to update user ${colors.green(name)} (${e})`);
|
log.error(`Failed to update user ${colors.green(name)} (${e})`);
|
||||||
|
@ -30,8 +30,10 @@ program
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const file = Helper.getUserConfigPath(name);
|
const pathReal = Helper.getUserConfigPath(name);
|
||||||
const user = require(file);
|
const pathTemp = pathReal + ".tmp";
|
||||||
|
const user = JSON.parse(fs.readFileSync(pathReal, "utf-8"));
|
||||||
|
|
||||||
log.prompt(
|
log.prompt(
|
||||||
{
|
{
|
||||||
text: "Enter new password:",
|
text: "Enter new password:",
|
||||||
@ -44,7 +46,14 @@ program
|
|||||||
|
|
||||||
user.password = Helper.password.hash(password);
|
user.password = Helper.password.hash(password);
|
||||||
user.sessions = {};
|
user.sessions = {};
|
||||||
fs.writeFileSync(file, JSON.stringify(user, null, "\t"));
|
|
||||||
|
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)}.`);
|
log.info(`Successfully reset password for ${colors.bold(name)}.`);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user