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:
@@ -75,6 +75,7 @@ _MANAGED_KEYS = (
|
||||
"contact_email",
|
||||
"media_limits",
|
||||
"consent_policy",
|
||||
"device_check",
|
||||
)
|
||||
|
||||
|
||||
@@ -133,6 +134,7 @@ async def test_ensure_bootstrapped_imports_yaml_defaults(
|
||||
"contact_email",
|
||||
"media_limits",
|
||||
"consent_policy",
|
||||
"device_check",
|
||||
}
|
||||
cfg = await service.get()
|
||||
assert cfg.transcriber.provider == "faster_whisper_cpu"
|
||||
@@ -159,6 +161,9 @@ async def test_ensure_bootstrapped_imports_yaml_defaults(
|
||||
assert cfg.consent_required is False
|
||||
assert cfg.consent_policy_text != ""
|
||||
assert cfg.consent_policy_version == 1
|
||||
# Проверка устройств на входе (сессия 33) — выключена по умолчанию,
|
||||
# существующие инсталляции не должны молча начать спрашивать доступ.
|
||||
assert cfg.device_check_enabled is False
|
||||
|
||||
|
||||
async def test_ensure_bootstrapped_is_idempotent_and_keeps_admin_edits(
|
||||
@@ -193,6 +198,22 @@ async def test_update_hand_queue_enabled(
|
||||
assert cfg.hand_queue.enabled is True
|
||||
|
||||
|
||||
async def test_update_device_check_enabled(
|
||||
db_session: AsyncSession, clean_instance_settings: None
|
||||
) -> None:
|
||||
service = InstanceSettingsService(db_session)
|
||||
await service.ensure_bootstrapped(PLUGINS_YAML)
|
||||
|
||||
cfg = await service.update(SettingsUpdateIn(device_check_enabled=True))
|
||||
assert cfg.device_check_enabled is True
|
||||
|
||||
cfg = await service.get()
|
||||
assert cfg.device_check_enabled is True
|
||||
|
||||
cfg = await service.update(SettingsUpdateIn(device_check_enabled=False))
|
||||
assert cfg.device_check_enabled is False
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("preset", "chat_enabled", "ai_enabled", "ai_level"),
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user