diff --git a/apps/admin-api/src/auth.rs b/apps/admin-api/src/auth.rs index a680a2f..f80dd67 100644 --- a/apps/admin-api/src/auth.rs +++ b/apps/admin-api/src/auth.rs @@ -2,6 +2,8 @@ use argon2::{ Argon2, password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString, rand_core::OsRng}, }; +#[cfg(test)] +use argon2::{Algorithm, Params, Version}; use axum::{ extract::{OriginalUri, Request, State}, middleware::Next, @@ -54,7 +56,7 @@ pub struct SessionCookie { pub fn hash_password(password: &str, pepper: &str) -> Result { let salt = SaltString::generate(&mut OsRng); let password = format!("{password}{pepper}"); - Argon2::default() + password_hasher()? .hash_password(password.as_bytes(), &salt) .map(|hash| hash.to_string()) .map_err(|error| ApiError::internal(format!("failed to hash password: {error}"))) @@ -65,9 +67,25 @@ pub fn verify_password(password: &str, pepper: &str, password_hash: &str) -> boo return false; }; let password = format!("{password}{pepper}"); - Argon2::default() - .verify_password(password.as_bytes(), &parsed) - .is_ok() + match password_hasher() { + Ok(argon2) => argon2.verify_password(password.as_bytes(), &parsed).is_ok(), + Err(_) => false, + } +} + +fn password_hasher() -> Result, ApiError> { + #[cfg(test)] + { + let params = Params::new(8 * 1024, 1, 1, None).map_err(|error| { + ApiError::internal(format!("failed to initialize test argon2 params: {error}")) + })?; + Ok(Argon2::new(Algorithm::Argon2id, Version::V0x13, params)) + } + + #[cfg(not(test))] + { + Ok(Argon2::default()) + } } pub fn create_session_cookie(settings: &AuthSettings) -> Result {