Skip to main content

Что такое Cabinet?

Bedolaga Cabinet — веб-приложение для управления VPN подписками через браузер. Работает как полноценный личный кабинет с авторизацией через Telegram, email или OAuth-провайдеров (Google, Яндекс, Discord, VK). Включает встроенную админ-панель для управления всем сервисом.

Telegram + Email + OAuth

4 способа авторизации, включая вход без Telegram

Админ-панель

Полное управление сервисом через веб-интерфейс

Real-time

WebSocket-уведомления и мгновенные обновления

Возможности для пользователей

Подписки

Покупка, продление, смена тарифа, приостановка. Выбор серверов и стран. Управление устройствами (HWID).

Баланс и платежи

Пополнение через любую подключённую платёжную систему. История транзакций с фильтрацией. Telegram Stars.

Подключение к VPN

Ключи подключения, QR-коды, инструкции по настройке. Deep-ссылки для автоматического импорта в VPN-клиенты.

Реферальная программа

Реферальная ссылка, список рефералов, история начислений. Заявка на партнёрство, вывод средств.

Поддержка

Создание тикетов, переписка с поддержкой, уведомления о статусе.

Дополнительно

Промокоды, рекламные предложения, конкурсы, мини-игры, колесо фортуны, опросы.

Авторизация

Cabinet поддерживает 4 независимых способа входа. Пользователи могут регистрироваться и использовать сервис без Telegram.

Telegram

СпособОписание
WebApp (Mini App)Автоматический вход при открытии внутри Telegram — валидация initData с HMAC-SHA256
Login WidgetКнопка «Войти через Telegram» на веб-странице для браузерного доступа

Email

Классическая регистрация с email + пароль:
  1. Регистрация с валидацией (блокировка одноразовых email)
  2. Верификация через ссылку в письме
  3. Вход по email + паролю
  4. Сброс пароля через email
  5. Смена email с подтверждением кодом
Подробнее: Email-авторизация

OAuth 2.0

Google

openid email profile

Яндекс

login:info login:email

Discord

identify email

VK

email
Аккаунты автоматически привязываются при совпадении верифицированного email. Подробнее: Настройка OAuth

JWT-токены

ТокенСрок жизниХранение
Access15 мин (настраивается)sessionStorage
Refresh7 дней (настраивается)localStorage, SHA-256 хеш в БД
Автообновление: access-токен обновляется автоматически через refresh. Параллельные запросы ожидают один refresh без дублирования.

Админ-панель

Полнофункциональная веб-панель администратора доступна прямо в Cabinet.

Доступ

# Telegram-админы (по user ID)
ADMIN_IDS=123456789,987654321

# Email-админы (для пользователей без Telegram)
ADMIN_EMAILS=admin@example.com,manager@example.com
Достаточно одного из двух — Telegram ID или email в списке администраторов.

Разделы

Дашборд

Аналитика, статистика пользователей, подписок и доходов

Пользователи

Поиск, просмотр профилей, управление данными, история действий

Тарифы

Создание, редактирование, включение/выключение тарифов, статистика

Серверы

Управление серверами, синхронизация с RemnaWave, статистика нагрузки

Платежи

Все транзакции, поиск по ID, настройка отображения платёжных методов

Рассылки

Массовые сообщения пользователям с фильтрацией и шаблонами

Промокоды

Создание и управление промокодами, промогруппами (периодические скидки), статистика

Рекламные кампании

Создание кампаний с deep-ссылками и отслеживанием конверсий

Партнёры

Заявки на партнёрство, настройка комиссий, управление партнёрами

Выводы средств

Обработка запросов на вывод реферальных средств (одобрение / отказ / завершение)

Поддержка

Управление тикетами, настройка уведомлений о SLA

Настройки

Live-редактирование конфигурации бота без перезапуска

RemnaWave

Статус панели, ноды, сквады, синхронизация, миграции пользователей между сквадами

Трафик

Мониторинг потребления трафика по пользователям

Рекламные предложения

Шаблоны промо-предложений, персональные рассылки

