diff options
Diffstat (limited to 'src/client/access_token.rs')
| -rw-r--r-- | src/client/access_token.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/client/access_token.rs b/src/client/access_token.rs new file mode 100644 index 0000000..07640d5 --- /dev/null +++ b/src/client/access_token.rs @@ -0,0 +1,34 @@ +use anyhow::{anyhow, Result}; +use chrono::Utc; +use indexmap::IndexMap; +use lazy_static::lazy_static; +use parking_lot::RwLock; + +lazy_static! { + static ref ACCESS_TOKENS: RwLock<IndexMap<String, (String, i64)>> = + RwLock::new(IndexMap::new()); +} + +pub fn get_access_token(client_name: &str) -> Result<String> { + ACCESS_TOKENS + .read() + .get(client_name) + .map(|(token, _)| token.clone()) + .ok_or_else(|| anyhow!("Invalid access token")) +} + +pub fn is_valid_access_token(client_name: &str) -> bool { + let access_tokens = ACCESS_TOKENS.read(); + let (token, expires_at) = match access_tokens.get(client_name) { + Some(v) => v, + None => return false, + }; + !token.is_empty() && Utc::now().timestamp() < *expires_at +} + +pub fn set_access_token(client_name: &str, token: String, expires_at: i64) { + let mut access_tokens = ACCESS_TOKENS.write(); + let entry = access_tokens.entry(client_name.to_string()).or_default(); + entry.0 = token; + entry.1 = expires_at; +} |
