fix(scripts): suppress readline echo during password input in create-user

This commit is contained in:
2026-04-27 01:17:39 +02:00
parent ec61ae6721
commit d82dc0578c
+13 -7
View File
@@ -34,28 +34,34 @@ const question = (prompt) => {
const questionHidden = (prompt) => { const questionHidden = (prompt) => {
return new Promise((resolve) => { return new Promise((resolve) => {
process.stdout.write(prompt); process.stdout.write(prompt);
// Suppress readline's own software echo so only '*' appears
const originalWrite = rl._writeToOutput;
rl._writeToOutput = () => {};
process.stdin.setRawMode(true); process.stdin.setRawMode(true);
process.stdin.resume(); process.stdin.resume();
let password = ''; let password = '';
const dataListener = (char) => { const dataListener = (char) => {
char = char.toString(); char = char.toString();
switch (char) { switch (char) {
case '\n': case '\n':
case '\r': case '\r':
case '\u0004': case '':
process.stdin.setRawMode(false); process.stdin.setRawMode(false);
process.stdin.pause(); process.stdin.pause();
process.stdout.write('\n'); process.stdout.write('\n');
process.stdin.removeListener('data', dataListener); process.stdin.removeListener('data', dataListener);
rl._writeToOutput = originalWrite;
resolve(password); resolve(password);
break; break;
case '\u0003': case '':
process.exit(); process.exit();
break; break;
case '\u007F': case '':
case '\b': case '\b':
password = password.slice(0, -1); password = password.slice(0, -1);
process.stdout.write('\b \b'); process.stdout.write('\b \b');
@@ -65,7 +71,7 @@ const questionHidden = (prompt) => {
process.stdout.write('*'); process.stdout.write('*');
} }
}; };
process.stdin.on('data', dataListener); process.stdin.on('data', dataListener);
}); });
}; };