import getpass import os from django.contrib.auth.models import User from django.contrib.auth.password_validation import validate_password from django.core.management.base import BaseCommand, CommandError from django.db import transaction from finance.models import Membership, Organization class Command(BaseCommand): help = "Create the initial organization administrator without a default password" def add_arguments(self, parser): parser.add_argument("--username", required=True) parser.add_argument("--organization", required=True) def handle(self, *args, **options): username = options["username"] if User.objects.filter(username=username).exists(): raise CommandError("Username already exists; no changes made") password = os.environ.get("BOOTSTRAP_PASSWORD") or getpass.getpass("Administrator password: ") validate_password(password, User(username=username)) with transaction.atomic(): org = Organization.objects.create(name=options["organization"]) user = User.objects.create_user(username=username, password=password) Membership.objects.create(user=user, organization=org, role="admin") self.stdout.write("Administrator created")