test: speed up admin auth hashing in tests

This commit is contained in:
a.tolmachev
2026-04-01 00:00:25 +03:00
parent 94ca6b20d9
commit c26e1ac258
+22 -4
View File
@@ -2,6 +2,8 @@ use argon2::{
Argon2, Argon2,
password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString, rand_core::OsRng}, password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString, rand_core::OsRng},
}; };
#[cfg(test)]
use argon2::{Algorithm, Params, Version};
use axum::{ use axum::{
extract::{OriginalUri, Request, State}, extract::{OriginalUri, Request, State},
middleware::Next, middleware::Next,
@@ -54,7 +56,7 @@ pub struct SessionCookie {
pub fn hash_password(password: &str, pepper: &str) -> Result<String, ApiError> { pub fn hash_password(password: &str, pepper: &str) -> Result<String, ApiError> {
let salt = SaltString::generate(&mut OsRng); let salt = SaltString::generate(&mut OsRng);
let password = format!("{password}{pepper}"); let password = format!("{password}{pepper}");
Argon2::default() password_hasher()?
.hash_password(password.as_bytes(), &salt) .hash_password(password.as_bytes(), &salt)
.map(|hash| hash.to_string()) .map(|hash| hash.to_string())
.map_err(|error| ApiError::internal(format!("failed to hash password: {error}"))) .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; return false;
}; };
let password = format!("{password}{pepper}"); let password = format!("{password}{pepper}");
Argon2::default() match password_hasher() {
.verify_password(password.as_bytes(), &parsed) Ok(argon2) => argon2.verify_password(password.as_bytes(), &parsed).is_ok(),
.is_ok() Err(_) => false,
}
}
fn password_hasher() -> Result<Argon2<'static>, 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<SessionCookie, ApiError> { pub fn create_session_cookie(settings: &AuthSettings) -> Result<SessionCookie, ApiError> {