From b53845e10cc25686fb7ce6380b6d82920206c8b3 Mon Sep 17 00:00:00 2001 From: aecsocket Date: Fri, 19 Dec 2025 09:32:13 +0000 Subject: [PATCH 1/3] Replace MaxMind with CloudFlare headers --- Cargo.lock | 2 +- Cargo.toml | 1 - apps/labrinth/Cargo.toml | 1 - apps/labrinth/src/lib.rs | 5 ----- apps/labrinth/src/main.rs | 3 --- apps/labrinth/src/routes/analytics.rs | 4 +--- apps/labrinth/src/routes/internal/admin.rs | 8 +++++--- 7 files changed, 7 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 92cc9f3838..e3eb752155 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4541,7 +4541,6 @@ dependencies = [ "labrinth", "lettre", "meilisearch-sdk", - "modrinth-maxmind", "modrinth-util", "muralpay", "murmur2", @@ -10349,6 +10348,7 @@ dependencies = [ "quote", "regex", "syn 2.0.106", + "url", "uuid 1.18.1", ] diff --git a/Cargo.toml b/Cargo.toml index 089eb20d76..7de5f1e0c8 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/Cargo.toml b/apps/labrinth/Cargo.toml index f267cc59ad..90d129d9a1 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/src/lib.rs b/apps/labrinth/src/lib.rs index 27995d3211..7432e982f0 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())) diff --git a/apps/labrinth/src/main.rs b/apps/labrinth/src/main.rs index f3cab342f0..daddbf6328 100644 --- a/apps/labrinth/src/main.rs +++ b/apps/labrinth/src/main.rs @@ -174,8 +174,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/.*$") @@ -204,7 +202,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 b15b911747..501b8be217 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 518a315aa8..07710fa821 100644 --- a/apps/labrinth/src/routes/internal/admin.rs +++ b/apps/labrinth/src/routes/internal/admin.rs @@ -13,7 +13,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; @@ -48,7 +47,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, @@ -132,7 +130,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") From d85e49071bd8db4bc890812675268c7aed6a24b6 Mon Sep 17 00:00:00 2001 From: aecsocket Date: Fri, 19 Dec 2025 09:34:58 +0000 Subject: [PATCH 2/3] Remove MaxMind env vars --- apps/labrinth/.env.docker-compose | 3 --- apps/labrinth/.env.local | 3 --- apps/labrinth/src/lib.rs | 3 --- 3 files changed, 9 deletions(-) diff --git a/apps/labrinth/.env.docker-compose b/apps/labrinth/.env.docker-compose index 6102fc99ab..993549fada 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 261513ed91..340ffb6117 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/src/lib.rs b/apps/labrinth/src/lib.rs index 7432e982f0..e42cc3f81d 100644 --- a/apps/labrinth/src/lib.rs +++ b/apps/labrinth/src/lib.rs @@ -491,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"); From 3f200f5e5ac068733431d526668ce9f3b0b61e5a Mon Sep 17 00:00:00 2001 From: aecsocket Date: Fri, 19 Dec 2025 19:36:05 +0000 Subject: [PATCH 3/3] Fix test harness --- .../fixtures/labrinth-seed-data-202508052143.sql | 10 ++++++++++ apps/labrinth/src/test/mod.rs | 4 ---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql b/apps/labrinth/fixtures/labrinth-seed-data-202508052143.sql index 6a6dd72605..0006373881 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/test/mod.rs b/apps/labrinth/src/test/mod.rs index 45cb2463a8..dd49b297b5 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,