Skip to main content

rbp_auth/
claims.rs

1use super::*;
2use rbp_core::ID;
3
4#[derive(Debug, serde::Serialize, serde::Deserialize)]
5pub struct Claims {
6    pub sub: uuid::Uuid,
7    pub sid: uuid::Uuid,
8    pub usr: String,
9    pub iat: i64,
10    pub exp: i64,
11}
12
13impl Claims {
14    pub fn new(user: ID<Member>, session: ID<Session>, username: String) -> Self {
15        let now = std::time::SystemTime::now()
16            .duration_since(std::time::UNIX_EPOCH)
17            .expect("time")
18            .as_secs() as i64;
19        Self {
20            sub: user.inner(),
21            sid: session.inner(),
22            usr: username,
23            iat: now,
24            exp: now + Crypto::duration().as_secs() as i64,
25        }
26    }
27    pub fn expired(&self) -> bool {
28        self.exp
29            < std::time::SystemTime::now()
30                .duration_since(std::time::UNIX_EPOCH)
31                .expect("time")
32                .as_secs() as i64
33    }
34    pub fn user(&self) -> ID<Member> {
35        ID::from(self.sub)
36    }
37    pub fn session(&self) -> ID<Session> {
38        ID::from(self.sid)
39    }
40    pub fn username(&self) -> &str {
41        &self.usr
42    }
43}