pharmacy/src/authenticate.rs

48 lines
1.2 KiB
Rust

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<SaltString>, argon2: &State<Argon2>) {
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<Argon2>) -> 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;
}
}