test: speed up admin auth hashing in tests
This commit is contained in:
@@ -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<String, ApiError> {
|
||||
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<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> {
|
||||
|
||||
Reference in New Issue
Block a user