2020-12-27 13:03:07 +00:00
|
|
|
import typing as t
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
2020-07-13 11:30:18 +00:00
|
|
|
from django.contrib.auth import get_user_model
|
2020-09-27 06:42:01 +00:00
|
|
|
from django.core.exceptions import PermissionDenied
|
|
|
|
|
2020-07-13 11:30:18 +00:00
|
|
|
from . import app_settings
|
|
|
|
|
|
|
|
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
|
|
|
2020-12-27 13:03:07 +00:00
|
|
|
@dataclass
|
|
|
|
class CallbackContext:
|
|
|
|
"""Class for passing extra context to callbacks"""
|
|
|
|
|
|
|
|
url_kwargs: t.Dict[str, t.Any]
|
2020-12-28 12:27:23 +00:00
|
|
|
user: t.Optional[User] = None
|
2020-12-27 13:03:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
def get_user_queryset(queryset, context: CallbackContext):
|
2020-07-13 13:08:46 +00:00
|
|
|
custom_func = app_settings.GET_USER_QUERYSET_FUNC
|
2020-07-13 11:30:18 +00:00
|
|
|
if custom_func is not None:
|
2020-12-27 13:03:07 +00:00
|
|
|
return custom_func(queryset, context)
|
2020-07-13 11:30:18 +00:00
|
|
|
return queryset
|
2020-07-13 13:20:46 +00:00
|
|
|
|
|
|
|
|
2020-12-27 13:03:07 +00:00
|
|
|
def create_user(context: CallbackContext, *args, **kwargs):
|
2020-07-13 13:20:46 +00:00
|
|
|
custom_func = app_settings.CREATE_USER_FUNC
|
|
|
|
if custom_func is not None:
|
|
|
|
return custom_func(*args, **kwargs)
|
|
|
|
return User.objects.create_user(*args, **kwargs)
|
2020-09-27 06:42:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
def create_user_blocked(*args, **kwargs):
|
2020-11-14 15:04:41 +00:00
|
|
|
raise PermissionDenied("Signup is disabled for this server. Please refer to the README for more information.")
|