server_middleware/middleware/
auth.rs1use std::sync::Arc;
2
3use axum::{extract::Request, http::header, middleware::Next, response::Response};
10use server_common::{error::auth::AuthError, jwt::JwtService};
11
12pub async fn auth_middleware(mut req: Request, next: Next) -> Result<Response, AuthError> {
13 let path = req.uri().path();
15 let method = req.method().clone();
17
18 let service = req
20 .extensions()
21 .get::<Arc<JwtService>>()
22 .ok_or(AuthError::MissingToken)?;
23
24 if path == "/" {
26 return Ok(next.run(req).await);
27 }
28
29 if service.is_ignore_uri(path, method.as_str()) {
31 return Ok(next.run(req).await);
32 }
33
34 let token = req
36 .headers()
37 .get(header::AUTHORIZATION)
38 .and_then(|value| value.to_str().ok())
39 .and_then(|value| value.strip_prefix("Bearer "))
40 .ok_or(AuthError::MissingToken)?;
41
42 let claims = service.verify_token(token)?;
44
45 req.extensions_mut().insert(Arc::new(claims));
47
48 Ok(next.run(req).await)
49}