sa_token_plugin_tide/
state.rs1use std::sync::Arc;
2use sa_token_adapter::storage::SaStorage;
3use sa_token_core::{SaTokenManager, SaTokenConfig, StpUtil, SaTokenListener};
4
5#[derive(Clone)]
10pub struct SaTokenState {
11 pub manager: Arc<SaTokenManager>,
12}
13
14impl SaTokenState {
15 pub fn new(storage: Arc<dyn SaStorage>, config: SaTokenConfig) -> Self {
18 Self {
19 manager: Arc::new(SaTokenManager::new(storage, config)),
20 }
21 }
22
23 pub fn from_manager(manager: SaTokenManager) -> Self {
26 StpUtil::init_manager(manager.clone());
28
29 Self {
30 manager: Arc::new(manager),
31 }
32 }
33
34 pub fn builder() -> SaTokenStateBuilder {
37 SaTokenStateBuilder::default()
38 }
39}
40
41#[derive(Default)]
44pub struct SaTokenStateBuilder {
45 config_builder: sa_token_core::config::SaTokenConfigBuilder,
46 listeners: Vec<Arc<dyn SaTokenListener>>,
47}
48
49impl SaTokenStateBuilder {
50 pub fn new() -> Self {
53 Self::default()
54 }
55
56 pub fn token_name(mut self, name: impl Into<String>) -> Self {
59 self.config_builder = self.config_builder.token_name(name);
60 self
61 }
62
63 pub fn timeout(mut self, timeout: i64) -> Self {
66 self.config_builder = self.config_builder.timeout(timeout);
67 self
68 }
69
70 pub fn active_timeout(mut self, timeout: i64) -> Self {
73 self.config_builder = self.config_builder.active_timeout(timeout);
74 self
75 }
76
77 pub fn auto_renew(mut self, enabled: bool) -> Self {
80 self.config_builder = self.config_builder.auto_renew(enabled);
81 self
82 }
83
84 pub fn is_concurrent(mut self, concurrent: bool) -> Self {
87 self.config_builder = self.config_builder.is_concurrent(concurrent);
88 self
89 }
90
91 pub fn is_share(mut self, share: bool) -> Self {
94 self.config_builder = self.config_builder.is_share(share);
95 self
96 }
97
98 pub fn token_style(mut self, style: sa_token_core::config::TokenStyle) -> Self {
101 self.config_builder = self.config_builder.token_style(style);
102 self
103 }
104
105 pub fn token_prefix(mut self, prefix: impl Into<String>) -> Self {
108 self.config_builder = self.config_builder.token_prefix(prefix);
109 self
110 }
111
112 pub fn jwt_secret_key(mut self, key: impl Into<String>) -> Self {
115 self.config_builder = self.config_builder.jwt_secret_key(key);
116 self
117 }
118
119 pub fn storage(mut self, storage: Arc<dyn SaStorage>) -> Self {
122 self.config_builder = self.config_builder.storage(storage);
123 self
124 }
125
126 pub fn listener(mut self, listener: Arc<dyn SaTokenListener>) -> Self {
129 self.listeners.push(listener);
130 self
131 }
132
133 pub fn listeners(mut self, listeners: Vec<Arc<dyn SaTokenListener>>) -> Self {
136 self.listeners.extend(listeners);
137 self
138 }
139
140 pub fn build(self) -> SaTokenState {
143 let manager = self.config_builder.build();
146
147 for listener in self.listeners {
149 manager.event_bus().register(listener);
150 }
151
152 SaTokenState {
155 manager: Arc::new(manager),
156 }
157 }
158}