create.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from rest_framework import status
  2. from rest_framework.response import Response
  3. from django.contrib.auth import authenticate, get_user_model, login
  4. from django.core.exceptions import PermissionDenied, ValidationError
  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.mail import mail_user
  9. from misago.users import captcha
  10. from misago.users.forms.register import RegisterForm
  11. from misago.users.tokens import make_activation_token
  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. form = RegisterForm(request.data, request=request)
  18. try:
  19. captcha.test_request(request)
  20. except ValidationError as e:
  21. form.add_error('captcha', e)
  22. if not form.is_valid():
  23. return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
  24. activation_kwargs = {}
  25. if settings.account_activation == 'user':
  26. activation_kwargs = {
  27. 'requires_activation': UserModel.ACTIVATION_USER
  28. }
  29. elif settings.account_activation == 'admin':
  30. activation_kwargs = {
  31. 'requires_activation': UserModel.ACTIVATION_ADMIN
  32. }
  33. new_user = UserModel.objects.create_user(
  34. form.cleaned_data['username'],
  35. form.cleaned_data['email'],
  36. form.cleaned_data['password'],
  37. joined_from_ip=request.user_ip,
  38. set_default_avatar=True,
  39. **activation_kwargs
  40. )
  41. mail_subject = _("Welcome on %(forum_name)s forums!")
  42. mail_subject = mail_subject % {'forum_name': settings.forum_name}
  43. if settings.account_activation == 'none':
  44. authenticated_user = authenticate(
  45. username=new_user.email,
  46. password=form.cleaned_data['password'])
  47. login(request, authenticated_user)
  48. mail_user(request, new_user, mail_subject,
  49. 'misago/emails/register/complete')
  50. return Response({
  51. 'activation': 'active',
  52. 'username': new_user.username,
  53. 'email': new_user.email
  54. })
  55. else:
  56. activation_token = make_activation_token(new_user)
  57. activation_by_admin = new_user.requires_activation_by_admin
  58. activation_by_user = new_user.requires_activation_by_user
  59. mail_user(
  60. request, new_user, mail_subject,
  61. 'misago/emails/register/inactive',
  62. {
  63. 'activation_token': activation_token,
  64. 'activation_by_admin': activation_by_admin,
  65. 'activation_by_user': activation_by_user,
  66. })
  67. if activation_by_admin:
  68. activation_method = 'admin'
  69. else:
  70. activation_method = 'user'
  71. return Response({
  72. 'activation': activation_method,
  73. 'username': new_user.username,
  74. 'email': new_user.email
  75. })