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()
},
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(),

View File

@@ -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));
}
}