use std::sync::Arc;
use axum::Router;
use super::config::PasAuthConfig;
use super::routes;
use super::session::SessionResolver;
use super::state::AuthState;
use super::traits::{AccountResolver, SessionStore};
pub struct PasAuth<S: SessionStore> {
router: Router,
resolver: SessionResolver<S>,
}
impl<S: SessionStore> PasAuth<S> {
pub fn new<U: AccountResolver>(
config: PasAuthConfig,
account_resolver: Arc<U>,
session_store: Arc<S>,
) -> Self {
let cookie_name: Arc<str> = Arc::from(config.settings.session_cookie_name.as_str());
let state = AuthState {
client: Arc::new(config.client),
account_resolver,
session_store: Arc::clone(&session_store),
settings: config.settings,
};
let router = routes::build_router(state);
let resolver = SessionResolver::new(session_store, cookie_name);
Self { router, resolver }
}
#[must_use]
pub fn resolver(&self) -> SessionResolver<S> {
self.resolver.clone()
}
pub fn into_router(self) -> Router {
self.router
}
}