Gallery-Archivist/backend/api/user/management/commands/createadmin.py

46 lines
1.8 KiB
Python

import os
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from api.user.models import UserProfile
class Command(BaseCommand):
"""
Creates an admin user non-interactively if it doesn't exist.
Reads credentials from environment variables:
- DJANGO_SUPERUSER_USERNAME
- DJANGO_SUPERUSER_PASSWORD
- DJANGO_SUPERUSER_EMAIL
"""
help = "Creates a superuser non-interactively if it does not exist."
def handle(self, *args, **options):
User = get_user_model()
username = os.environ.get("DJANGO_SUPERUSER_USERNAME")
password = os.environ.get("DJANGO_SUPERUSER_PASSWORD")
email = os.environ.get("DJANGO_SUPERUSER_EMAIL")
if not username or not password or not email:
self.stdout.write(
self.style.WARNING(
"Skipping superuser creation: DJANGO_SUPERUSER_USERNAME, "
"DJANGO_SUPERUSER_PASSWORD, and DJANGO_SUPERUSER_EMAIL must be set."
)
)
return # Exit the command gracefully
if not User.objects.filter(username=username).exists():
self.stdout.write(self.style.SUCCESS(f"Creating superuser: {username}"))
try:
User.objects.create_superuser(
username=username, email=email, password=password
)
UserProfile.objects.create(user=User.objects.get(username=username))
self.stdout.write(self.style.SUCCESS("Superuser created successfully."))
except Exception as e:
self.stderr.write(self.style.ERROR(f"Error creating superuser: {e}"))
else:
self.stdout.write(
self.style.NOTICE(f"Superuser '{username}' already exists.")
)