Files
chat-api/src/middlewares/auth/middleware.rs
T
LucasDLTG f4da65dbc2
CI / Rust CI (push) Successful in 1m37s
Publish & Deploy / Build and Push to Registry (push) Successful in 24s
Publish & Deploy / Deploy via SSH (push) Successful in 17s
refactor: middlewares folder
2026-04-11 20:35:36 +02:00

52 lines
1.5 KiB
Rust

use axum::{extract::Request, http::StatusCode, middleware::Next, response::Response};
use crate::middlewares::auth::{
jwt::validate_token,
keycloak::{get_jwks, refresh_jwks},
};
pub async fn auth_middleware(mut request: Request, next: Next) -> Result<Response, StatusCode> {
#[cfg(debug_assertions)]
println!("Middleware hit");
let headers = request.headers();
#[cfg(debug_assertions)]
println!("Headers extracted");
let auth_header = headers.get("authorization").and_then(|v| v.to_str().ok());
#[cfg(debug_assertions)]
println!("Auth header: {:?}", auth_header);
let auth_header = auth_header.ok_or(StatusCode::UNAUTHORIZED)?;
let token = auth_header
.strip_prefix("Bearer ")
.ok_or(StatusCode::UNAUTHORIZED)?;
let jwks = get_jwks().await.map_err(|_| StatusCode::UNAUTHORIZED)?;
match validate_token(token, &jwks) {
Ok(claims) => {
#[cfg(debug_assertions)]
println!("Token valid");
request.extensions_mut().insert(claims);
Ok(next.run(request).await)
}
Err(_) => {
let jwks = refresh_jwks().await.map_err(|_| StatusCode::UNAUTHORIZED)?;
match validate_token(token, &jwks) {
Ok(claims) => {
request.extensions_mut().insert(claims);
Ok(next.run(request).await)
}
Err(_) => Err(StatusCode::UNAUTHORIZED),
}
}
}
}