use axum::{extract::State, middleware::Next, response::Response};
use hyper::Request;
use tower_cookies::Cookies;
use tracing::debug;
use crate::{
middleware::{check_passkey, tools, PasskeyCheckResult},
AppStat,
};
pub(crate) async fn webui_auth<B>(
State(stats): State<AppStat>,
mut request: Request<B>,
next: Next<B>,
) -> Response {
debug!("webui_auth");
let cookies: &Cookies = request.extensions().get().unwrap();
let check_result = check_passkey(cookies, &stats).await;
match &check_result {
PasskeyCheckResult::LogInSucceed((key, _login_info)) => {
debug!("extend_login_expire_time");
tools::extend_login_expire_time(&stats, &key).await;
}
_ => {}
};
request.extensions_mut().insert(check_result);
next.run(request).await
}