11use axum:: {
2- extract:: { MatchedPath , Request } ,
2+ extract:: { DefaultBodyLimit , MatchedPath , Request } ,
33 middleware:: { self , Next } ,
44 response:: Response ,
55 routing:: { get, post} ,
@@ -20,16 +20,27 @@ use super::{
2020use crate :: {
2121 api:: BuilderApi ,
2222 state:: { BuilderApiState , PbsStateGuard } ,
23+ MAX_SIZE_REGISTER_VALIDATOR_REQUEST , MAX_SIZE_SUBMIT_BLOCK_RESPONSE ,
2324} ;
2425
2526pub fn create_app_router < S : BuilderApiState , A : BuilderApi < S > > ( state : PbsStateGuard < S > ) -> Router {
27+ // DefaultBodyLimit is 2Mib by default, so we only increase it for a few routes
28+ // thay may need more
29+
2630 let builder_routes = Router :: new ( )
2731 . route ( GET_HEADER_PATH , get ( handle_get_header :: < S , A > ) )
2832 . route ( GET_STATUS_PATH , get ( handle_get_status :: < S , A > ) )
29- . route ( REGISTER_VALIDATOR_PATH , post ( handle_register_validator :: < S , A > ) )
30- . route ( SUBMIT_BLOCK_PATH , post ( handle_submit_block :: < S , A > ) ) ;
33+ . route (
34+ REGISTER_VALIDATOR_PATH ,
35+ post ( handle_register_validator :: < S , A > )
36+ . route_layer ( DefaultBodyLimit :: max ( MAX_SIZE_REGISTER_VALIDATOR_REQUEST ) ) ,
37+ )
38+ . route (
39+ SUBMIT_BLOCK_PATH ,
40+ post ( handle_submit_block :: < S , A > )
41+ . route_layer ( DefaultBodyLimit :: max ( MAX_SIZE_SUBMIT_BLOCK_RESPONSE ) ) ,
42+ ) ; // header is smaller than the response but err on the safe side
3143 let reload_router = Router :: new ( ) . route ( RELOAD_PATH , post ( handle_reload :: < S , A > ) ) ;
32-
3344 let builder_api = Router :: new ( ) . nest ( BUILDER_API_PATH , builder_routes) . merge ( reload_router) ;
3445
3546 let app = if let Some ( extra_routes) = A :: extra_routes ( ) {
@@ -58,7 +69,7 @@ pub async fn tracing_middleware(req: Request, next: Next) -> Response {
5869 trace ! (
5970 http. method = %req. method( ) ,
6071 http. user_agent = req. headers( ) . typed_get:: <UserAgent >( ) . map( |ua| ua. to_string( ) ) . unwrap_or_default( ) ,
61- http. content_type = req. headers( ) . typed_get:: <ContentType >( ) . map( |ua| ua. to_string( ) ) . unwrap_or_default( ) ,
72+ http. content_type = req. headers( ) . typed_get:: <ContentType >( ) . map( |ua| ua. to_string( ) ) . unwrap_or_default( ) ,
6273 "start request" ) ;
6374
6475 let response = next. run ( req) . await ;
0 commit comments