48 lines
1.2 KiB
Rust
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;
|
|
}
|
|
}
|