Добавить проверку токена прокси, динамические лимиты трафика и Telegram magic-link вход

Прокси теперь может валидировать клиентские JWT и отчитываться о расходе
трафика через новые internal-эндпоинты (защищены X-Internal-Secret), лимит
на юзера настраивается динамически через admin PATCH без передеплоя прокси.
Заодно реализован задокументированный, но не подключённый флоу входа через
Telegram-бота (magic-link) для десктоп/мобильного приложения, и seed-эндпоинты
теперь возвращают access_token в JSON (не только в cookie) — без этого
Tauri-приложение не могло ими пользоваться.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 00:30:25 +07:00
parent 1a26403afb
commit c8eea8203e
11 changed files with 485 additions and 17 deletions
+7
View File
@@ -198,6 +198,12 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
Только для стендов без TLS, никогда не для прода!"
);
}
// Общий секрет, которым делятся все прокси-ноды при вызовах internal-эндпоинтов
// (`POST /internal/validate`, `POST /internal/usage`) — не пользовательская
// авторизация, поэтому отдельный env, не JWT_SECRET.
let proxy_internal_secret = std::env::var("PROXY_INTERNAL_SECRET")
.expect("КРИТИЧЕСКАЯ ОШИБКА: PROXY_INTERNAL_SECRET не задан в .env!");
let csrf_allowed_origins: Vec<String> = std::env::var("CSRF_ALLOWED_ORIGINS")
.unwrap_or_else(|_| {
"https://netrunner-vpn.com,https://account.netrunner-vpn.com".to_string()
@@ -253,6 +259,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
cookie_domain,
cookie_secure,
csrf_allowed_origins,
proxy_internal_secret,
};
let app = create_router(state.clone(), &frontend_dir);