feat(room): роль организатора в метаданных LiveKit-токена
Предварительная работа для очереди рук и принудительного мьюта (B1/B2): build_join кладёт is_organizer:true в метаданные токена организатора (создатель мгновенной конференции и владелец при обычном входе). Метаданные токена — только подсказка для UI (см. предупреждение в докстринге build_join), любое серверное действие организатора обязано перепроверяться по conference.owner_id в БД — так и сделано в mute_participant (B2). На фронте — общий парсер метаданных участника (lib/participantMetadata.ts, переиспользован в RoomParticipantTile вместо локальной копии) и хук useIsOrganizer (читает подсказку для локального участника через useLocalParticipant — вызывается только внутри LiveKitRoom).
This commit is contained in:
@@ -708,6 +708,38 @@ async def test_join_metadata_absent_for_user_without_avatar(
|
||||
assert "metadata" not in payload
|
||||
|
||||
|
||||
async def test_join_metadata_contains_is_organizer_for_owner(
|
||||
client: httpx.AsyncClient, db_session: AsyncSession
|
||||
) -> None:
|
||||
owner = await _make_user(db_session)
|
||||
conference = await _make_conference(db_session, owner_id=owner.id)
|
||||
await db_session.commit()
|
||||
|
||||
response = await client.post(
|
||||
f"/api/v1/conferences/{conference.id}/join", headers=_auth_headers(owner)
|
||||
)
|
||||
assert response.status_code == 200, response.text
|
||||
payload = _decode_livekit_token(response.json()["token"])
|
||||
metadata = json.loads(str(payload["metadata"]))
|
||||
assert metadata["is_organizer"] is True
|
||||
|
||||
|
||||
async def test_join_metadata_absent_is_organizer_for_non_owner(
|
||||
client: httpx.AsyncClient, db_session: AsyncSession
|
||||
) -> None:
|
||||
owner = await _make_user(db_session)
|
||||
other = await _make_user(db_session)
|
||||
conference = await _make_conference(db_session, owner_id=owner.id)
|
||||
await db_session.commit()
|
||||
|
||||
response = await client.post(
|
||||
f"/api/v1/conferences/{conference.id}/join", headers=_auth_headers(other)
|
||||
)
|
||||
assert response.status_code == 200, response.text
|
||||
payload = _decode_livekit_token(response.json()["token"])
|
||||
assert "metadata" not in payload
|
||||
|
||||
|
||||
async def test_guest_join_metadata_is_absent(
|
||||
client: httpx.AsyncClient, db_session: AsyncSession
|
||||
) -> None:
|
||||
|
||||
Reference in New Issue
Block a user