Files
imphnen-backend-service/src/apps/v1/auth/auth_middleware.rs
T

51 lines
1.1 KiB
Rust
Raw Normal View History

2025-03-17 09:27:19 +07:00
use crate::{common_response, extract_email, AppState};
2025-03-15 01:53:20 +07:00
use axum::{
2025-03-17 09:27:19 +07:00
extract::Request, http::StatusCode, middleware::Next, response::Response,
2025-03-15 01:53:20 +07:00
Extension,
};
use std::convert::Infallible;
use super::{AuthQueryByEmailResponse, AuthRepository};
pub async fn auth_middleware(
Extension(state): Extension<AppState>,
mut req: Request,
next: Next,
) -> Result<Response, Infallible> {
2025-03-17 09:27:19 +07:00
let headers = req.headers();
let email = match extract_email(headers) {
Some(email) => email,
2025-03-15 01:53:20 +07:00
None => {
return Ok(common_response(
StatusCode::UNAUTHORIZED,
2025-03-17 09:27:19 +07:00
"Invalid or expired token",
2025-03-15 01:53:20 +07:00
));
}
};
let repository = AuthRepository::new(&state);
2025-03-17 09:27:19 +07:00
let user: Option<AuthQueryByEmailResponse> =
match repository.query_user_by_email(email).await {
Ok(user) => Some(user),
Err(err) => {
return Ok(common_response(
StatusCode::INTERNAL_SERVER_ERROR,
&format!("DB error: {}", err),
))
}
};
2025-03-15 01:53:20 +07:00
if user.is_none() {
return Ok(common_response(
StatusCode::UNAUTHORIZED,
"Unauthorized user",
));
}
req.extensions_mut().insert(user.unwrap());
Ok(next.run(req).await)
}