use alibi_core::AuthResult;
use async_trait::async_trait;
use base64::{Engine as _, engine::general_purpose::URL_SAFE_NO_PAD};
use sha2::{Digest as _, Sha256};
#[async_trait]
pub trait OAuthTokenHasher: Send + Sync + std::fmt::Debug {
async fn hash(&self, token: &str, kind: &str) -> AuthResult<String>;
}
impl super::OAuthProviderPlugin {
pub async fn hash_token(&self, token: &str, kind: &str) -> AuthResult<String> {
if let Some(hasher) = &self.config.token_hasher {
hasher.hash(token, kind).await
} else {
Ok(URL_SAFE_NO_PAD.encode(Sha256::digest(token)))
}
}
}