Browse Source

feat: non-interactive Argon2id PHC hash generation

pull/4894/head
buengese 8 months ago
parent
commit
4d31ba96ce
  1. 51
      src/main.rs

51
src/main.rs

@ -33,6 +33,7 @@ use std::{
process::exit,
str::FromStr,
thread,
io::{self, IsTerminal},
};
use tokio::{
@ -148,18 +149,30 @@ fn parse_args() {
}
}
println!("Generate an Argon2id PHC string using the '{selected_preset}' preset:\n");
let stdin = io::stdin();
let interactive = stdin.is_terminal();
let password = rpassword::prompt_password("Password: ").unwrap();
if password.len() < 8 {
println!("\nPassword must contain at least 8 characters");
exit(1);
}
let password;
if interactive {
println!("Generate an Argon2id PHC string using the '{selected_preset}' preset:\n");
let password_verify = rpassword::prompt_password("Confirm Password: ").unwrap();
if password != password_verify {
println!("\nPasswords do not match");
exit(1);
password = rpassword::prompt_password("Password: ").unwrap();
if password.len() < 8 {
println!("\nPassword must contain at least 8 characters");
exit(1);
}
let password_verify = rpassword::prompt_password("Confirm Password: ").unwrap();
if password != password_verify {
println!("\nPasswords do not match");
exit(1);
}
} else {
password = rpassword::read_password_from_bufread(&mut stdin.lock()).unwrap();
if password.len() < 8 {
eprintln!("Password must contain at least 8 characters");
exit(1);
}
}
let argon2 = Argon2::new(Argon2id, V0x13, argon2_params.build().unwrap());
@ -167,14 +180,18 @@ fn parse_args() {
let argon2_timer = tokio::time::Instant::now();
if let Ok(password_hash) = argon2.hash_password(password.as_bytes(), &salt) {
println!(
"\n\
ADMIN_TOKEN='{password_hash}'\n\n\
Generation of the Argon2id PHC string took: {:?}",
argon2_timer.elapsed()
);
if interactive {
println!(
"\n\
ADMIN_TOKEN='{password_hash}'\n\n\
Generation of the Argon2id PHC string took: {:?}",
argon2_timer.elapsed()
);
} else {
println!("{}", password_hash)
}
} else {
error!("Unable to generate Argon2id PHC hash.");
eprintln!("Unable to generate Argon2id PHC hash.");
exit(1);
}
}

Loading…
Cancel
Save