e1df092
use axum::extract::{Request, State};
use axum::middleware::Next;
use axum::response::{IntoResponse, Response};
use crate::error::SessionError;
use crate::extract::Session;
pub fn require_uid(session: &Session) -> Result<i64, SessionError> {
match session.uid() {
Some(uid) => Ok(uid),
None if session.is_expired() => Err(SessionError::Expired),
None => Err(SessionError::Unauthorized),
}
}
pub async fn session_guard<S>(
State(_service): State<S>,
session: Session,
request: Request,
next: Next,
) -> Response
where
S: Send + Sync + 'static,
{
match require_uid(&session) {
Ok(_) => next.run(request).await,
Err(error) => error.into_response(),
}
}