fix: ensure ratelimiter adjusts for version prefix

This commit is contained in:
Paul Makles
2025-02-10 18:34:37 +00:00
committed by Zomatree
parent a7345a7b90
commit 8bfe3ec6b0
2 changed files with 24 additions and 5 deletions

View File

@@ -231,10 +231,15 @@ fn custom_openapi_spec() -> OpenApi {
..Default::default() ..Default::default()
}, },
Server { Server {
url: "http://local.revolt.chat:8000".to_owned(), url: "http://local.revolt.chat:14702".to_owned(),
description: Some("Local Revolt Environment".to_owned()), description: Some("Local Revolt Environment".to_owned()),
..Default::default() ..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 { external_docs: Some(ExternalDocs {
url: "https://developers.revolt.chat".to_owned(), url: "https://developers.revolt.chat".to_owned(),

View File

@@ -94,14 +94,28 @@ pub struct Ratelimiter {
/// ///
/// Optionally, include a resource id to hash against. /// Optionally, include a resource id to hash against.
fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r str>) { fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r str>) {
if let Some(segment) = request.routed_segment(0) { let (segment, resource, extra) = if matches!(request.routed_segment(0), Some("0.8")) {
let resource = request.routed_segment(1); (
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(); let method = request.method();
match (segment, resource, method) { match (segment, resource, method) {
("users", target, Method::Patch) => ("user_edit", target), ("users", target, Method::Patch) => ("user_edit", target),
("users", _, _) => { ("users", _, _) => {
if let Some("default_avatar") = request.routed_segment(2) { if let Some("default_avatar") = extra {
return ("default_avatar", None); return ("default_avatar", None);
} }
@@ -110,7 +124,7 @@ fn resolve_bucket<'r>(request: &'r rocket::Request<'_>) -> (&'r str, Option<&'r
("bots", _, _) => ("bots", None), ("bots", _, _) => ("bots", None),
("channels", Some(id), _) => { ("channels", Some(id), _) => {
if request.method() == Method::Post { if request.method() == Method::Post {
if let Some("messages") = request.routed_segment(2) { if let Some("messages") = extra {
return ("messaging", Some(id)); return ("messaging", Some(id));
} }
} }