use actix_web::HttpMessage;
use actix_web::{dev::Payload, FromRequest, HttpRequest};
use futures_util::future::{ready, Ready};
#[derive(Copy, Clone)]
pub struct AuthenticatedUser {
pub id: u64,
}
impl FromRequest for AuthenticatedUser {
type Error = actix_web::Error;
type Future = Ready<Result<Self, Self::Error>>;
fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future {
if let Some(user) = req.extensions().get::<AuthenticatedUser>() {
return ready(Ok(AuthenticatedUser { id: user.id }));
}
ready(Err(actix_web::error::ErrorUnauthorized(
"User not authenticated",
)))
}
}