35 lines
878 B
JavaScript
Executable file
35 lines
878 B
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
const bcrypt = require('bcrypt');
|
|
const saltRounds = 10;
|
|
|
|
const stdout = process.stdout
|
|
const stdin = process.stdin
|
|
const argv = process.argv;
|
|
|
|
const checkHash = argv.length > 2 ? argv[2] : undefined;
|
|
|
|
let password = '';
|
|
|
|
stdin.on('readable', () => {
|
|
let chunk;
|
|
while ((chunk = stdin.read()) !== null) {
|
|
password += chunk;
|
|
}
|
|
});
|
|
|
|
process.stdin.on('end', () => {
|
|
if (password[password.length - 1] === '\n') {
|
|
password = password.substring(0, password.length - 1);
|
|
}
|
|
|
|
if (checkHash !== undefined) {
|
|
const validPassword = bcrypt.compareSync(password, checkHash);
|
|
stdout.write(`${validPassword ? 'Valid password' : 'Invalid password'}\n`);
|
|
process.exit(validPassword ? 0 : 255);
|
|
} else {
|
|
const hash = bcrypt.hashSync(password, saltRounds);
|
|
stdout.write(`${hash}\n`);
|
|
}
|
|
});
|