use crate::authn::service::AuthnService;
use crate::authn::store::{FactorStore, IdentityStore};
impl<I, F> AuthnService<I, F>
where
I: IdentityStore,
F: FactorStore<Error = I::Error>,
{
pub fn spawn_jwks_refresh(&self, interval: std::time::Duration) -> tokio::task::JoinHandle<()> {
let providers: Vec<_> = self.oauth_providers.values().cloned().collect();
tokio::spawn(async move {
let mut ticker = tokio::time::interval(interval);
ticker.tick().await; loop {
ticker.tick().await;
for provider in &providers {
if let Err(e) = provider.refresh_jwks().await {
tracing::warn!(error = %e, "periodic JWKS refresh failed for a provider");
}
}
}
})
}
}