use actix_web::body::{BoxBody, MessageBody}; use actix_web::dev::{ServiceRequest, ServiceResponse}; use actix_web::middleware::Next; use actix_web::{Error, HttpMessage}; use crate::error::SessionError; use crate::state::Session; pub fn require_uid(session: &Session) -> Result { session.uid().ok_or(SessionError::Unauthorized) } pub async fn session_guard( request: ServiceRequest, next: Next, ) -> Result, Error> where B: MessageBody + 'static, { let session = request .extensions() .get::() .cloned() .ok_or(SessionError::Unauthorized)?; require_uid(&session)?; Ok(next.call(request).await?.map_into_boxed_body()) }