import os from django.contrib.auth.password_validation import validate_password from django.core.exceptions import ValidationError from django.core.management.base import BaseCommand, CommandError from accounts.models import User, normalize_email class Command(BaseCommand): help = ( "Legt den ersten Admin aus ADMIN_EMAIL/ADMIN_PASSWORD an, falls diese E-Mail noch kein Konto hat. " "Bestehende Konten werden nie verändert." ) def handle(self, *args, **options): email = normalize_email(os.environ.get("ADMIN_EMAIL", "")) password = os.environ.get("ADMIN_PASSWORD", "") name = os.environ.get("ADMIN_NAME", "").strip() or "Admin" if not email: if not User.objects.filter(role=User.Role.ADMIN).exists(): self.stderr.write("Warnung: Es gibt noch keinen Admin. Setze ADMIN_EMAIL und ADMIN_PASSWORD in .env.") return if User.objects.filter(email=email).exists(): return if not password: raise CommandError("ADMIN_EMAIL ist gesetzt, aber ADMIN_PASSWORD fehlt.") try: validate_password(password) except ValidationError as error: raise CommandError("ADMIN_PASSWORD ist zu schwach: " + " ".join(error.messages)) from error User.objects.create_admin(email=email, password=password, display_name=name) self.stdout.write(f"Admin {email} angelegt. ADMIN_PASSWORD kann jetzt aus .env entfernt werden.")