Files
fa-agent/finance/management/commands/bootstrap.py
T
2026-09-26 01:12:10 +08:00

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")