feat(auth): проверка устройств на входе — запрос доступа и превью камеры

Отключаемый модуль (instance_settings.device_check, дефолт выключен):
запрос доступа к камере/микрофону на LoginPage и в карточке "Как вас
зовут?" (JoinPage), живое зеркальное превью и кнопки вкл/выкл камеры и
микрофона там же. На JoinPage кнопки определяют, с чем гость войдёт в
конференцию (RoomPage.LiveKitRoom audio/video вместо жёстких false) —
на LoginPage только пре-авторизуют разрешение, без UI (карточка ведёт
в лобби, применить выбор некуда). Вход в комнату по умолчанию, как и
раньше, с выключенными микрофоном/камерой.

Публичный GET /api/v1/public/settings отдаёт флаг модуля обеим
страницам до аутентификации.
This commit is contained in:
2026-08-09 18:09:10 +03:00
parent ba01548088
commit 7ee68b17ee
19 changed files with 713 additions and 7 deletions

18
backend/schemas/public.py Normal file
View File

@@ -0,0 +1,18 @@
"""Схемы публичного эндпоинта настроек клиента (`GET /public/settings`)."""
from pydantic import BaseModel
class PublicSettingsOut(BaseModel):
"""Настройки инстанса, нужные клиенту ДО аутентификации.
Общая точка для флагов, которые должны быть на руках у страницы логина
и гостевой карточки входа (`LoginPage`/`JoinPage`) — обе публичные,
`GET /admin/settings` им недоступен (только для админа). Отдельно от
`GET /auth/registration-options`: тот про опции конкретно карточки
регистрации, а не про настройки инстанса в целом (сессия 33).
"""
# Проверка устройств на входе (сессия 33) — см.
# `core/plugins/config.py::InstanceConfig.device_check_enabled`.
device_check_enabled: bool