Email-шаблоны

Редактирование шаблонов писем (верификация, сброс пароля) с предпросмотром и тестовой отправкой

Приложения

Настройка VPN-приложений для скачивания, deep-ссылки по платформам, брендирование

Колесо фортуны

Настройка призов, стоимости вращения, лимитов

Закреплённые сообщения

Создание сообщений, отображаемых всем пользователям в кабинете

Обновления

Проверка новых версий бота и кабинета

Архитектура

Браузер  →  Caddy/Nginx  →  /api/*  →  remnawave_bot:8080  (backend API)
                          →  /*      →  /srv/cabinet         (статика frontend)
Frontend — статические файлы (HTML, JS, CSS). Обратный прокси:
  1. Раздаёт статику frontend
  2. Проксирует /api/* на backend бота (с удалением префикса /api)
Два режима главного меню бота:
РежимMAIN_MENU_MODEОписание
СтандартныйdefaultПолноценный Telegram-бот с inline-кнопками
КабинетcabinetМинимальное текстовое меню с перенаправлением в веб-кабинет

Стек технологий

ТехнологияНазначение
React 18UI фреймворк
TypeScriptТипизация
ViteСборка
Tailwind CSSСтили
ZustandState management
i18nextМультиязычность (RU/EN/CN/UA/FA)
Telegram WebApp SDKАвторизация через Telegram
WebSocketReal-time уведомления

Переменные окружения

Build-time (вшиваются в JS при сборке)

ПеременнаяОписаниеПо умолчанию
VITE_API_URLПуть к API (/api или полный URL)/api
VITE_TELEGRAM_BOT_USERNAMEUsername бота (без @)
VITE_APP_NAMEНазвание в шапке и вкладкеCabinet
VITE_APP_LOGOТекст логотипа (1-2 символа)V

Backend бота (.env бота)

ПеременнаяОписаниеПо умолчанию
CABINET_ENABLEDВключить Cabinet APIfalse
CABINET_URLБазовый URL кабинета (для ссылок в email и OAuth)
CABINET_JWT_SECRETСекретный ключ для JWT
CABINET_ALLOWED_ORIGINSCORS origins (через запятую)
CABINET_ACCESS_TOKEN_EXPIRE_MINUTESВремя жизни access token15
CABINET_REFRESH_TOKEN_EXPIRE_DAYSВремя жизни refresh token7
CABINET_EMAIL_AUTH_ENABLEDВключить email-входtrue
CABINET_EMAIL_VERIFICATION_ENABLEDТребовать верификацию emailtrue
CABINET_BUTTON_STYLEСтиль кнопок: primary, success, danger
MAIN_MENU_MODEРежим меню: default или cabinetdefault

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

1

Включите Cabinet API

Добавьте в .env бота:
CABINET_ENABLED=true
CABINET_URL=https://cabinet.example.com
CABINET_JWT_SECRET=your_secret_here
CABINET_ALLOWED_ORIGINS=https://cabinet.example.com
2

Разверните frontend

Подробная инструкция: Установка Cabinet
3

Настройте прокси

Caddy, Nginx или Traefik: Настройка прокси
4

Добавьте авторизацию (опционально)

Структура проекта

bedolaga-cabinet/
├── src/
│   ├── api/           # API клиенты (axios)
│   ├── components/    # React компоненты (UI kit)
│   ├── contexts/      # React контексты (auth, theme)
│   ├── hooks/         # Custom hooks
│   ├── locales/       # Переводы (i18n) — 5 языков
│   ├── pages/         # Страницы приложения
│   │   └── admin/     # Страницы админ-панели (20+ модулей)
│   ├── store/         # Zustand stores (auth, settings)
│   ├── types/         # TypeScript типы
│   └── utils/         # Утилиты
├── public/            # Статические файлы
├── Dockerfile         # Multi-stage сборка (node → nginx)
├── docker-compose.yml # Docker Compose для сборки
├── nginx.conf         # Nginx конфиг внутри контейнера
└── .env.example       # Пример переменных окружения