30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
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")
|