Delegate session lifetime to actix-identity crate

This commit is contained in:
2022-04-02 17:17:54 +02:00
parent cb4daa1112
commit 9e72e6a044
4 changed files with 15 additions and 43 deletions

View File

@ -1,9 +1,7 @@
use actix_identity::Identity;
use serde::{Deserialize, Serialize};
use crate::constants::{MAX_INACTIVITY_DURATION, MAX_SESSION_DURATION, MIN_ACTIVITY_RECORD_TIME};
use crate::data::user::{User, UserID};
use crate::utils::time::time;
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)]
pub enum SessionStatus {
@ -24,8 +22,6 @@ impl Default for SessionStatus {
struct SessionIdentityData {
pub id: UserID,
pub is_admin: bool,
login_time: u64,
last_access: u64,
pub status: SessionStatus,
}
@ -36,14 +32,12 @@ impl<'a> SessionIdentity<'a> {
self.set_session_data(&SessionIdentityData {
id: user.uid.clone(),
is_admin: user.admin,
login_time: time(),
last_access: time(),
status: SessionStatus::SignedIn,
});
}
fn get_session_data(&self) -> Option<SessionIdentityData> {
let mut res: Option<SessionIdentityData> = self.0.identity()
let res: Option<SessionIdentityData> = self.0.identity()
.as_deref()
.map(serde_json::from_str)
.map(|f| match f {
@ -62,26 +56,6 @@ impl<'a> SessionIdentity<'a> {
}
}
if let Some(session) = res.as_mut() {
if session.login_time + MAX_SESSION_DURATION < time() {
log::info!("Session for {} reached max duration timeout", session.id);
self.0.forget();
return None;
}
if session.last_access + MAX_INACTIVITY_DURATION < time() {
log::info!("Session is expired for {}", session.id);
self.0.forget();
return None;
}
if session.last_access + MIN_ACTIVITY_RECORD_TIME < time() {
log::debug!("Refresh last access for session");
session.last_access = time();
self.set_session_data(session);
}
}
res
}