Первоначальная версия VidConf
This commit is contained in:
43
backend/services/livekit_tokens.py
Normal file
43
backend/services/livekit_tokens.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""Выдача LiveKit access-токенов участникам конференции."""
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from livekit import api
|
||||
|
||||
from core.config import get_settings
|
||||
|
||||
TOKEN_TTL = timedelta(hours=6)
|
||||
|
||||
|
||||
def create_room_access_token(
|
||||
*, room_name: str, identity: str, name: str, metadata: str | None = None
|
||||
) -> str:
|
||||
"""Создать JWT access-токен LiveKit для входа участника в комнату.
|
||||
|
||||
`identity` — произвольная строка identity, используемая webhook-
|
||||
обработчиками (`services.webhook_handlers`) для сопоставления треков с
|
||||
участником: `str(user_id)` для зарегистрированного пользователя,
|
||||
`guest:{guest_access.id}` для гостя (ADR-001, п.6). `name` — отображаемое
|
||||
имя, показывается клиентским UI. `metadata` — произвольная строка
|
||||
(JSON), доступная клиенту как `participant.metadata` — используется
|
||||
для аватара при выключенной камере; `None` (гость либо пользователь
|
||||
без аватара) — метаданные не выставляются вовсе.
|
||||
"""
|
||||
settings = get_settings()
|
||||
token = (
|
||||
api.AccessToken(settings.livekit_api_key, settings.livekit_api_secret)
|
||||
.with_identity(identity)
|
||||
.with_name(name)
|
||||
.with_grants(
|
||||
api.VideoGrants(
|
||||
room_join=True,
|
||||
room=room_name,
|
||||
can_publish=True,
|
||||
can_subscribe=True,
|
||||
)
|
||||
)
|
||||
.with_ttl(TOKEN_TTL)
|
||||
)
|
||||
if metadata is not None:
|
||||
token = token.with_metadata(metadata)
|
||||
return token.to_jwt()
|
||||
Reference in New Issue
Block a user