mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import argparse
 | 
						|
from typing import Any
 | 
						|
 | 
						|
from django.core.exceptions import ValidationError
 | 
						|
from django.core.management.base import CommandError
 | 
						|
from typing_extensions import override
 | 
						|
 | 
						|
from zerver.actions.create_realm import do_create_realm
 | 
						|
from zerver.actions.create_user import do_create_user
 | 
						|
from zerver.forms import check_subdomain_available
 | 
						|
from zerver.lib.management import ZulipBaseCommand
 | 
						|
from zerver.models import UserProfile
 | 
						|
 | 
						|
 | 
						|
class Command(ZulipBaseCommand):
 | 
						|
    help = """\
 | 
						|
Create a new Zulip organization (realm) via the command line.
 | 
						|
 | 
						|
We recommend `./manage.py generate_realm_creation_link` for most
 | 
						|
users, for several reasons:
 | 
						|
 | 
						|
* Has a more user-friendly web flow for account creation.
 | 
						|
* Manages passwords in a more natural way.
 | 
						|
* Automatically logs the user in during account creation.
 | 
						|
 | 
						|
This management command is available as an alternative for situations
 | 
						|
where one wants to script the realm creation process.
 | 
						|
 | 
						|
Since every Zulip realm must have an owner, this command creates the
 | 
						|
initial organization owner user for the new realm, using the same
 | 
						|
workflow as `./manage.py create_user`.
 | 
						|
"""
 | 
						|
 | 
						|
    @override
 | 
						|
    def add_arguments(self, parser: argparse.ArgumentParser) -> None:
 | 
						|
        parser.add_argument("realm_name", help="Name for the new organization")
 | 
						|
        parser.add_argument(
 | 
						|
            "--string-id",
 | 
						|
            help="Subdomain for the new organization. Empty if root domain.",
 | 
						|
            default="",
 | 
						|
        )
 | 
						|
        parser.add_argument(
 | 
						|
            "--allow-reserved-subdomain",
 | 
						|
            action="store_true",
 | 
						|
            help="Allow use of reserved subdomains",
 | 
						|
        )
 | 
						|
        self.add_create_user_args(parser)
 | 
						|
 | 
						|
    @override
 | 
						|
    def handle(self, *args: Any, **options: Any) -> None:
 | 
						|
        realm_name = options["realm_name"]
 | 
						|
        string_id = options["string_id"]
 | 
						|
        allow_reserved_subdomain = options["allow_reserved_subdomain"]
 | 
						|
 | 
						|
        try:
 | 
						|
            check_subdomain_available(string_id, allow_reserved_subdomain)
 | 
						|
        except ValidationError as error:
 | 
						|
            raise CommandError(error.message)
 | 
						|
 | 
						|
        create_user_params = self.get_create_user_params(options)
 | 
						|
 | 
						|
        try:
 | 
						|
            realm = do_create_realm(string_id=string_id, name=realm_name)
 | 
						|
        except AssertionError as e:
 | 
						|
            raise CommandError(str(e))
 | 
						|
 | 
						|
        do_create_user(
 | 
						|
            create_user_params.email,
 | 
						|
            create_user_params.password,
 | 
						|
            realm,
 | 
						|
            create_user_params.full_name,
 | 
						|
            # Explicitly set tos_version=-1. This means that users
 | 
						|
            # created via this mechanism would be prompted to set
 | 
						|
            # the email_address_visibility setting on first login.
 | 
						|
            # For servers that have configured Terms of Service,
 | 
						|
            # users will also be prompted to accept the Terms of
 | 
						|
            # Service on first login.
 | 
						|
            role=UserProfile.ROLE_REALM_OWNER,
 | 
						|
            realm_creation=True,
 | 
						|
            tos_version=UserProfile.TOS_VERSION_BEFORE_FIRST_LOGIN,
 | 
						|
            acting_user=None,
 | 
						|
        )
 |