create.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from rest_framework.response import Response
  2. from django.contrib.auth import authenticate, get_user_model, login
  3. from django.core.exceptions import PermissionDenied, ValidationError
  4. from django.db import IntegrityError
  5. from django.utils.translation import ugettext as _
  6. from django.views.decorators.csrf import csrf_protect
  7. from misago.conf import settings
  8. from misago.core.exceptions import Banned
  9. from misago.users.bans import get_ip_ban
  10. from misago.users.serializers import RegisterUserSerializer
  11. from misago.users.registration import get_registration_result_json, send_welcome_email
  12. UserModel = get_user_model()
  13. @csrf_protect
  14. def create_endpoint(request):
  15. if settings.account_activation == 'closed':
  16. raise PermissionDenied(_("New users registrations are currently closed."))
  17. ban = get_ip_ban(request.user_ip, registration_only=True)
  18. if ban:
  19. raise Banned(ban)
  20. serializer = RegisterUserSerializer(
  21. data=request.data,
  22. context={'request': request},
  23. )
  24. serializer.is_valid(raise_exception=True)
  25. activation_kwargs = {}
  26. if settings.account_activation == 'user':
  27. activation_kwargs = {'requires_activation': UserModel.ACTIVATION_USER}
  28. elif settings.account_activation == 'admin':
  29. activation_kwargs = {'requires_activation': UserModel.ACTIVATION_ADMIN}
  30. try:
  31. new_user = UserModel.objects.create_user(
  32. serializer.validated_data['username'],
  33. serializer.validated_data['email'],
  34. serializer.validated_data['password'],
  35. joined_from_ip=request.user_ip,
  36. set_default_avatar=True,
  37. **activation_kwargs
  38. )
  39. except IntegrityError:
  40. return Response(
  41. {
  42. 'detail': _("Please try resubmitting the form."),
  43. },
  44. status=400,
  45. )
  46. send_welcome_email(request, new_user)
  47. if not new_user.requires_activation == 'none':
  48. authenticated_user = authenticate(
  49. username=new_user.email,
  50. password=serializer.validated_data['password'],
  51. )
  52. login(request, authenticated_user)
  53. return Response(get_registration_result_json(new_user))