From ad3edf541b2ed2db9843b41fb6101097a07b70d5 Mon Sep 17 00:00:00 2001 From: aecsocket Date: Tue, 30 Dec 2025 16:49:49 +0000 Subject: [PATCH] Replace MaxMind with CloudFlare headers (#4934) * Replace MaxMind with CloudFlare headers * Remove MaxMind env vars * Fix test harness --- Cargo.lock | 1 - Cargo.toml | 1 - apps/labrinth/.env.docker-compose | 3 --- apps/labrinth/.env.local | 3 --- apps/labrinth/Cargo.toml | 1 - .../fixtures/labrinth-seed-data-202508052143.sql | 10 ++++++++++ apps/labrinth/src/lib.rs | 8 -------- apps/labrinth/src/main.rs | 3 --- apps/labrinth/src/routes/analytics.rs | 4 +--- apps/labrinth/src/routes/internal/admin.rs | 8 +++++--- apps/labrinth/src/test/mod.rs | 4 ---- 11 files changed, 16 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 56731707..e3eb7521 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4541,7 +4541,6 @@ dependencies = [ "labrinth", "lettre", "meilisearch-sdk", - "modrinth-maxmind", "modrinth-util", "muralpay", "murmur2", diff --git a/Cargo.toml b/Cargo.toml index 089eb20d..7de5f1e0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -109,7 +109,6 @@ lettre = { version = "0.11.19", default-features = false, features = [ maxminddb = "0.26.0" meilisearch-sdk = { version = "0.30.0", default-features = false } modrinth-log = { path = "packages/modrinth-log" } -modrinth-maxmind = { path = "packages/modrinth-maxmind" } modrinth-util = { path = "packages/modrinth-util" } muralpay = { path = "packages/muralpay" } murmur2 = "0.1.0" diff --git a/apps/labrinth/.env.docker-compose b/apps/labrinth/.env.docker-compose index 18f62577..a270a770 100644 --- a/apps/labrinth/.env.docker-compose +++ b/apps/labrinth/.env.docker-compose @@ -114,9 +114,6 @@ CLICKHOUSE_USER=default CLICKHOUSE_PASSWORD=default CLICKHOUSE_DATABASE=staging_ariadne -MAXMIND_ACCOUNT_ID=none -MAXMIND_LICENSE_KEY=none - FLAME_ANVIL_URL=none STRIPE_API_KEY=none diff --git a/apps/labrinth/.env.local b/apps/labrinth/.env.local index 261513ed..340ffb61 100644 --- a/apps/labrinth/.env.local +++ b/apps/labrinth/.env.local @@ -118,9 +118,6 @@ CLICKHOUSE_USER=default CLICKHOUSE_PASSWORD=default CLICKHOUSE_DATABASE=staging_ariadne -MAXMIND_ACCOUNT_ID=none -MAXMIND_LICENSE_KEY=none - FLAME_ANVIL_URL=none STRIPE_API_KEY=none diff --git a/apps/labrinth/Cargo.toml b/apps/labrinth/Cargo.toml index f267cc59..90d129d9 100644 --- a/apps/labrinth/Cargo.toml +++ b/apps/labrinth/Cargo.toml @@ -70,7 +70,6 @@ itertools = { workspace = true } json-patch = { workspace = true } lettre = { workspace = true } meilisearch-sdk = { workspace = true, features = ["reqwest"] } -modrinth-maxmind = { workspace = true } modrinth-util = { workspace = true, features = ["decimal", "utoipa"] } muralpay = { workspace = true, features = ["client", "mock", "utoipa"] } murmur2 = { workspace = true } diff --git a/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql b/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql index 6a6dd726..00063738 100644 --- a/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql +++ b/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql @@ -958,6 +958,16 @@ COPY public.loader_field_enum_values (id, enum_id, value, ordering, created, met 812 2 rd-132211 \N 2009-05-13 20:11:00+00 {"type": "alpha", "major": false} 11 2 1.21.5-pre1 \N 2025-03-11 12:49:44+00 {"type": "snapshot", "major": false} 12 2 25w10a \N 2025-03-05 13:11:13+00 {"type": "snapshot", "major": false} +1005 3 bukkit \N 2025-04-03 21:55:46.229944+00 \N +1006 3 bungeecord \N 2025-04-03 21:55:46.229944+00 \N +1007 3 canvas \N 2025-04-03 21:55:46.229944+00 \N +1008 3 datapack \N 2025-04-03 21:55:46.229944+00 \N +1009 3 fabric \N 2025-04-03 21:55:46.229944+00 \N +10010 3 folia \N 2025-04-03 21:55:46.229944+00 \N +10011 3 forge \N 2025-04-03 21:55:46.229944+00 \N +10012 3 iris \N 2025-04-03 21:55:46.229944+00 \N +10013 3 liteloader \N 2025-04-03 21:55:46.229944+00 \N +10014 3 neoforge \N 2025-04-03 21:55:46.229944+00 \N \. diff --git a/apps/labrinth/src/lib.rs b/apps/labrinth/src/lib.rs index 27995d32..e42cc3f8 100644 --- a/apps/labrinth/src/lib.rs +++ b/apps/labrinth/src/lib.rs @@ -3,7 +3,6 @@ use std::time::Duration; use actix_web::web; use database::redis::RedisPool; -use modrinth_maxmind::MaxMind; use queue::{ analytics::AnalyticsQueue, email::EmailQueue, payouts::PayoutsQueue, session::AuthQueue, socket::ActiveSockets, @@ -55,7 +54,6 @@ pub struct LabrinthConfig { pub redis_pool: RedisPool, pub clickhouse: Client, pub file_host: Arc, - pub maxmind: web::Data, pub scheduler: Arc, pub ip_salt: Pepper, pub search_config: search::SearchConfig, @@ -80,7 +78,6 @@ pub fn app_setup( search_config: search::SearchConfig, clickhouse: &mut Client, file_host: Arc, - maxmind: MaxMind, stripe_client: stripe::Client, anrok_client: anrok::Client, email_queue: EmailQueue, @@ -275,7 +272,6 @@ pub fn app_setup( redis_pool, clickhouse: clickhouse.clone(), file_host, - maxmind: web::Data::new(maxmind), scheduler: Arc::new(scheduler), ip_salt, search_config, @@ -321,7 +317,6 @@ pub fn app_config( .app_data(labrinth_config.session_queue.clone()) .app_data(labrinth_config.payouts_queue.clone()) .app_data(labrinth_config.email_queue.clone()) - .app_data(labrinth_config.maxmind.clone()) .app_data(web::Data::new(labrinth_config.ip_salt.clone())) .app_data(web::Data::new(labrinth_config.analytics_queue.clone())) .app_data(web::Data::new(labrinth_config.clickhouse.clone())) @@ -496,9 +491,6 @@ pub fn check_env_vars() -> bool { failed |= check_var::("CLICKHOUSE_PASSWORD"); failed |= check_var::("CLICKHOUSE_DATABASE"); - failed |= check_var::("MAXMIND_ACCOUNT_ID"); - failed |= check_var::("MAXMIND_LICENSE_KEY"); - failed |= check_var::("FLAME_ANVIL_URL"); failed |= check_var::("GOTENBERG_URL"); diff --git a/apps/labrinth/src/main.rs b/apps/labrinth/src/main.rs index 9484d622..14f82dbb 100644 --- a/apps/labrinth/src/main.rs +++ b/apps/labrinth/src/main.rs @@ -175,8 +175,6 @@ async fn main() -> std::io::Result<()> { return Ok(()); } - let maxmind_reader = modrinth_maxmind::MaxMind::new().await; - let prometheus = PrometheusMetricsBuilder::new("labrinth") .endpoint("/metrics") .exclude_regex(r"^/api/v1/.*$") @@ -205,7 +203,6 @@ async fn main() -> std::io::Result<()> { search_config.clone(), &mut clickhouse, file_host.clone(), - maxmind_reader.clone(), stripe_client, anrok_client.clone(), email_queue, diff --git a/apps/labrinth/src/routes/analytics.rs b/apps/labrinth/src/routes/analytics.rs index b15b9117..501b8be2 100644 --- a/apps/labrinth/src/routes/analytics.rs +++ b/apps/labrinth/src/routes/analytics.rs @@ -9,7 +9,6 @@ use crate::util::date::get_current_tenths_of_ms; use crate::util::env::parse_strings_from_var; use actix_web::{HttpRequest, HttpResponse}; use actix_web::{post, web}; -use modrinth_maxmind::MaxMind; use serde::Deserialize; use sqlx::PgPool; use std::collections::HashMap; @@ -49,7 +48,6 @@ pub struct UrlInput { #[post("view")] pub async fn page_view_ingest( req: HttpRequest, - maxmind: web::Data, analytics_queue: web::Data>, session_queue: web::Data, url_input: web::Json, @@ -114,7 +112,7 @@ pub async fn page_view_ingest( user_id: 0, project_id: 0, ip, - country: maxmind.query_country(ip).await.unwrap_or_default(), + country: headers.get("cf-ipcountry").cloned().unwrap_or_default(), user_agent: headers.get("user-agent").cloned().unwrap_or_default(), headers: headers .into_iter() diff --git a/apps/labrinth/src/routes/internal/admin.rs b/apps/labrinth/src/routes/internal/admin.rs index c4c64b5b..e94b30ab 100644 --- a/apps/labrinth/src/routes/internal/admin.rs +++ b/apps/labrinth/src/routes/internal/admin.rs @@ -10,7 +10,6 @@ use crate::search::SearchConfig; use crate::util::date::get_current_tenths_of_ms; use crate::util::guards::admin_key_guard; use actix_web::{HttpRequest, HttpResponse, patch, post, web}; -use modrinth_maxmind::MaxMind; use serde::Deserialize; use sqlx::PgPool; use std::collections::HashMap; @@ -42,7 +41,6 @@ pub async fn count_download( req: HttpRequest, pool: web::Data, redis: web::Data, - maxmind: web::Data, analytics_queue: web::Data>, session_queue: web::Data, download_body: web::Json, @@ -126,7 +124,11 @@ pub async fn count_download( project_id: project_id as u64, version_id: version_id as u64, ip, - country: maxmind.query_country(ip).await.unwrap_or_default(), + country: download_body + .headers + .get("cf-ipcountry") + .cloned() + .unwrap_or_default(), user_agent: download_body .headers .get("user-agent") diff --git a/apps/labrinth/src/test/mod.rs b/apps/labrinth/src/test/mod.rs index 45cb2463..dd49b297 100644 --- a/apps/labrinth/src/test/mod.rs +++ b/apps/labrinth/src/test/mod.rs @@ -3,7 +3,6 @@ use crate::util::anrok; use crate::util::gotenberg::GotenbergClient; use crate::{LabrinthConfig, file_hosting}; use crate::{check_env_vars, clickhouse}; -use modrinth_maxmind::MaxMind; use std::sync::Arc; pub mod api_common; @@ -40,8 +39,6 @@ pub async fn setup(db: &database::TemporaryDatabase) -> LabrinthConfig { Arc::new(file_hosting::MockHost::new()); let mut clickhouse = clickhouse::init_client().await.unwrap(); - let maxmind_reader = MaxMind::new().await; - let stripe_client = stripe::Client::new(dotenvy::var("STRIPE_API_KEY").unwrap()); @@ -58,7 +55,6 @@ pub async fn setup(db: &database::TemporaryDatabase) -> LabrinthConfig { search_config, &mut clickhouse, file_host.clone(), - maxmind_reader, stripe_client, anrok_client, email_queue,