Files
rustification-server/src/middleware.rs
MDietermann 9617f4415c feat: initial commit
Axum/Postgres server with auth, migrations, and Docker setup.
2026-08-13 13:08:13 +02:00

34 lines
940 B
Rust

use axum::{
extract::{Request, State},
http::StatusCode,
middleware::Next,
response::Response,
};
use jsonwebtoken::{decode, DecodingKey, Validation};
use std::sync::Arc;
use crate::{model::Claims, AppState};
pub async fn require_auth(
State(state): State<Arc<AppState>>,
mut req: Request,
next: Next,
) -> Result<Response, (StatusCode, String)> {
let token = req
.headers()
.get("Authorization")
.and_then(|v| v.to_str().ok())
.and_then(|v| v.strip_prefix("Bearer "))
.ok_or((StatusCode::UNAUTHORIZED, "Missing or invalid Authorization header".into()))?;
let data = decode::<Claims>(
token,
&DecodingKey::from_secret(state.jwt_secret.as_bytes()),
&Validation::default(),
)
.map_err(|_| (StatusCode::UNAUTHORIZED, "Invalid or expired token".into()))?;
req.extensions_mut().insert(data.claims);
Ok(next.run(req).await)
}