use std::time::SystemTime;
use crate::error::TokenStoreError;
mod in_memory;
pub use in_memory::InMemoryTokenStore;
#[derive(Debug, Clone)]
pub struct TokenRecord {
pub(crate) access_token: String,
pub(crate) refresh_token: Option<String>,
pub(crate) client_id: String,
pub(crate) scope: Option<String>,
pub(crate) issued_at: SystemTime,
pub(crate) expires_at: SystemTime,
}
impl TokenRecord {
pub fn new(
access_token: String,
refresh_token: Option<String>,
client_id: String,
scope: Option<String>,
expires_at: SystemTime,
) -> Self {
Self {
access_token,
refresh_token,
client_id,
scope,
issued_at: SystemTime::now(),
expires_at,
}
}
pub fn access_token(&self) -> &str {
&self.access_token
}
pub fn refresh_token(&self) -> Option<&str> {
self.refresh_token.as_deref()
}
pub fn client_id(&self) -> &str {
&self.client_id
}
pub fn scope(&self) -> Option<&str> {
self.scope.as_deref()
}
pub fn expires_at(&self) -> SystemTime {
self.expires_at
}
}
pub trait TokenStore: Send + Sync {
fn save(&self, record: TokenRecord) -> Result<(), TokenStoreError>;
fn revoke(&self, access_token: &str) -> Result<(), TokenStoreError>;
fn find(&self, access_token: &str) -> Result<Option<TokenRecord>, TokenStoreError>;
}