diff --git a/zephyr/management/commands/create_user.py b/zephyr/management/commands/create_user.py new file mode 100644 index 0000000000..2595fc4f04 --- /dev/null +++ b/zephyr/management/commands/create_user.py @@ -0,0 +1,48 @@ +import sys + +from django.core.management.base import BaseCommand, CommandError +from django.core.exceptions import ValidationError +from django.db.utils import IntegrityError +from django.utils.timezone import now +from django.core import validators + +from zephyr.models import Realm, do_create_user +from zephyr.views import do_send_message +from zephyr.lib.initial_password import initial_password + +class Command(BaseCommand): + help = "Create the specified user with a default initial password." + + def handle(self, *args, **options): + try: + email, full_name = args + try: + validators.validate_email(email) + except ValidationError: + raise CommandError("Invalid email address.") + except ValueError: + if len(args) != 0: + raise CommandError("Either specify an email and full name" + \ + "as two parameters, or specify no parameters for" + \ + "interactive user creation.") + return 1 + else: + while True: + email = raw_input("Email: ") + try: + validators.validate_email(email) + break + except ValidationError: + print >> sys.stderr, "Invalid email address." + full_name = raw_input("Full name: ") + + try: + realm = Realm.objects.get(domain=email.split('@')[-1]) + except Realm.DoesNotExist: + raise CommandError("Realm does not exist.") + + try: + do_create_user(email, initial_password(email), realm, full_name, + email.split('@')[0]) + except IntegrityError: + raise CommandError("User already exists.")