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);