From 932a20fd175774c29e55a173546d53a70710225e Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Tue, 11 Jan 2022 15:08:27 +0100 Subject: [PATCH] Add a management command to create an admin --- shared/management/__init__.py | 0 shared/management/commands/__init__.py | 0 shared/management/commands/createadmin.py | 35 +++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 shared/management/__init__.py create mode 100644 shared/management/commands/__init__.py create mode 100644 shared/management/commands/createadmin.py diff --git a/shared/management/__init__.py b/shared/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/shared/management/commands/__init__.py b/shared/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/shared/management/commands/createadmin.py b/shared/management/commands/createadmin.py new file mode 100644 index 0000000..fc4c515 --- /dev/null +++ b/shared/management/commands/createadmin.py @@ -0,0 +1,35 @@ +from django.contrib.auth import get_user_model +from django.contrib.auth.hashers import make_password +from django.contrib.auth.models import Permission +from django.core.management.base import BaseCommand, CommandError + +User = get_user_model() + + +class Command(BaseCommand): + help = "Creates an administrator role with the specified credentials" + + def add_arguments(self, parser): + # Credentials + parser.add_argument("base_username", type=str, help="Username") + parser.add_argument("password", type=str, help="Password") + parser.add_argument("full_name", nargs="?", type=str, help="Full name") + + def handle(self, *args, **kwargs): + base_username = kwargs["base_username"] + password = kwargs["password"] + + user, created = User.objects.get_or_create(username=f"pwd__{base_username}") + + if not created: + raise CommandError("Un utilisateur avec ce nom existe déjà") + + user.is_staff = True + user.password = make_password(password) + + user.full_name = kwargs["full_name"] or "" + + user.save() + + Permission.objects.get(codename="election_admin").user_set.add(user) + Permission.objects.get(codename="faq_admin").user_set.add(user)