use crate::cache::SharedCache;
mod bearer_impl;
pub use bearer_impl::generate_secure_jwt_secret;
#[derive(Clone)]
pub struct BearerAuth {
secret: Vec<u8>,
valid_tokens: SharedCache,
blacklisted_tokens: SharedCache,
expected_audience: Option<String>,
expected_issuer: Option<String>,
}
impl Drop for BearerAuth {
fn drop(&mut self) {
for byte in self.secret.iter_mut() {
unsafe { std::ptr::write_volatile(byte, 0) };
}
std::sync::atomic::fence(std::sync::atomic::Ordering::SeqCst);
}
}
impl std::fmt::Debug for BearerAuth {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("BearerAuth")
.field("secret", &"[REDACTED]")
.field("secret_len", &self.secret.len())
.field("has_expected_audience", &self.expected_audience.is_some())
.field("has_expected_issuer", &self.expected_issuer.is_some())
.finish()
}
}
#[derive(Debug, Clone, Default)]
pub struct BearerAuthBuilder {
secret: Option<String>,
audience: Option<String>,
issuer: Option<String>,
}
#[cfg(test)]
mod tests;