use argon2::{ password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, Argon2, }; use rocket::State; use std::env; pub fn admin_password_exists() -> bool { match env::var("ADMIN_PASSWORD") { Ok(_) => return true, Err(_) => return false, } } pub fn set_admin_password(password: &str, salt: &State, argon2: &State) { let password_hash = argon2 .hash_password(password.as_bytes(), &salt.as_ref()) .unwrap() .to_string(); env::set_var("ADMIN_PASSWORD", &password_hash); info!("{}", password_hash); } pub fn check_password(password: &str, argon2: &State) -> bool { let entered_password = password.as_bytes(); // Get the user entered password let admin_password = match env::var("ADMIN_PASSWORD") { Ok(password) => password, Err(error) => { warn!("{:?}", error); return false; } }; // Get the provided admin password from the environment variable if argon2 .verify_password( entered_password, &PasswordHash::new(&admin_password).unwrap(), ) .is_ok() { return true; } else { return false; } }