added mock for require_auth middleware
This commit is contained in:
@@ -68,3 +68,42 @@ async fn handle_unauthenticated() -> Result<Response, StatusCode> {
|
||||
// TODO: log unauthenticated access attempts
|
||||
Err(StatusCode::UNAUTHORIZED)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
pub mod mock {
|
||||
|
||||
use super::*;
|
||||
|
||||
pub const REQUEST_AUTH_USER_ID_HEADER: &str = "x-mock-authenticated-user-id";
|
||||
pub const REQUEST_AUTH_USER_INVALID_HEADER: &str = "x-mock-authenticated-invalid";
|
||||
|
||||
pub async fn mock_require_auth(
|
||||
req: Request<axum::body::Body>,
|
||||
next: Next,
|
||||
) -> Result<Response, StatusCode> {
|
||||
let mut req = req;
|
||||
let invalid_present = req
|
||||
.headers()
|
||||
.get(REQUEST_AUTH_USER_INVALID_HEADER)
|
||||
.is_some();
|
||||
let user_id_header = req.headers().get(REQUEST_AUTH_USER_ID_HEADER).cloned();
|
||||
|
||||
if invalid_present {
|
||||
return handle_unauthenticated().await;
|
||||
}
|
||||
|
||||
let user = req
|
||||
.extensions_mut()
|
||||
.get_or_insert_with(|| RequestInfo { user_id: None });
|
||||
user.user_id = Some(if let Some(user_id_header) = user_id_header {
|
||||
let user_id_str = user_id_header
|
||||
.to_str()
|
||||
.map_err(|_| StatusCode::UNAUTHORIZED)?;
|
||||
Uuid::parse_str(user_id_str).map_err(|_| StatusCode::UNAUTHORIZED)?
|
||||
} else {
|
||||
Uuid::new_v4()
|
||||
});
|
||||
|
||||
Ok(next.run(req).await)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user