Files
netrunner-backend/src/modules/geoip/mod.rs
T
nineap d91aef012e
Build & Push Image / Build and push Caddy (Cloudflare DNS) image (push) Successful in 26s
Build & Push Image / Build and push to Gitea Registry (push) Successful in 9m36s
CI / fmt + clippy + test (push) Failing after 24m37s
Region-aware pricing: GeoIP + VPN-детект + публичный /plans + бот
- modules::geoip — DB-IP Lite (.mmdb, без регистрации/ключа, в отличие от
  MaxMind) для страны по IP, X4BNet lists_vpn для грубой VPN/датацентр-
  эвристики. Обе базы скачиваются в рантайме, обновление — фоновая
  задача в tasks.rs (раз в сутки по умолчанию, GEOIP_REFRESH_INTERVAL).
- GET /api/v1/billing/plans (public_router, без auth_guard) — цены в
  валюте, определённой по IP посетителя (X-Real-IP/X-Forwarded-For,
  см. nginx-конфиги). VPN/датацентр IP -> всегда базовый USD, чтобы
  обход региона через любой публичный VPN не обесценивал скидки.
- Бот: Bot API не отдаёт IP пользователя вообще — валюта определяется по
  Telegram language_code. Показ цены — в валюте региона, САМА оплата
  через CryptoBot остаётся в USD/USDT (провайдер биллит 1:1 к USD-цене
  тарифа, менять валюту списания нельзя, не меняя сам провайдер).
2026-07-11 00:55:03 +07:00

16 lines
1.2 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//! Определение страны по IP (self-hosted DB-IP Lite, формат `.mmdb` — тот же,
//! что у MaxMind, но без регистрации/лицензионного ключа, см. README ниже) и
//! грубая эвристика "это VPN/датацентр?" по открытому списку CIDR-диапазонов
//! (X4BNet `lists_vpn`, тоже без ключей/оплаты).
//!
//! Обе базы скачиваются в рантайме (см. `service::GeoipService::refresh_*`),
//! не коммитятся в репозиторий — только пути/URL в конфиге. Периодическое
//! обновление — фоновая задача в `tasks.rs`, не здесь.
//!
//! Region-based pricing работает только там, где есть IP посетителя (сайт,
//! `GET /plans` — см. `modules::billing::controller`) — у Telegram-бота IP
//! юзера не видно вообще (ограничение самого Bot API), поэтому там валюта
//! определяется по `language_code` (см. `currency::currency_for_telegram_lang`).
pub mod currency;
pub mod service;