use serde::{Deserialize, Serialize};
use time::{serde::rfc3339, OffsetDateTime};
#[derive(Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserSession {
pub user_id: crate::id::User,
pub token: String,
#[serde(rename = "created")]
#[serde(with = "rfc3339")]
pub creation_time: OffsetDateTime,
#[serde(rename = "expire")]
#[serde(with = "rfc3339")]
pub expiration: OffsetDateTime,
pub remember_me: bool,
#[serde(default)]
#[serde(rename = "sourceIP")]
pub source_ip: String,
#[serde(with = "rfc3339")]
pub timestamp: OffsetDateTime,
#[serde(default)]
pub e_tag: String,
pub secret_machine_id: Option<String>,
}
impl UserSession {
#[must_use]
pub fn auth_header(&self) -> String {
"neos ".to_owned() + self.user_id.as_ref() + ":" + &self.token
}
}
impl std::fmt::Debug for UserSession {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("NeosUserSession")
.field("user_id", &self.user_id)
.field("token", &"*****")
.field(
"secret_machine_id",
match &self.secret_machine_id {
Some(_) => &"Some(*****)",
None => &"None",
},
)
.field("creation_time", &self.creation_time)
.field("expiration", &self.expiration)
.field("remember_me", &self.remember_me)
.field("source_ip", &self.source_ip)
.field("timestamp", &self.timestamp)
.field("e_tag", &self.e_tag)
.finish()
}
}