Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dj-kaos-users / utils.py
Size: Mime:
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