Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Telegram Telegram

FunTimeEvents API Proxy

Python aiohttp License

Прокси-сервер для FunTimeEventsSDK. Прозрачный reverse proxy: форвардит запросы и ключ клиента как есть, скрывая реальный IP клиентов от бэкенда. Каждый клиент использует свой apiKey, бэкенд валидирует его напрямую.


Архитектура

Client Mod (SDK, со своим apiKey)
  │
  ├── HTTP (X-API-Key клиента) ──→ Прокси ──→ api.funtimeevents.su
  │
  └── WSS  (auth с api_key клиента) ──→ Прокси ──→ wss://api.funtimeevents.su/v1/relay

Прокси ничего не хранит, не кеширует, не модифицирует тело запросов и не подменяет аутентификацию — ключ клиента форвардится как есть, поэтому бэкенд сам решает, пускать клиента или нет (невалидный ключ → 401 / 4001).

Маршрутизация

Прокси заменяет только origin (схема + хост + порт) в URL запроса. Путь SDK сохраняется как есть:

SDK:      POST https://proxy.example.com/v1/players
Прокси:   POST https://api.funtimeevents.su/v1/players   (origin заменён, путь /v1/players сохранён)

Это работает для любых путей — с префиксом /v1/ или без него. Поддерживаются query-параметры, фрагменты и любые HTTP-методы.


Быстрый старт

1. Установка

git clone https://github.com/Rizzener/FunTimeEventsAPIProxy.git
cd FunTimeEventsAPIProxy
pip install -e .

2. Настройка

Создать .env из шаблона:

cp .env.example .env

3. Запуск

fte-proxy run

Или одной строкой (без .env):

FTE_PROXY_PORT=9090 fte-proxy run

Конфигурация

Все настройки задаются через переменные окружения с префиксом FTE_PROXY_ или через .env файл.

Переменная По умолчанию Описание
FTE_PROXY_HOST 0.0.0.0 Адрес для прослушивания
FTE_PROXY_PORT 8080 Порт
FTE_PROXY_USER_AGENT fte-api-proxy/1.0 User-Agent при запросах к бэкенду
FTE_PROXY_LOG_LEVEL INFO Уровень логов
FTE_PROXY_HTTP_TIMEOUT 15 Таймаут HTTP-запросов (сек)
FTE_PROXY_WS_CONNECT_TIMEOUT 30 Таймаут подключения WebSocket (сек)
FTE_PROXY_WS_HEARTBEAT_INTERVAL 30 Интервал heartbeat WebSocket (сек)
FTE_PROXY_WS_READ_TIMEOUT 60 Таймаут чтения WebSocket (сек)
FTE_PROXY_TLS_CERT — Путь к сертификату TLS
FTE_PROXY_TLS_KEY — Путь к ключу TLS

Пример:

FTE_PROXY_PORT=9090 \
FTE_PROXY_LOG_LEVEL=DEBUG \
fte-proxy run

TLS

Если прокси запускается с HTTPS/WSS:

FTE_PROXY_TLS_CERT=/etc/letsencrypt/live/proxy.example.com/fullchain.pem \
FTE_PROXY_TLS_KEY=/etc/letsencrypt/live/proxy.example.com/privkey.pem \
fte-proxy run

Без сертификатов — прокси работает по HTTP/WS.


Настройка SDK

В чит-клиенте достаточно указать baseUrl на прокси. apiKey обязателен — каждый клиент использует свой ключ (бэкенд валидирует его напрямую, при компрометации ключ отзывается и выдаётся новый):

FunTimeEventsAPI.builder()
    .userAgent("ClientMod/1.0")
    .apiKey("sk-fte-...")
    .baseUrl("http://proxy-ip:8080/v1/")
    .build();

Пример с кастомным портом и HTTPS:

FunTimeEventsAPI.builder()
    .userAgent("ClientMod/1.0")
    .apiKey("sk-fte-...")
    .baseUrl("https://proxy.example.com/v1/")
    .build();

Путь SDK (/v1/...) прокси сохраняет — бэкенд видит https://api.funtimeevents.su/v1/.... Невалидный ключ не проходит: бэкенд отвечает 401 (HTTP) или закрывает relay 4001 (WebSocket) — прокси просто пробрасывает ответ.


Мониторинг

Логи выглядят так:

2026-07-29 15:51 | INFO  | HTTP  | POST /v1/bans -> 200
2026-07-29 15:51 | INFO  | WS    | connected  -> wss://api.funtimeevents.su/v1/relay
2026-07-29 15:51 | INFO  | WS    | auth ok
2026-07-29 15:51 | INFO  | WS    | -> relay coordinates
2026-07-29 15:52 | WARN  | HTTP  | GET /v1/events -> 502

License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages