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
|
// TODO: log unauthenticated access attempts
|
||||||
Err(StatusCode::UNAUTHORIZED)
|
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