1use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7use summer::config::Configurable;
8pub use sa_token_core::config::SaTokenConfig as CoreConfig;
10
11summer::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 storage_prefix: Option<String>,
132
133 #[serde(default)]
141 pub rewrite_storage_prefix: bool,
142
143 #[serde(default)]
145 pub jwt_secret_key: Option<String>,
146
147 #[serde(default = "default_jwt_algorithm")]
150 pub jwt_algorithm: Option<String>,
151
152 #[serde(default)]
154 pub jwt_issuer: Option<String>,
155
156 #[serde(default)]
158 pub jwt_audience: Option<String>,
159
160 #[serde(default)]
163 pub enable_nonce: bool,
164
165 #[serde(default = "default_nonce_timeout")]
168 pub nonce_timeout: i64,
169
170 #[serde(default)]
173 pub enable_refresh_token: bool,
174
175 #[serde(default = "default_refresh_token_timeout")]
178 pub refresh_token_timeout: i64,
179}
180
181impl Default for SaTokenConfig {
182 fn default() -> Self {
183 Self {
184 token_name: default_token_name(),
185 timeout: default_timeout(),
186 active_timeout: default_active_timeout(),
187 auto_renew: false,
188 is_concurrent: true,
189 is_share: true,
190 token_style: TokenStyle::Uuid,
191 is_log: false,
192 is_read_cookie: true,
193 is_read_header: true,
194 is_read_body: false,
195 token_prefix: None,
196 storage_prefix: None,
197 rewrite_storage_prefix: false,
198 jwt_secret_key: None,
199 jwt_algorithm: default_jwt_algorithm(),
200 jwt_issuer: None,
201 jwt_audience: None,
202 enable_nonce: false,
203 nonce_timeout: default_nonce_timeout(),
204 enable_refresh_token: false,
205 refresh_token_timeout: default_refresh_token_timeout(),
206 }
207 }
208}
209
210impl From<SaTokenConfig> for CoreConfig {
211 fn from(config: SaTokenConfig) -> Self {
212 CoreConfig {
213 token_name: config.token_name,
214 timeout: config.timeout,
215 active_timeout: config.active_timeout,
216 auto_renew: config.auto_renew,
217 is_concurrent: config.is_concurrent,
218 is_share: config.is_share,
219 token_style: config.token_style.into(),
220 is_log: config.is_log,
221 is_read_cookie: config.is_read_cookie,
222 is_read_header: config.is_read_header,
223 is_read_body: config.is_read_body,
224 token_prefix: config.token_prefix,
225 jwt_secret_key: config.jwt_secret_key,
226 jwt_algorithm: config.jwt_algorithm,
227 jwt_issuer: config.jwt_issuer,
228 jwt_audience: config.jwt_audience,
229 enable_nonce: config.enable_nonce,
230 nonce_timeout: config.nonce_timeout,
231 enable_refresh_token: config.enable_refresh_token,
232 refresh_token_timeout: config.refresh_token_timeout,
233 }
234 }
235}
236
237fn default_token_name() -> String {
239 "Authorization".to_string()
240}
241
242fn default_timeout() -> i64 {
243 2592000 }
245
246fn default_active_timeout() -> i64 {
247 -1
248}
249
250fn default_true() -> bool {
251 true
252}
253
254fn default_jwt_algorithm() -> Option<String> {
255 Some("HS256".to_string())
256}
257
258fn default_nonce_timeout() -> i64 {
259 -1
260}
261
262fn default_refresh_token_timeout() -> i64 {
263 604800 }
265
266fn default_token_style() -> TokenStyle {
267 TokenStyle::Uuid
268}