Repository URL to install this package:
|
Version:
0.0.1 ▾
|
dj-kaos-users
/
utils.py
|
|---|
import random
import string
from getpass import getpass
from django.contrib.auth import get_user_model
def generate_random_string(
length, using_ascii_letters=True, using_digits=False, using_punctuation=False
):
"""
Example:
opting out for 50 symbol-long, [a-z][A-Z][0-9] string
would yield log_2((26+26+50)^50) ~= 334 bit strength.
"""
symbols = []
if using_ascii_letters:
symbols += string.ascii_letters
if using_digits:
symbols += string.digits
if using_punctuation:
all_punctuation = set(string.punctuation)
# These symbols can cause issues in environment variables
unsuitable = {"'", '"', "\\", "$"}
suitable = all_punctuation.difference(unsuitable)
symbols += "".join(suitable)
return "".join([random.SystemRandom().choice(symbols) for _ in range(length)])
def generate_random_password():
return generate_random_string(16, using_ascii_letters=True, using_digits=True)
def print_account(username, password=None):
# print_args = ("Username:", user.username,)
# if password is not None:
# print_args = (*print_args, "Password:", password)
# print(*print_args)
print("Username:", username, "Password:", password)
def update_or_create_user(username, password=None, random_pass=False, defaults=None):
User = get_user_model()
if defaults is None:
defaults = {}
user, created = User.objects.update_or_create(
username=username,
defaults=defaults,
)
if created:
if not password:
if random_pass:
password = generate_random_password()
else:
password = getpass(f"{username}'s password: ")
user.set_password(password)
user.save()
if created and random_pass:
print_account(username, password)
return user