"""
crate_anon/crateweb/core/management/commands/ensuresuperuser.py
===============================================================================
Copyright (C) 2015, University of Cambridge, Department of Psychiatry.
Created by Rudolf Cardinal (rnc1001@cam.ac.uk).
This file is part of CRATE.
CRATE is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
CRATE is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with CRATE. If not, see <https://www.gnu.org/licenses/>.
===============================================================================
"""
import os
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand, CommandError
[docs]class Command(BaseCommand):
# Like the 'createsuperuser' command but:
# * Non-interactive
# * Uses environment variables not arguments
# * Doesn't raise an exception if the user already exists
#
# Unfortunately the 'createsuperuser' command isn't written in a way that
# makes it easily extendable
help = (
"Creates an admin user in the default database if it doesn't "
"already exist"
)
[docs] def handle(self, *args, **options):
User = get_user_model()
# We just support the default names for a user's attributes for now
username = os.environ.get("DJANGO_SUPERUSER_USERNAME")
if username is None:
raise CommandError("You must set DJANGO_SUPERUSER_USERNAME")
password = os.environ.get("DJANGO_SUPERUSER_PASSWORD")
if password is None:
raise CommandError("You must set DJANGO_SUPERUSER_PASSWORD")
email = os.environ.get("DJANGO_SUPERUSER_EMAIL") or ""
user, created = User.objects.get_or_create(username=username)
user.is_superuser = True
user.is_staff = True
user.set_password(password)
user.email = email
user.save()
if options["verbosity"] >= 1:
if created:
self.stdout.write("Superuser created successfully.")
else:
self.stdout.write("Superuser updated successfully.")