use std::collections::HashMap;
use async_trait::async_trait;
use super::{BearerVerifier, VerifiedClaims, VerifyConfig, VerifyError};
#[derive(Default)]
pub struct MemoryBearerVerifier {
sessions: HashMap<String, VerifiedClaims>,
default_failure: Option<VerifyError>,
#[allow(dead_code)]
expectations: Option<VerifyConfig>,
}
impl MemoryBearerVerifier {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn with_expectations(mut self, expectations: VerifyConfig) -> Self {
self.expectations = Some(expectations);
self
}
pub fn insert(&mut self, token: impl Into<String>, claims: VerifiedClaims) -> &mut Self {
self.sessions.insert(token.into(), claims);
self
}
pub fn fail_with(&mut self, err: VerifyError) -> &mut Self {
self.default_failure = Some(err);
self
}
}
#[async_trait]
impl BearerVerifier for MemoryBearerVerifier {
async fn verify(&self, bearer_token: &str) -> Result<VerifiedClaims, VerifyError> {
if let Some(err) = self.default_failure.clone() {
return Err(err);
}
self.sessions
.get(bearer_token)
.cloned()
.ok_or(VerifyError::SignatureInvalid)
}
}