use iroh_base::PublicKey;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
#[derive(Clone, Default)]
pub struct RelayAllowlist {
entries: Arc<Mutex<HashMap<PublicKey, Arc<str>>>>,
}
impl RelayAllowlist {
pub fn register(&self, key: PublicKey, token: Arc<str>) {
self.entries.lock().unwrap().insert(key, token);
}
pub fn is_allowed(&self, key: &PublicKey) -> bool {
self.entries.lock().unwrap().contains_key(key)
}
pub fn len(&self) -> usize {
self.entries.lock().unwrap().len()
}
pub fn is_empty(&self) -> bool {
self.entries.lock().unwrap().is_empty()
}
pub fn prune_for_expired_tokens(&self, expired_tokens: &[Arc<str>]) {
if expired_tokens.is_empty() {
return;
}
let mut entries = self.entries.lock().unwrap();
entries.retain(|_, token| !expired_tokens.contains(token));
}
}