Skip to content
Clone
d6dc02f
27 lines 740 B Rust
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<i64, SessionError> {
session.uid().ok_or(SessionError::Unauthorized)
}
pub async fn session_guard<B>(
request: ServiceRequest,
next: Next<B>,
) -> Result<ServiceResponse<BoxBody>, Error>
where
B: MessageBody + 'static,
{
let session = request
.extensions()
.get::<Session>()
.cloned()
.ok_or(SessionError::Unauthorized)?;
require_uid(&session)?;
Ok(next.call(request).await?.map_into_boxed_body())
}