tinypin/utils/change-password.js

48 lines
1.2 KiB
JavaScript

const crypto = require('crypto');
const readline = require("readline");
const writable = require('stream').Writable;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: true
});
rl.stdoutMuted = true;
rl.query = "password: ";
rl._writeToOutput = function _writeToOutput(stringToWrite) {
if ( stringToWrite == rl.query ){
rl.output.write(stringToWrite);
}
// if (rl.stdoutMuted)
// // rl.output.write("");
// // rl.output.write("\x1B[2K\x1B[200D"+rl.query+"["+((rl.line.length%2==1)?"=-":"-=")+"]");
// else
// rl.output.write(stringToWrite);
};
async function deriveKey(salt, pw){
return new Promise( (resolve, reject) => {
crypto.scrypt(pw, salt, 64, (err, key) => {
resolve(key.toString('hex'));
});
});
}
function createSalt(){
return crypto.randomBytes(16).toString('hex');
}
// let username = req.body.username;
// let salt = createSalt();
// let key = await deriveKey(salt, req.body.password);
rl.question(rl.query, async (password) => {
rl.close();
console.log(password);
let salt = createSalt();
let key = await deriveKey(salt, password);
console.log("salt: " + salt);
console.log("key: " + key);
});