68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
# -*- encoding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
from django.contrib.auth.models import BaseUserManager
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class DiscordUserOAuth2Manager(BaseUserManager):
|
|
"""
|
|
Manager for the DiscordUser class.
|
|
"""
|
|
|
|
def create_user(self, discord_user_data: dict, **extra_fields):
|
|
"""
|
|
Create a user from their discord data.
|
|
|
|
Parameters
|
|
----------
|
|
discord_user_data : dict
|
|
The raw discord user data
|
|
|
|
Returns
|
|
-------
|
|
DiscordUser
|
|
The newly created DiscordUser instance.
|
|
"""
|
|
|
|
log.info("creating new user")
|
|
|
|
discord_user_data.update(extra_fields)
|
|
user = discord_user_data # shorthand
|
|
|
|
return self.create(
|
|
id=user["id"],
|
|
username=user["username"],
|
|
global_name=user["global_name"],
|
|
avatar=user["avatar"],
|
|
public_flags=user["public_flags"],
|
|
flags=user["flags"],
|
|
locale=user["locale"],
|
|
mfa_enabled=user["mfa_enabled"],
|
|
access_token=user["access_token"],
|
|
token_expires=user["token_expires"],
|
|
refresh_token=user["refresh_token"],
|
|
**extra_fields
|
|
)
|
|
|
|
def create_superuser(self, discord_user_data: dict, **extra_fields):
|
|
"""
|
|
Create a user from their discord data, but also make them a superuser.
|
|
"""
|
|
|
|
log.info("creating new superuser")
|
|
|
|
extra_fields.setdefault("is_staff", True)
|
|
extra_fields.setdefault("is_superuser", True)
|
|
extra_fields.setdefault("is_active", True)
|
|
|
|
if not extra_fields.get("is_staff"):
|
|
raise ValueError("Superuser must have is_staff=True")
|
|
|
|
if not extra_fields.get("is_superuser"):
|
|
raise ValueError("Superuser must have is_staff=True")
|
|
|
|
return self.create_user(discord_user_data, **extra_fields)
|