Skip to content

Commit 1d1e4c8

Browse files
committed
only rate-limit API routes
1 parent bb79647 commit 1d1e4c8

1 file changed

Lines changed: 19 additions & 15 deletions

File tree

src/http.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -499,24 +499,30 @@ pub async fn run_server(
499499
None
500500
};
501501

502+
// Collect all API routes into a separate router to scope the rate-limiter middleware
503+
let mut api_router = Router::new().nest(
504+
"/api/v1",
505+
Router::new()
506+
.nest("/enrollment", enrollment::router())
507+
.nest("/password-reset", password_reset::router())
508+
.nest("/client-mfa", desktop_client_mfa::router())
509+
.nest("/openid", openid_login::router())
510+
.route("/poll", post(polling::info))
511+
.route("/health", get(healthcheck))
512+
.route("/health-grpc", get(healthcheckgrpc))
513+
.route("/info", get(app_info)),
514+
);
515+
if let Some(conf) = governor_conf {
516+
api_router = api_router.layer(GovernorLayer::new(conf));
517+
}
518+
502519
// Build axum app
503520
let mut app = Router::new()
504521
.route("/", get(index))
505522
.route("/{*path}", get(index))
506523
.route("/fonts/{*path}", get(web_asset))
507524
.route("/assets/{*path}", get(web_asset))
508-
.nest(
509-
"/api/v1",
510-
Router::new()
511-
.nest("/enrollment", enrollment::router())
512-
.nest("/password-reset", password_reset::router())
513-
.nest("/client-mfa", desktop_client_mfa::router())
514-
.nest("/openid", openid_login::router())
515-
.route("/poll", post(polling::info))
516-
.route("/health", get(healthcheck))
517-
.route("/health-grpc", get(healthcheckgrpc))
518-
.route("/info", get(app_info)),
519-
)
525+
.merge(api_router)
520526
.fallback_service(get(handle_404))
521527
.layer(middleware::from_fn_with_state(
522528
shared_state.clone(),
@@ -546,9 +552,7 @@ pub async fn run_server(
546552
})
547553
.on_response(trace::DefaultOnResponse::new().level(Level::DEBUG)),
548554
);
549-
if let Some(conf) = governor_conf {
550-
app = app.layer(GovernorLayer::new(conf));
551-
}
555+
552556
// Global request body size limit; all proxy endpoints have small payloads.
553557
app = app.layer(DefaultBodyLimit::max(REQUEST_BODY_LIMIT));
554558
// Security headers and version are the outermost layers so that ALL short-circuit

0 commit comments

Comments
 (0)