diff --git a/apps/api/src/middlewares/request_info.rs b/apps/api/src/middlewares/request_info.rs index fb44b20..aec8c53 100644 --- a/apps/api/src/middlewares/request_info.rs +++ b/apps/api/src/middlewares/request_info.rs @@ -1,6 +1,31 @@ +use axum::{extract::FromRequestParts, http::StatusCode}; use uuid::Uuid; #[derive(Clone, Debug)] pub struct RequestInfo { pub user_id: Option, } + +pub struct AuthenticatedRequestInfo { + pub user_id: Uuid, +} + +impl FromRequestParts<()> for AuthenticatedRequestInfo { + type Rejection = StatusCode; + + async fn from_request_parts( + parts: &mut axum::http::request::Parts, + _state: &(), + ) -> Result { + let request_info = parts + .extensions + .get::() + .ok_or(StatusCode::UNAUTHORIZED)?; + + if let Some(user_id) = request_info.user_id { + Ok(AuthenticatedRequestInfo { user_id }) + } else { + Err(StatusCode::UNAUTHORIZED) + } + } +}