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}