Modules/Community/QRAuth. Он заменяет стандартный экран входа на страницу с QR-кодом и подключает Telegram-бота. Пользователь сканирует QR телефоном, подтверждает вход в боте, и телевизор входит сам.
Модуль работает поверх accsdb. Он не заменяет авторизацию Lampac, а дописывает пользователей в общий users.json.
Возможности
- Вход по QR. Экран входа показывает QR-код на
https://t.me/<бот>?start=qr_<сессия>. После подтверждения в боте страница входит этим аккаунтом. - Заявки на доступ. Новый пользователь нажимает Запросить доступ, админ одобряет одной кнопкой. Пароль приходит пользователю в личку.
- Управление из Telegram. Команда
/users: список пользователей, карточки, бан и разбан, статистика. - Фон из постеров. Сервер собирает стену из постеров TMDB в одну картинку, поэтому слабым ТВ почти нечего считать.
Включение модуля
1
Включите в manifest.json
В файле
Modules/Community/QRAuth/manifest.json установите "enable": true. По умолчанию в репозитории стоит false.2
Проверьте SkipModules
Убедитесь, что
QRAuth нет в BaseModule.SkipModules в init.conf.3
Включите accsdb
Задайте
accsdb.enable: true и длинный shared_passwd. Модуль работает только поверх accsdb.4
Добавьте секции QRAuthBot и DenyPage
Скопируйте пример ниже в
init.conf. Полный набор полей лежит в Modules/Community/QRAuth/init.merge.example.json.5
Перезапустите сервер
Выполните
systemctl restart lampac (Linux) или перезапустите контейнер (Docker)..cs при запуске, а Telegram.Bot.dll уже лежит в references/.
Модуль с
"enable": false в manifest.json пропускается молча, без записи в лог. Если в логе нет строк compilation QRAuth и loaded module: QRAuth, проверьте манифест.Конфигурация
QRAuthBot
DenyPage
Правки секции
DenyPage подхватываются без перезапуска. Модуль перегенерирует plugins/override/deny.js.
Совместная работа с Tg-notify
Оба модуля сами опрашивают Telegram через long polling (GetUpdates). Общего обработчика событий нет. На одном токене возникают три проблемы:
- Конфликт опроса. Telegram отвечает
409 Conflict: terminated by other getUpdates request. Модули сбивают друг друга, лог забивается ошибками 409. - Потерянные нажатия. Каждое событие получает модуль, который первым забрал его из очереди. Нажатие Выдать доступ может уйти в Tg-notify, который такой кнопки не знает. Кнопки срабатывают через раз.
- Неподтверждённый вход. Если
tg_targetуказывает на бот Tg-notify,/startс номером сессии уйдёт туда, и вход не подтвердится.
До переименования QRAuth читал секцию
TelegramBot, ту же, что и Tg-notify. Если вы обновляетесь со старой версии, переименуйте секцию QRAuth в init.conf в QRAuthBot. Иначе бот QRAuth не запустится.Как работает вход по QR
1
Страница запрашивает сессию
Экран входа вызывает
GET /tgbot/qr/start и получает session. QR ведёт на https://t.me/<бот>?start=qr_<session>.2
Пользователь сканирует QR
В боте приходит
/start qr_<session>. Если доступа нет, бот предлагает Запросить доступ.3
Пользователь подтверждает вход
Бот показывает кнопку Подтвердить вход. Нажатие подтверждает сессию токеном пользователя.
4
Страница входит
Экран входа опрашивает
GET /tgbot/qr/status?session=…, получает токен и входит через /testaccsdb, как при вводе пароля.- Сессия живёт 3 минуты, хранится в памяти и одноразовая. По истечении страница сама берёт новый QR.
- У каждой загрузки страницы своя сессия, поэтому устройства друг другу не мешают.
- Перезапуск Lampac обнуляет активные сессии.
Команды бота
Повторная заявка от того же пользователя игнорируется 10 минут. У доступа нет срока действия, только бан и разбан.
Связь с accsdb
Модуль и ядро Lampac не вызывают друг друга напрямую. Связь идёт через общийusers.json и эндпоинт /testaccsdb.
- При выдаче доступа модуль генерирует токен и записывает его в поле
id. Это и пароль пользователя. - Ядро перечитывает
users.jsonпримерно раз в секунду. Между Выдать и возможностью войти бывает задержка до секунды. - Бан ставит
ban: trueв существующей записи. Удалять строку нельзя: ядро не забывает удалённых пользователей до перезапуска.
users.json:
HTTP API
Модуль сам пропускает
/tgbot/qr/* для неавторизованных посетителей через EventListener.Accsdb. Добавлять tgbot/qr в accsdb.whitepattern не нужно.
Диагностика
Значения
state у /tgbot/qr/posters:
Подробности сбоев пишутся в
tgbot.log.