scufflecloud_core_cedar/models/
session.rs

1use base64::Engine;
2use core_db_types::models::{MagicLinkRequest, UserSession, UserSessionRequest, UserSessionToken};
3
4use crate::macros::cedar_entity;
5use crate::{EntityTypeName, entity_type_name};
6
7cedar_entity!(UserSessionRequest);
8
9cedar_entity!(MagicLinkRequest);
10
11impl crate::CedarIdentifiable for UserSession {
12    const ENTITY_TYPE: EntityTypeName = entity_type_name!("UserSession");
13
14    fn entity_id(&self) -> cedar_policy::EntityId {
15        let user_id = (*self.user_id).to_string();
16        let fingerprint = base64::prelude::BASE64_STANDARD.encode(&self.device_fingerprint);
17        cedar_policy::EntityId::new(format!("{user_id}:{fingerprint}"))
18    }
19}
20
21impl crate::CedarEntity for UserSession {}
22
23cedar_entity!(UserSessionToken);