Skip to main content

fistinc_auth/api/models/
identity.rs

1use actix_http::Payload;
2use actix_web::{Error, FromRequest, HttpRequest};
3use email_address::EmailAddress;
4use futures::future::{ok, Ready};
5use uuid::Uuid;
6use crate::domain::entity::Role;
7
8pub struct UserIdentity {
9    pub email: EmailAddress,
10    pub role: Role,
11    pub user_id: Uuid,
12}
13
14impl FromRequest for UserIdentity {
15    type Error = Error;
16    type Future = Ready<Result<UserIdentity, Error>>;
17    type Config = ();
18
19    #[inline]
20    fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future {
21        let data = req
22            .extensions()
23            .get::<UserIdentity>()
24            .map(|user_identity| UserIdentity {
25                email: user_identity.email.clone(),
26                role: user_identity.role.clone(),
27                user_id: user_identity.user_id,
28            })
29            .unwrap(); // todo: may be not use unwrap?
30        ok(data)
31    }
32}