torii_core/services/
session.rs1use crate::{Error, Session, SessionProvider, SessionToken, UserId};
2use chrono::Duration;
3use std::sync::Arc;
4
5pub struct SessionService<P: SessionProvider> {
7 provider: Arc<P>,
8}
9
10impl<P: SessionProvider> SessionService<P> {
11 pub fn new(provider: Arc<P>) -> Self {
13 Self { provider }
14 }
15
16 pub async fn create_session(
18 &self,
19 user_id: &UserId,
20 user_agent: Option<String>,
21 ip_address: Option<String>,
22 expires_in: Duration,
23 ) -> Result<Session, Error> {
24 self.provider
25 .create_session(user_id, user_agent, ip_address, expires_in)
26 .await
27 }
28
29 pub async fn get_session(&self, token: &SessionToken) -> Result<Option<Session>, Error> {
31 match self.provider.get_session(token).await {
32 Ok(session) => Ok(Some(session)),
33 Err(crate::Error::Session(crate::error::SessionError::NotFound)) => Ok(None),
34 Err(crate::Error::Session(crate::error::SessionError::Expired)) => Ok(None),
35 Err(e) => Err(e),
36 }
37 }
38
39 pub async fn delete_session(&self, token: &SessionToken) -> Result<(), Error> {
41 self.provider.delete_session(token).await
42 }
43
44 pub async fn delete_user_sessions(&self, user_id: &UserId) -> Result<(), Error> {
46 self.provider.delete_sessions_for_user(user_id).await
47 }
48
49 pub async fn cleanup_expired_sessions(&self) -> Result<(), Error> {
51 self.provider.cleanup_expired_sessions().await
52 }
53}