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