Fix Jitsi client issues and create typed meeting data

- Remove 'transcription': True from JWT features in _generate_jwt
- Replace int(time.time()) with generate_uuid4() for room naming to avoid conflicts
- Replace datetime.utcnow() with datetime.now(tz=timezone.utc) for proper timezone handling
- Create JitsiMeetingData(MeetingData) class with typed extra_data properties
- Update PLATFORM_NAME = VideoPlatform.JITSI to use enum
- Update create_meeting to return JitsiMeetingData instance with proper typing
- Fix get_room_sessions mock to use timezone-aware datetime
- Export JitsiMeetingData from jitsi module

Addresses PR feedback points 4, 5, 6, 10: remove transcription features, use UUID,
proper datetime handling, and typed meeting data
This commit is contained in:
2025-09-02 17:44:04 -06:00
parent 2d2c23f7cc
commit 51229a1790
2 changed files with 28 additions and 11 deletions

View File

@@ -1,3 +1,3 @@
from .client import JitsiClient
from .client import JitsiClient, JitsiMeetingData
__all__ = ["JitsiClient"]
__all__ = ["JitsiClient", "JitsiMeetingData"]

View File

@@ -1,22 +1,40 @@
import hmac
import time
from datetime import datetime
from datetime import datetime, timezone
from hashlib import sha256
from typing import Any, Dict, Optional
import jwt
from reflector.db.rooms import Room
from reflector.db.rooms import Room, VideoPlatform
from reflector.settings import settings
from reflector.utils import generate_uuid4
from ..base import MeetingData, VideoPlatformClient
class JitsiMeetingData(MeetingData):
"""Jitsi-specific meeting data with typed extra_data."""
@property
def user_jwt(self) -> str:
"""JWT token for regular users."""
return self.extra_data.get("user_jwt", "")
@property
def host_jwt(self) -> str:
"""JWT token for moderators."""
return self.extra_data.get("host_jwt", "")
@property
def domain(self) -> str:
"""Jitsi domain."""
return self.extra_data.get("domain", "")
class JitsiClient(VideoPlatformClient):
"""Jitsi Meet video platform implementation."""
PLATFORM_NAME = "jitsi"
PLATFORM_NAME = VideoPlatform.JITSI
def _generate_jwt(self, room: str, moderator: bool, exp: datetime) -> str:
"""Generate JWT token for Jitsi Meet room access."""
@@ -37,7 +55,6 @@ class JitsiClient(VideoPlatformClient):
"features": {
"recording": True,
"livestreaming": False,
"transcription": True,
},
},
}
@@ -46,10 +63,10 @@ class JitsiClient(VideoPlatformClient):
async def create_meeting(
self, room_name_prefix: str, end_date: datetime, room: Room
) -> MeetingData:
) -> JitsiMeetingData:
"""Create a Jitsi Meet room with JWT authentication."""
# Generate unique room name
jitsi_room = f"reflector-{room.name}-{int(time.time())}"
jitsi_room = f"reflector-{room.name}-{generate_uuid4()}"
# Generate JWT tokens
user_jwt = self._generate_jwt(room=jitsi_room, moderator=False, exp=end_date)
@@ -59,7 +76,7 @@ class JitsiClient(VideoPlatformClient):
room_url = f"https://{settings.JITSI_DOMAIN}/{jitsi_room}?jwt={user_jwt}"
host_room_url = f"https://{settings.JITSI_DOMAIN}/{jitsi_room}?jwt={host_jwt}"
return MeetingData(
return JitsiMeetingData(
meeting_id=generate_uuid4(),
room_name=jitsi_room,
room_url=room_url,
@@ -79,7 +96,7 @@ class JitsiClient(VideoPlatformClient):
"sessions": [
{
"sessionId": generate_uuid4(),
"startTime": datetime.utcnow().isoformat(),
"startTime": datetime.now(tz=timezone.utc).isoformat(),
"participants": [],
"isActive": True,
}