From 8bfe3ec6b0a35689317c429650a9d1f3f5af179a Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Mon, 10 Feb 2025 18:34:37 +0000 Subject: [PATCH] fix: ensure ratelimiter adjusts for version prefix --- crates/delta/src/routes/mod.rs | 7 ++++++- crates/delta/src/util/ratelimiter.rs | 22 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/crates/delta/src/routes/mod.rs b/crates/delta/src/routes/mod.rs index 1f150e0b..5107e7c2 100644 --- a/crates/delta/src/routes/mod.rs +++ b/crates/delta/src/routes/mod.rs @@ -231,10 +231,15 @@ fn custom_openapi_spec() -> OpenApi { ..Default::default() }, Server { - url: "http://local.revolt.chat:8000".to_owned(), + url: "http://local.revolt.chat:14702".to_owned(), description: Some("Local Revolt Environment".to_owned()), ..Default::default() }, + Server { + url: "http://local.revolt.chat:14702/0.8".to_owned(), + description: Some("Local Revolt Environment (v0.8)".to_owned()), + ..Default::default() + }, ], external_docs: Some(ExternalDocs { url: "https://developers.revolt.chat".to_owned(), diff --git a/crates/delta/src/util/ratelimiter.rs b/crates/delta/src/util/ratelimiter.rs index c95f818d..95952918 100644 --- a/crates/delta/src/util/ratelimiter.rs +++ b/crates/delta/src/util/ratelimiter.rs @@ -94,14 +94,28 @@ pub struct Ratelimiter { /// /// Optionally, include a resource id to hash against. fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r str>) { - if let Some(segment) = request.routed_segment(0) { - let resource = request.routed_segment(1); + let (segment, resource, extra) = if matches!(request.routed_segment(0), Some("0.8")) { + ( + request.routed_segment(1), + request.routed_segment(2), + request.routed_segment(3), + ) + } else { + ( + request.routed_segment(0), + request.routed_segment(1), + request.routed_segment(2), + ) + }; + + if let Some(segment) = segment { + let resource = resource; let method = request.method(); match (segment, resource, method) { ("users", target, Method::Patch) => ("user_edit", target), ("users", _, _) => { - if let Some("default_avatar") = request.routed_segment(2) { + if let Some("default_avatar") = extra { return ("default_avatar", None); } @@ -110,7 +124,7 @@ fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r ("bots", _, _) => ("bots", None), ("channels", Some(id), _) => { if request.method() == Method::Post { - if let Some("messages") = request.routed_segment(2) { + if let Some("messages") = extra { return ("messaging", Some(id)); } }