use geekorm::prelude::*;
use serde::{Deserialize, Serialize};
use crate::utils::config::SessionsRoleConfig;
#[derive(Table, Debug, Default, Clone, Serialize, Deserialize)]
pub struct Sessions {
#[geekorm(primary_key, auto_increment)]
pub id: PrimaryKeyInteger,
pub session_type: SessionType,
pub state: SessionState,
#[geekorm(unique, rand, rand_length = 42, rand_prefix = "konarr")]
pub token: String,
#[geekorm(new = "chrono::Utc::now()")]
pub created_at: chrono::DateTime<chrono::Utc>,
#[geekorm(new = "chrono::Utc::now()")]
pub last_accessed: chrono::DateTime<chrono::Utc>,
}
impl Sessions {
pub fn validate(&self, config: &SessionsRoleConfig) -> bool {
let now = chrono::Utc::now();
let delta = chrono::TimeDelta::hours(config.expires.into());
let deltaresult = self.last_accessed + delta;
self.state == SessionState::Active && deltaresult < now
}
}
#[derive(Data, Debug, Default, Clone, PartialEq, Eq)]
pub enum SessionState {
#[default]
Active,
Inactive,
}
#[derive(Data, Debug, Default, Clone, PartialEq, Eq)]
pub enum SessionType {
#[default]
User,
Application,
}