gnm_deliverables/management/commands/create_logs_user.py (33 lines of code) (raw):
from django.core.management.base import BaseCommand
import base64
import re
from django.contrib.auth.models import User
class Command(BaseCommand):
"""
management command that will create a user with the given name in the django system and give it a randomised password
"""
help = "Create a user with the given name for the purposes of sending log updates"
def add_arguments(self, parser):
parser.add_argument("name", type=str, help="user name to create")
parser.add_argument("-r","--rotate", nargs='?', type=bool, default=False,
help="specify `-r true` to rotate (i.e. change to a new one) the password of the existing user")
def genpwd(self):
with open("/dev/urandom","rb") as f:
raw_bytes = f.read(12)
pre_string = base64.b64encode(raw_bytes).decode("UTF-8")
return re.sub(r'[^\w\d]', "", pre_string)
def handle(self, *args, **options):
if "name" not in options:
print("You must specify the username to create with --name")
try:
u = User.objects.get(username=options["name"])
if options["rotate"]:
#rotate the password
pw = self.genpwd()
u.set_password(pw)
u.save()
print("Updated password for {0} to {1}. This password won't be shown again, so make sure you make a note of it!".format(options["name"], pw))
else:
print("User {0} already exists".format(options["name"]))
except User.DoesNotExist:
newuser = User(username=options["name"])
pw = self.genpwd()
newuser.set_password(pw)
newuser.save()
print("Create user {0} with password {1}. This password won't be shown again, so make sure you make a note of it!".format(options["name"], pw))