shared/application/session/
session_service.rs1use crate::error::Result;
2
3use crate::domain::model::Session;
4use crate::intern::session::SessionService;
5
6impl SessionService {
7 #[tracing::instrument(
8 name = "auth.issue_session", skip(self), fields(user.id = user_id)
9 )]
10 pub async fn issue_session(
11 &self,
12 user_id: &str,
13 full_permissions: Vec<String>,
14 ) -> Result<String> {
15 self.session_repository.revoke(user_id).await?;
16
17 let token = self.crypto.token.generate()?;
18 let hashed_token = self.crypto.token.hash(&token);
19
20 let session = Session::default()
21 .with_user_id(user_id)
22 .with_token(&hashed_token)
23 .with_role(&self.configuration.auth.rbac.default_role)
24 .with_permissions(full_permissions);
25 self.session_repository.insert(session).await?;
26
27 Ok(token)
28 }
29
30 #[tracing::instrument(name = "auth.find_session", skip(self, token))]
31 pub async fn find_session(&self, token: &str) -> Result<Session> {
32 let hash = self.crypto.token.hash(token);
33 self.session_repository.find(&hash).await
34 }
35
36 #[tracing::instrument(name = "auth.invalidate_session", skip(self, token))]
37 pub async fn invalidate_session(&self, token: &str) -> Result<()> {
38 self.session_repository.invalidate(token).await?;
39 Ok(())
40 }
41
42 #[tracing::instrument(name = "auth.extend_timeout", skip(self, session_id))]
43 pub async fn extend_timeout(&self, session_id: &str) -> Result<Session> {
44 self.session_repository.extend_timeout(session_id).await
45 }
46}