Delegate session lifetime to actix-identity
crate
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user