From 40d8c75b818e765c3f488dce1a09d41d1541f5c3 Mon Sep 17 00:00:00 2001 From: Deeman Date: Sun, 8 Mar 2026 20:26:50 +0100 Subject: [PATCH] feat: stash CF-RegionCode and CF-IPCity headers in g for future use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All three Cloudflare geo headers now available: - g.user_country (CF-IPCountry) — used by geo-sorted article listing - g.user_region (CF-RegionCode) — available for within-country sorting - g.user_city (CF-IPCity) — available for city-level proximity Co-Authored-By: Claude Opus 4.6 --- web/src/padelnomics/app.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/web/src/padelnomics/app.py b/web/src/padelnomics/app.py index 708e32f..d2e64c1 100644 --- a/web/src/padelnomics/app.py +++ b/web/src/padelnomics/app.py @@ -149,9 +149,16 @@ def create_app() -> Quart: # ------------------------------------------------------------------------- @app.before_request - async def set_user_country(): - """Stash Cloudflare CF-IPCountry header (ISO alpha-2) in g for geo sorting.""" + async def set_user_geo(): + """Stash Cloudflare geo headers in g for proximity sorting. + + Requires nginx: proxy_set_header CF-IPCountry $http_cf_ipcountry; + proxy_set_header CF-RegionCode $http_cf_regioncode; + proxy_set_header CF-IPCity $http_cf_ipcity; + """ g.user_country = request.headers.get("CF-IPCountry", "").upper() or "" + g.user_region = request.headers.get("CF-RegionCode", "") or "" + g.user_city = request.headers.get("CF-IPCity", "") or "" @app.before_request async def validate_lang():