adding jwt middlewares, and improving overall middlewares structure and server

This commit is contained in:
2026-03-11 21:01:01 +01:00
parent 587498c7bc
commit 2093456d91
12 changed files with 1082 additions and 217 deletions

42
src/middleware/api_key.rs Normal file
View File

@@ -0,0 +1,42 @@
use crate::{
middleware::{Middleware, MiddlewareFuture, MiddlewareResult},
Responder,
};
use http::Request;
use hyper::body::Incoming;
use log::warn;
pub struct ApiKeyMiddleware {
api_key: String,
}
impl ApiKeyMiddleware {
pub fn new(api_key: &str) -> Self {
Self {
api_key: api_key.to_string(),
}
}
}
impl Middleware for ApiKeyMiddleware {
fn run<'a>(&'a self, req: Request<Incoming>) -> MiddlewareFuture<'a> {
let expected_key = self.api_key.clone();
Box::pin(async move {
match req.headers().get("X-API-Key") {
Some(header) => {
if header == expected_key.as_str() {
MiddlewareResult::Continue(req)
} else {
warn!("X-API-Key wrong");
MiddlewareResult::Respond(Responder::unauthorized().unwrap())
}
}
None => {
warn!("X-API-Key missing");
MiddlewareResult::Respond(Responder::unauthorized().unwrap())
}
}
})
}
}