fix: Guarantee admin user creation with fallback credentials admin / adminpassword during production docker startup
This commit is contained in:
Binary file not shown.
@@ -5,38 +5,68 @@ from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Erstellt einen initialen Admin-Benutzer (Superuser) für das Portal."
|
||||
help = "Erstellt einen initialen Admin-Benutzer (Superuser) sowie Basis-Qualifikationen für das Portal."
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('--username', type=str, default=os.getenv('ADMIN_USERNAME', 'admin'), help='Benutzername für den Admin')
|
||||
parser.add_argument('--email', type=str, default=os.getenv('ADMIN_EMAIL', 'admin@beispiel.de'), help='E-Mail-Adresse für den Admin')
|
||||
parser.add_argument('--password', type=str, default=os.getenv('ADMIN_PASSWORD', ''), help='Passwort für den Admin')
|
||||
parser.add_argument('--email', type=str, default=os.getenv('ADMIN_EMAIL', 'admin@local.host'), help='E-Mail-Adresse für den Admin')
|
||||
parser.add_argument('--password', type=str, default=os.getenv('ADMIN_PASSWORD', 'adminpassword'), help='Passwort für den Admin')
|
||||
|
||||
def handle(self, *args, **options):
|
||||
username = options['username']
|
||||
email = options['email']
|
||||
password = options['password']
|
||||
|
||||
if not password:
|
||||
self.stderr.write(self.style.ERROR("Fehler: Bitte gib ein Passwort mit --password an oder setze ADMIN_PASSWORD als Umgebungsvariable."))
|
||||
return
|
||||
username = options['username'] or os.getenv('ADMIN_USERNAME', 'admin')
|
||||
email = options['email'] or os.getenv('ADMIN_EMAIL', 'admin@local.host')
|
||||
password = options['password'] or os.getenv('ADMIN_PASSWORD', 'adminpassword')
|
||||
|
||||
# 1. Admin User
|
||||
user, created = User.objects.get_or_create(
|
||||
username=username,
|
||||
defaults={'email': email}
|
||||
)
|
||||
|
||||
user.email = email
|
||||
user.set_password(password)
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.is_admin_user = True
|
||||
user.is_approved = True
|
||||
user.is_email_verified = True
|
||||
user.is_active = True
|
||||
user.save()
|
||||
|
||||
if created:
|
||||
self.stdout.write(self.style.SUCCESS(f"✅ Initialer Admin '{username}' ({email}) wurde erfolgreich erstellt!"))
|
||||
user.set_password(password)
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.is_admin_user = True
|
||||
user.is_approved = True
|
||||
user.is_email_verified = True
|
||||
user.is_active = True
|
||||
user.save()
|
||||
self.stdout.write(self.style.SUCCESS(f"✅ Initialer Admin '{username}' ({email}) wurde erstellt! Passwort: {password}"))
|
||||
else:
|
||||
self.stdout.write(self.style.SUCCESS(f"✅ Passwort & Admin-Rechte für bestehenden Benutzer '{username}' ({email}) wurden aktualisiert!"))
|
||||
changed = False
|
||||
if not user.is_superuser or not user.is_admin_user or not user.is_approved or not user.is_active:
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.is_admin_user = True
|
||||
user.is_approved = True
|
||||
user.is_active = True
|
||||
changed = True
|
||||
|
||||
if os.getenv('ADMIN_PASSWORD'):
|
||||
user.set_password(password)
|
||||
changed = True
|
||||
|
||||
if changed:
|
||||
user.save()
|
||||
self.stdout.write(self.style.SUCCESS(f"✅ Admin-Rechte für bestehenden Benutzer '{username}' wurden aktualisiert."))
|
||||
else:
|
||||
self.stdout.write(self.style.SUCCESS(f"ℹ️ Admin-Benutzer '{username}' existiert bereits."))
|
||||
|
||||
# 2. Initial Base Skills
|
||||
try:
|
||||
from apps.events.models import Skill
|
||||
Skill.objects.get_or_create(
|
||||
name="Ersthelfer",
|
||||
defaults={'description': 'Gültiger Erste-Hilfe-Schein', 'color': '#ef4444'}
|
||||
)
|
||||
Skill.objects.get_or_create(
|
||||
name="Bar-Erfahrung",
|
||||
defaults={'description': 'Erfahrung an der Zapfanlage', 'color': '#3b82f6'}
|
||||
)
|
||||
Skill.objects.get_or_create(
|
||||
name="Führerschein B",
|
||||
defaults={'description': 'PKW / Transporter fahren', 'color': '#10b981'}
|
||||
)
|
||||
except Exception as e:
|
||||
self.stderr.write(self.style.WARNING(f"Hinweis zu Skills: {e}"))
|
||||
|
||||
Reference in New Issue
Block a user