mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	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:
		
				
					committed by
					
						
						Tim Abbott
					
				
			
			
				
	
			
			
			
						parent
						
							eec8045b6b
						
					
				
				
					commit
					c9592c62f8
				
			
							
								
								
									
										13
									
								
								zerver/lib/demo_organizations.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								zerver/lib/demo_organizations.py
									
									
									
									
									
										Normal 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."))
 | 
			
		||||
@@ -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."
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user