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