mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 14:03:30 +00:00
realm: Refactor VIDEO_CHAT_PROVIDERS to have all possible options.
Refactors Realm.VIDEO_CHAT_PROIVDERS to have all the possible options for video chat integrations, and use get_enabled_video_chat_providers to compute the enabled options for the realm. Prep for adding Zoom server to server video chat integration.
This commit is contained in:
committed by
Tim Abbott
parent
ef2f8c0796
commit
f13a1a48f7
@@ -354,7 +354,7 @@ def fetch_initial_state_data(
|
|||||||
# can be removed once there are no longer clients relying on it.
|
# can be removed once there are no longer clients relying on it.
|
||||||
state["realm_url"] = state["realm_uri"] = realm.url
|
state["realm_url"] = state["realm_uri"] = realm.url
|
||||||
state["realm_bot_domain"] = realm.get_bot_domain()
|
state["realm_bot_domain"] = realm.get_bot_domain()
|
||||||
state["realm_available_video_chat_providers"] = realm.VIDEO_CHAT_PROVIDERS
|
state["realm_available_video_chat_providers"] = realm.get_enabled_video_chat_providers()
|
||||||
state["settings_send_digest_emails"] = settings.SEND_DIGEST_EMAILS
|
state["settings_send_digest_emails"] = settings.SEND_DIGEST_EMAILS
|
||||||
|
|
||||||
state["realm_digest_emails_enabled"] = (
|
state["realm_digest_emails_enabled"] = (
|
||||||
|
|||||||
@@ -99,6 +99,11 @@ class OrgTypeDict(TypedDict):
|
|||||||
onboarding_zulip_guide_url: str | None
|
onboarding_zulip_guide_url: str | None
|
||||||
|
|
||||||
|
|
||||||
|
class VideoChatProviderDict(TypedDict):
|
||||||
|
name: str
|
||||||
|
id: int
|
||||||
|
|
||||||
|
|
||||||
class CommonPolicyEnum(IntEnum):
|
class CommonPolicyEnum(IntEnum):
|
||||||
MEMBERS_ONLY = 1
|
MEMBERS_ONLY = 1
|
||||||
ADMINS_ONLY = 2
|
ADMINS_ONLY = 2
|
||||||
@@ -554,7 +559,7 @@ class Realm(models.Model): # type: ignore[django-manager-missing] # django-stub
|
|||||||
UPLOAD_QUOTA_STANDARD_FREE = 50
|
UPLOAD_QUOTA_STANDARD_FREE = 50
|
||||||
custom_upload_quota_gb = models.IntegerField(null=True)
|
custom_upload_quota_gb = models.IntegerField(null=True)
|
||||||
|
|
||||||
VIDEO_CHAT_PROVIDERS = {
|
VIDEO_CHAT_PROVIDERS: dict[str, VideoChatProviderDict] = {
|
||||||
"disabled": {
|
"disabled": {
|
||||||
"name": "None",
|
"name": "None",
|
||||||
"id": 0,
|
"id": 0,
|
||||||
@@ -564,18 +569,15 @@ class Realm(models.Model): # type: ignore[django-manager-missing] # django-stub
|
|||||||
"id": 1,
|
"id": 1,
|
||||||
},
|
},
|
||||||
# ID 2 was used for the now-deleted Google Hangouts.
|
# ID 2 was used for the now-deleted Google Hangouts.
|
||||||
# ID 3 reserved for optional Zoom, see below.
|
"zoom": {
|
||||||
# ID 4 reserved for optional BigBlueButton, see below.
|
|
||||||
}
|
|
||||||
|
|
||||||
if settings.VIDEO_ZOOM_CLIENT_ID is not None and settings.VIDEO_ZOOM_CLIENT_SECRET is not None:
|
|
||||||
VIDEO_CHAT_PROVIDERS["zoom"] = {
|
|
||||||
"name": "Zoom",
|
"name": "Zoom",
|
||||||
"id": 3,
|
"id": 3,
|
||||||
}
|
},
|
||||||
|
"big_blue_button": {
|
||||||
if settings.BIG_BLUE_BUTTON_SECRET is not None and settings.BIG_BLUE_BUTTON_URL is not None:
|
"name": "BigBlueButton",
|
||||||
VIDEO_CHAT_PROVIDERS["big_blue_button"] = {"name": "BigBlueButton", "id": 4}
|
"id": 4,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
video_chat_provider = models.PositiveSmallIntegerField(
|
video_chat_provider = models.PositiveSmallIntegerField(
|
||||||
default=VIDEO_CHAT_PROVIDERS["jitsi_meet"]["id"]
|
default=VIDEO_CHAT_PROVIDERS["jitsi_meet"]["id"]
|
||||||
@@ -937,6 +939,20 @@ class Realm(models.Model): # type: ignore[django-manager-missing] # django-stub
|
|||||||
def get_bot_domain(self) -> str:
|
def get_bot_domain(self) -> str:
|
||||||
return get_fake_email_domain(self.host)
|
return get_fake_email_domain(self.host)
|
||||||
|
|
||||||
|
def get_enabled_video_chat_providers(self) -> dict[str, VideoChatProviderDict]:
|
||||||
|
enabled_video_chat_providers: dict[str, VideoChatProviderDict] = {}
|
||||||
|
for provider in self.VIDEO_CHAT_PROVIDERS:
|
||||||
|
if provider == "zoom" and (
|
||||||
|
settings.VIDEO_ZOOM_CLIENT_ID is None or settings.VIDEO_ZOOM_CLIENT_SECRET is None
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
if provider == "big_blue_button" and (
|
||||||
|
settings.BIG_BLUE_BUTTON_SECRET is None or settings.BIG_BLUE_BUTTON_URL is None
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
enabled_video_chat_providers[provider] = self.VIDEO_CHAT_PROVIDERS[provider]
|
||||||
|
return enabled_video_chat_providers
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def max_invites(self) -> int:
|
def max_invites(self) -> int:
|
||||||
if self._max_invites is None:
|
if self._max_invites is None:
|
||||||
|
|||||||
@@ -1023,23 +1023,43 @@ class RealmTest(ZulipTestCase):
|
|||||||
get_realm("zulip").video_chat_provider, Realm.VIDEO_CHAT_PROVIDERS["jitsi_meet"]["id"]
|
get_realm("zulip").video_chat_provider, Realm.VIDEO_CHAT_PROVIDERS["jitsi_meet"]["id"]
|
||||||
)
|
)
|
||||||
|
|
||||||
req = {
|
big_blue_button_provider_id = Realm.VIDEO_CHAT_PROVIDERS["big_blue_button"]["id"]
|
||||||
"video_chat_provider": orjson.dumps(
|
req = {"video_chat_provider": f"{big_blue_button_provider_id}"}
|
||||||
Realm.VIDEO_CHAT_PROVIDERS["big_blue_button"]["id"]
|
with self.settings(BIG_BLUE_BUTTON_SECRET=None):
|
||||||
).decode()
|
result = self.client_patch("/json/realm", req)
|
||||||
}
|
self.assert_json_error(
|
||||||
|
result, f"Invalid video_chat_provider {big_blue_button_provider_id}"
|
||||||
|
)
|
||||||
|
|
||||||
|
with self.settings(BIG_BLUE_BUTTON_URL=None):
|
||||||
|
result = self.client_patch("/json/realm", req)
|
||||||
|
self.assert_json_error(
|
||||||
|
result, f"Invalid video_chat_provider {big_blue_button_provider_id}"
|
||||||
|
)
|
||||||
|
|
||||||
result = self.client_patch("/json/realm", req)
|
result = self.client_patch("/json/realm", req)
|
||||||
self.assert_json_success(result)
|
self.assert_json_success(result)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
get_realm("zulip").video_chat_provider,
|
get_realm("zulip").video_chat_provider,
|
||||||
Realm.VIDEO_CHAT_PROVIDERS["big_blue_button"]["id"],
|
big_blue_button_provider_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
req = {
|
zoom_provider_id = Realm.VIDEO_CHAT_PROVIDERS["zoom"]["id"]
|
||||||
"video_chat_provider": orjson.dumps(Realm.VIDEO_CHAT_PROVIDERS["zoom"]["id"]).decode()
|
req = {"video_chat_provider": f"{zoom_provider_id}"}
|
||||||
}
|
with self.settings(VIDEO_ZOOM_CLIENT_ID=None):
|
||||||
|
result = self.client_patch("/json/realm", req)
|
||||||
|
self.assert_json_error(result, f"Invalid video_chat_provider {zoom_provider_id}")
|
||||||
|
|
||||||
|
with self.settings(VIDEO_ZOOM_CLIENT_SECRET=None):
|
||||||
|
result = self.client_patch("/json/realm", req)
|
||||||
|
self.assert_json_error(result, f"Invalid video_chat_provider {zoom_provider_id}")
|
||||||
|
|
||||||
result = self.client_patch("/json/realm", req)
|
result = self.client_patch("/json/realm", req)
|
||||||
self.assert_json_success(result)
|
self.assert_json_success(result)
|
||||||
|
self.assertEqual(
|
||||||
|
get_realm("zulip").video_chat_provider,
|
||||||
|
zoom_provider_id,
|
||||||
|
)
|
||||||
|
|
||||||
def test_data_deletion_schedule_when_deactivating_realm(self) -> None:
|
def test_data_deletion_schedule_when_deactivating_realm(self) -> None:
|
||||||
self.login("desdemona")
|
self.login("desdemona")
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ def update_realm(
|
|||||||
raise JsonableError(_("At least one authentication method must be enabled."))
|
raise JsonableError(_("At least one authentication method must be enabled."))
|
||||||
|
|
||||||
if video_chat_provider is not None and video_chat_provider not in {
|
if video_chat_provider is not None and video_chat_provider not in {
|
||||||
p["id"] for p in Realm.VIDEO_CHAT_PROVIDERS.values()
|
p["id"] for p in realm.get_enabled_video_chat_providers().values()
|
||||||
}:
|
}:
|
||||||
raise JsonableError(
|
raise JsonableError(
|
||||||
_("Invalid video_chat_provider {video_chat_provider}").format(
|
_("Invalid video_chat_provider {video_chat_provider}").format(
|
||||||
|
|||||||
Reference in New Issue
Block a user