d91aef012e
- 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-цене тарифа, менять валюту списания нельзя, не меняя сам провайдер).
16 lines
1.2 KiB
Rust
16 lines
1.2 KiB
Rust
//! Определение страны по 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;
|