sa_token_core/token/
mod.rs1use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7
8pub mod generator;
9pub mod validator;
10pub mod jwt;
11
12pub use generator::TokenGenerator;
13pub use validator::TokenValidator;
14pub use jwt::{JwtManager, JwtClaims, JwtAlgorithm};
15
16#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
18pub struct TokenValue(String);
19
20impl TokenValue {
21 pub fn new(value: impl Into<String>) -> Self {
22 Self(value.into())
23 }
24
25 pub fn as_str(&self) -> &str {
26 &self.0
27 }
28}
29
30impl From<String> for TokenValue {
31 fn from(s: String) -> Self {
32 Self(s)
33 }
34}
35
36impl From<TokenValue> for String {
37 fn from(v: TokenValue) -> Self {
38 v.0
39 }
40}
41
42impl std::fmt::Display for TokenValue {
43 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
44 write!(f, "{}", self.0)
45 }
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
50pub struct TokenInfo {
51 pub token: TokenValue,
53
54 pub login_id: String,
56
57 pub login_type: String,
59
60 pub create_time: DateTime<Utc>,
62
63 pub last_active_time: DateTime<Utc>,
65
66 pub expire_time: Option<DateTime<Utc>>,
68
69 pub device: Option<String>,
71
72 pub extra_data: Option<serde_json::Value>,
74
75 pub nonce: Option<String>,
77
78 pub refresh_token: Option<String>,
80
81 pub refresh_token_expire_time: Option<DateTime<Utc>>,
83}
84
85impl TokenInfo {
86 pub fn new(token: TokenValue, login_id: impl Into<String>) -> Self {
87 let now = Utc::now();
88 Self {
89 token,
90 login_id: login_id.into(),
91 login_type: "default".to_string(),
92 create_time: now,
93 last_active_time: now,
94 expire_time: None,
95 device: None,
96 extra_data: None,
97 nonce: None,
98 refresh_token: None,
99 refresh_token_expire_time: None,
100 }
101 }
102
103 pub fn is_expired(&self) -> bool {
104 if let Some(expire_time) = self.expire_time {
105 Utc::now() > expire_time
106 } else {
107 false
108 }
109 }
110
111 pub fn update_active_time(&mut self) {
112 self.last_active_time = Utc::now();
113 }
114}
115
116#[derive(Debug, Clone)]
118pub struct TokenSign {
119 pub value: String,
120 pub device: Option<String>,
121}