Skip to content

Commit 9bf947a

Browse files
committed
reject request with bad API version
1 parent a78b7d2 commit 9bf947a

File tree

1 file changed

+26
-12
lines changed
  • mithril-aggregator/src/http_server/routes

1 file changed

+26
-12
lines changed

mithril-aggregator/src/http_server/routes/router.rs

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use mithril_common::MITHRIL_API_VERSION;
99
use reqwest::header::{HeaderMap, HeaderValue};
1010
use std::sync::Arc;
1111
use warp::http::Method;
12-
use warp::Filter;
12+
use warp::{Filter, Rejection};
1313

1414
/// Routes
1515
pub fn routes(
@@ -24,15 +24,29 @@ pub fn routes(
2424
"mithril-api-version",
2525
HeaderValue::from_static(MITHRIL_API_VERSION),
2626
);
27-
let header_must_be = warp::header::exact("API_VERSION", MITHRIL_API_VERSION);
28-
warp::any().and(warp::path(SERVER_BASE_PATH)).and(
29-
certificate_routes::routes(dependency_manager.clone())
30-
.or(snapshot_routes::routes(dependency_manager.clone()))
31-
.or(signer_routes::routes(dependency_manager.clone()))
32-
.or(signatures_routes::routes(dependency_manager.clone()))
33-
.or(epoch_routes::routes(dependency_manager))
34-
.and(header_must_be)
35-
.with(cors)
36-
.with(warp::reply::with::headers(headers)),
37-
)
27+
warp::any()
28+
.and(header_must_be())
29+
.and(warp::path(SERVER_BASE_PATH))
30+
.and(
31+
certificate_routes::routes(dependency_manager.clone())
32+
.or(snapshot_routes::routes(dependency_manager.clone()))
33+
.or(signer_routes::routes(dependency_manager.clone()))
34+
.or(signatures_routes::routes(dependency_manager.clone()))
35+
.or(epoch_routes::routes(dependency_manager))
36+
.with(cors)
37+
.with(warp::reply::with::headers(headers)),
38+
)
39+
}
40+
41+
/// API Version verification
42+
fn header_must_be() -> impl Filter<Extract = (), Error = Rejection> + Copy {
43+
warp::header::optional("mithril-api-version")
44+
.and_then(|maybe_header: Option<String>| async move {
45+
match maybe_header {
46+
None => Ok(()),
47+
Some(version) if version == MITHRIL_API_VERSION => Ok(()),
48+
Some(_version) => Err(warp::reject()),
49+
}
50+
})
51+
.untuple_one()
3852
}

0 commit comments

Comments
 (0)