adding jwt middlewares, and improving overall middlewares structure and server
This commit is contained in:
42
src/middleware/api_key.rs
Normal file
42
src/middleware/api_key.rs
Normal 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())
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user