1use serde::{Deserialize, Serialize};
6use spring::config::Configurable;
7use schemars::JsonSchema;
8pub use sa_token_core::config::SaTokenConfig as CoreConfig;
10
11spring::submit_config_schema!("sa-token", SaTokenConfig);
12
13#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
17#[serde(rename_all = "PascalCase")]
18pub enum TokenStyle {
19 Uuid,
21 SimpleUuid,
23 Random32,
25 Random64,
27 Random128,
29 Jwt,
31 Hash,
33 Timestamp,
35 Tik,
37}
38
39impl From<TokenStyle> for sa_token_core::config::TokenStyle {
40 fn from(style: TokenStyle) -> Self {
41 match style {
42 TokenStyle::Uuid => sa_token_core::config::TokenStyle::Uuid,
43 TokenStyle::SimpleUuid => sa_token_core::config::TokenStyle::SimpleUuid,
44 TokenStyle::Random32 => sa_token_core::config::TokenStyle::Random32,
45 TokenStyle::Random64 => sa_token_core::config::TokenStyle::Random64,
46 TokenStyle::Random128 => sa_token_core::config::TokenStyle::Random128,
47 TokenStyle::Jwt => sa_token_core::config::TokenStyle::Jwt,
48 TokenStyle::Hash => sa_token_core::config::TokenStyle::Hash,
49 TokenStyle::Timestamp => sa_token_core::config::TokenStyle::Timestamp,
50 TokenStyle::Tik => sa_token_core::config::TokenStyle::Tik,
51 }
52 }
53}
54
55#[derive(Debug, Configurable, Clone, Deserialize, JsonSchema)]
68#[config_prefix = "sa-token"]
69pub struct SaTokenConfig {
70 #[serde(default = "default_token_name")]
73 pub token_name: String,
74
75 #[serde(default = "default_timeout")]
78 pub timeout: i64,
79
80 #[serde(default = "default_active_timeout")]
83 pub active_timeout: i64,
84
85 #[serde(default)]
88 pub auto_renew: bool,
89
90 #[serde(default = "default_true")]
93 pub is_concurrent: bool,
94
95 #[serde(default = "default_true")]
98 pub is_share: bool,
99
100 #[serde(default = "default_token_style")]
103 pub token_style: TokenStyle,
104
105 #[serde(default)]
108 pub is_log: bool,
109
110 #[serde(default = "default_true")]
113 pub is_read_cookie: bool,
114
115 #[serde(default = "default_true")]
118 pub is_read_header: bool,
119
120 #[serde(default)]
123 pub is_read_body: bool,
124
125 #[serde(default)]
127 pub token_prefix: Option<String>,
128
129 #[serde(default)]
131 pub jwt_secret_key: Option<String>,
132
133 #[serde(default = "default_jwt_algorithm")]
136 pub jwt_algorithm: Option<String>,
137
138 #[serde(default)]
140 pub jwt_issuer: Option<String>,
141
142 #[serde(default)]
144 pub jwt_audience: Option<String>,
145
146 #[serde(default)]
149 pub enable_nonce: bool,
150
151 #[serde(default = "default_nonce_timeout")]
154 pub nonce_timeout: i64,
155
156 #[serde(default)]
159 pub enable_refresh_token: bool,
160
161 #[serde(default = "default_refresh_token_timeout")]
164 pub refresh_token_timeout: i64,
165}
166
167impl Default for SaTokenConfig {
168 fn default() -> Self {
169 Self {
170 token_name: default_token_name(),
171 timeout: default_timeout(),
172 active_timeout: default_active_timeout(),
173 auto_renew: false,
174 is_concurrent: true,
175 is_share: true,
176 token_style: TokenStyle::Uuid,
177 is_log: false,
178 is_read_cookie: true,
179 is_read_header: true,
180 is_read_body: false,
181 token_prefix: None,
182 jwt_secret_key: None,
183 jwt_algorithm: default_jwt_algorithm(),
184 jwt_issuer: None,
185 jwt_audience: None,
186 enable_nonce: false,
187 nonce_timeout: default_nonce_timeout(),
188 enable_refresh_token: false,
189 refresh_token_timeout: default_refresh_token_timeout(),
190 }
191 }
192}
193
194impl From<SaTokenConfig> for CoreConfig {
195 fn from(config: SaTokenConfig) -> Self {
196 CoreConfig {
197 token_name: config.token_name,
198 timeout: config.timeout,
199 active_timeout: config.active_timeout,
200 auto_renew: config.auto_renew,
201 is_concurrent: config.is_concurrent,
202 is_share: config.is_share,
203 token_style: config.token_style.into(),
204 is_log: config.is_log,
205 is_read_cookie: config.is_read_cookie,
206 is_read_header: config.is_read_header,
207 is_read_body: config.is_read_body,
208 token_prefix: config.token_prefix,
209 jwt_secret_key: config.jwt_secret_key,
210 jwt_algorithm: config.jwt_algorithm,
211 jwt_issuer: config.jwt_issuer,
212 jwt_audience: config.jwt_audience,
213 enable_nonce: config.enable_nonce,
214 nonce_timeout: config.nonce_timeout,
215 enable_refresh_token: config.enable_refresh_token,
216 refresh_token_timeout: config.refresh_token_timeout,
217 }
218 }
219}
220
221fn default_token_name() -> String {
223 "Authorization".to_string()
224}
225
226fn default_timeout() -> i64 {
227 2592000 }
229
230fn default_active_timeout() -> i64 {
231 -1
232}
233
234fn default_true() -> bool {
235 true
236}
237
238fn default_jwt_algorithm() -> Option<String> {
239 Some("HS256".to_string())
240}
241
242fn default_nonce_timeout() -> i64 {
243 -1
244}
245
246fn default_refresh_token_timeout() -> i64 {
247 604800 }
249
250fn default_token_style() -> TokenStyle {
251 TokenStyle::Uuid
252}