Browse Source

feat: non-interactive Argon2id PHC hash generation

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

21
src/main.rs

@ -33,6 +33,7 @@ use std::{
process::exit, process::exit,
str::FromStr, str::FromStr,
thread, thread,
io::{self, IsTerminal},
}; };
use tokio::{ use tokio::{
@ -148,9 +149,14 @@ fn parse_args() {
} }
} }
let stdin = io::stdin();
let interactive = stdin.is_terminal();
let password;
if interactive {
println!("Generate an Argon2id PHC string using the '{selected_preset}' preset:\n"); println!("Generate an Argon2id PHC string using the '{selected_preset}' preset:\n");
let password = rpassword::prompt_password("Password: ").unwrap(); password = rpassword::prompt_password("Password: ").unwrap();
if password.len() < 8 { if password.len() < 8 {
println!("\nPassword must contain at least 8 characters"); println!("\nPassword must contain at least 8 characters");
exit(1); exit(1);
@ -161,12 +167,20 @@ fn parse_args() {
println!("\nPasswords do not match"); println!("\nPasswords do not match");
exit(1); 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()); let argon2 = Argon2::new(Argon2id, V0x13, argon2_params.build().unwrap());
let salt = SaltString::encode_b64(&crate::crypto::get_random_bytes::<32>()).unwrap(); let salt = SaltString::encode_b64(&crate::crypto::get_random_bytes::<32>()).unwrap();
let argon2_timer = tokio::time::Instant::now(); let argon2_timer = tokio::time::Instant::now();
if let Ok(password_hash) = argon2.hash_password(password.as_bytes(), &salt) { if let Ok(password_hash) = argon2.hash_password(password.as_bytes(), &salt) {
if interactive {
println!( println!(
"\n\ "\n\
ADMIN_TOKEN='{password_hash}'\n\n\ ADMIN_TOKEN='{password_hash}'\n\n\
@ -174,7 +188,10 @@ fn parse_args() {
argon2_timer.elapsed() argon2_timer.elapsed()
); );
} else { } else {
error!("Unable to generate Argon2id PHC hash."); println!("{}", password_hash)
}
} else {
eprintln!("Unable to generate Argon2id PHC hash.");
exit(1); exit(1);
} }
} }

Loading…
Cancel
Save