@ -2,6 +2,8 @@
// Import needed libraries
// Import needed libraries
import bcrypt from 'bcryptjs' ;
import bcrypt from 'bcryptjs' ;
import { Writable } from 'stream'
import readline from 'readline'
// Function to generate hash
// Function to generate hash
const generateHash = async ( password ) => {
const generateHash = async ( password ) => {
@ -31,12 +33,38 @@ const comparePassword = async (password, hash) => {
}
}
} ;
} ;
const readStdinPassword = ( ) => {
return new Promise ( ( resolve ) => {
process . stdout . write ( "Enter your password: " ) ;
const rl = readline . createInterface ( {
input : process . stdin ,
output : new Writable ( {
write ( _ chunk , _ encoding , callback ) {
callback ( )
}
} ) ,
terminal : true ,
} ) ;
rl . question ( '' , answer => {
rl . close ( ) ;
// Print a new line after password prompt
process . stdout . write ( '\n' ) ;
resolve ( answer ) ;
} )
} )
}
( async ( ) => {
( async ( ) => {
try {
try {
// Retrieve command line arguments
// Retrieve command line arguments
const args = process . argv . slice ( 2 ) ; // Ignore the first two arguments
const args = process . argv . slice ( 2 ) ; // Ignore the first two arguments
if ( args . length > 2 ) {
if ( args . length > 2 ) {
throw new Error ( 'Usage : wgpw YOUR_PASSWORD [HASH]' ) ;
throw new Error ( 'Usage : wgpw [ YOUR_PASSWORD] [HASH]' ) ;
}
}
const [ password , hash ] = args ;
const [ password , hash ] = args ;
@ -44,6 +72,9 @@ const comparePassword = async (password, hash) => {
await comparePassword ( password , hash ) ;
await comparePassword ( password , hash ) ;
} else if ( password ) {
} else if ( password ) {
await generateHash ( password ) ;
await generateHash ( password ) ;
} else {
const password = await readStdinPassword ( ) ;
await generateHash ( password )
}
}
} catch ( error ) {
} catch ( error ) {
// eslint-disable-next-line no-console
// eslint-disable-next-line no-console