diff --git a/Cargo.lock b/Cargo.lock index a4fafabf..1f7637fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6574,6 +6574,7 @@ dependencies = [ "axum", "dashmap", "log", + "revolt-config", "revolt-database", "revolt-result", "revolt_rocket_okapi", diff --git a/crates/core/ratelimits/Cargo.toml b/crates/core/ratelimits/Cargo.toml index 49110e1e..05e1e362 100644 --- a/crates/core/ratelimits/Cargo.toml +++ b/crates/core/ratelimits/Cargo.toml @@ -12,6 +12,7 @@ default = ["rocket", "axum"] [dependencies] revolt-database = { version = "0.8.8", path = "../database"} revolt-result = { version = "0.8.8", path = "../result" } +revolt-config = { version = "0.8.8", path = "../config" } rocket = { version = "0.5.1", optional = true } revolt_rocket_okapi = { version = "0.10.0", optional = true } diff --git a/crates/core/ratelimits/src/axum.rs b/crates/core/ratelimits/src/axum.rs index 39b0c3bb..f50cf867 100644 --- a/crates/core/ratelimits/src/axum.rs +++ b/crates/core/ratelimits/src/axum.rs @@ -11,6 +11,7 @@ use axum::{ routing::get, }; use revolt_database::{Database, User}; +use revolt_config::config; use crate::ratelimiter::{RatelimitInformation, Ratelimiter, RequestKind}; @@ -31,8 +32,8 @@ fn to_ip(parts: &Parts) -> String { .unwrap_or_default() } -fn to_real_ip(parts: &Parts) -> String { - if let Ok(true) = std::env::var("TRUST_CLOUDFLARE").map(|x| x == "1") { +async fn to_real_ip(parts: &Parts) -> String { + if config().await.api.security.trust_cloudflare { parts .headers .get("CF-Connecting-IP") @@ -62,7 +63,7 @@ where let identifier = if let Ok(user) = parts.extract_with_state::(state).await { user.id } else { - to_real_ip(parts) + to_real_ip(parts).await }; let (bucket, resource) = storage.resolver.resolve_bucket(parts); diff --git a/crates/core/ratelimits/src/rocket.rs b/crates/core/ratelimits/src/rocket.rs index 6e7a0c9d..046317bd 100644 --- a/crates/core/ratelimits/src/rocket.rs +++ b/crates/core/ratelimits/src/rocket.rs @@ -6,6 +6,7 @@ use rocket::http::{Method, Status}; use rocket::request::{FromRequest, Outcome}; use rocket::serde::json::Json; use rocket::{Data, Request, Response, State}; +use revolt_config::config; use revolt_rocket_okapi::r#gen::OpenApiGenerator; use revolt_rocket_okapi::request::{OpenApiFromRequest, RequestHeaderInput}; @@ -33,8 +34,8 @@ fn to_ip(request: &'_ rocket::Request<'_>) -> String { } /// Find the actual IP of the client -fn to_real_ip(request: &'_ rocket::Request<'_>) -> String { - if let Ok(true) = std::env::var("TRUST_CLOUDFLARE").map(|x| x == "1") { +async fn to_real_ip(request: &'_ rocket::Request<'_>) -> String { + if config().await.api.security.trust_cloudflare { request .headers() .get_one("CF-Connecting-IP") @@ -60,7 +61,7 @@ impl<'r> FromRequest<'r> for Ratelimiter { { session.id } else { - to_real_ip(request) + to_real_ip(request).await }; let (bucket, resource) = storage.resolver.resolve_bucket(request); @@ -105,7 +106,7 @@ impl Fairing for RatelimitFairing { info!( "User rate-limited on route {}! (IP = {:?})", request.uri(), - to_real_ip(request) + to_real_ip(request).await ); request.set_method(Method::Get);