demo-orgs: Check owner email state when changing subdomain.

Enforce checking the demo organization owner delivery email on
the server-side when converting the organization to a permanent
organization via changing the subdomain.
This commit is contained in:
Lauryn Menard
2025-05-15 18:17:05 +02:00
committed by Tim Abbott
parent eec8045b6b
commit c9592c62f8
3 changed files with 28 additions and 4 deletions

View File

@@ -0,0 +1,13 @@
from django.utils.translation import gettext as _
from zerver.lib.exceptions import JsonableError
from zerver.models.realms import Realm
def check_demo_organization_has_set_email(realm: Realm) -> None:
# This should be called after checking that the realm has
# a demo_organization_scheduled_deletion_date set.
assert realm.demo_organization_scheduled_deletion_date is not None
human_owner_emails = set(realm.get_human_owner_users().values_list("delivery_email", flat=True))
if "" in human_owner_emails:
raise JsonableError(_("Configure owner account email address."))

View File

@@ -255,11 +255,22 @@ class RealmTest(ZulipTestCase):
result = self.client_patch("/json/realm", data)
self.assert_json_error(result, "Must be a demo organization.")
data = dict(string_id="lear")
self.login("desdemona")
realm = get_realm("zulip")
realm.demo_organization_scheduled_deletion_date = timezone_now() + timedelta(days=30)
realm.save()
# Demo organization owner must have added an email before converting.
desdemona = self.example_user("desdemona")
desdemona.delivery_email = ""
desdemona.save()
result = self.client_patch("/json/realm", data)
self.assert_json_error(result, "Configure owner account email address.")
desdemona.delivery_email = "desdemona@zulip.com"
desdemona.save()
# Subdomain must be available to convert demo organization.
data = dict(string_id="lear")
result = self.client_patch("/json/realm", data)
self.assert_json_error(
result, "Subdomain is already in use. Please choose a different one."

View File

@@ -30,6 +30,7 @@ from zerver.actions.realm_settings import (
)
from zerver.decorator import require_realm_admin, require_realm_owner
from zerver.forms import check_subdomain_available as check_subdomain
from zerver.lib.demo_organizations import check_demo_organization_has_set_email
from zerver.lib.exceptions import JsonableError, OrganizationOwnerRequiredError
from zerver.lib.i18n import get_available_language_codes
from zerver.lib.response import json_success
@@ -496,10 +497,9 @@ def update_realm(
if string_id is not None:
if not user_profile.is_realm_owner:
raise OrganizationOwnerRequiredError
if realm.demo_organization_scheduled_deletion_date is None:
raise JsonableError(_("Must be a demo organization."))
check_demo_organization_has_set_email(realm)
try:
check_subdomain(string_id)
except ValidationError as err: