register.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.contrib import messages
  2. from django.contrib.auth import authenticate, get_user_model, login
  3. from django.http import Http404
  4. from django.shortcuts import get_object_or_404, redirect, render
  5. from django.utils.translation import ugettext as _
  6. from django.views.decorators.cache import never_cache
  7. from django.views.decorators.debug import sensitive_post_parameters
  8. from misago.conf import settings
  9. from misago.core.captcha import add_captcha_to_form
  10. from misago.core.mail import mail_user
  11. from misago.users.decorators import deny_authenticated, deny_banned_ips
  12. from misago.users.forms.register import RegisterForm
  13. from misago.users.models import (ACTIVATION_REQUIRED_USER,
  14. ACTIVATION_REQUIRED_ADMIN)
  15. from misago.users.tokens import make_activation_token
  16. def register_decorator(f):
  17. def decorator(request):
  18. if settings.account_activation == 'disabled':
  19. return register_disabled(request)
  20. else:
  21. return f(request)
  22. return decorator
  23. @sensitive_post_parameters("email", "password")
  24. @never_cache
  25. @deny_authenticated
  26. @deny_banned_ips
  27. @register_decorator
  28. def register(request):
  29. SecuredForm = add_captcha_to_form(RegisterForm, request)
  30. form = SecuredForm()
  31. if request.method == 'POST':
  32. form = SecuredForm(request.POST)
  33. if form.is_valid():
  34. activation_kwargs = {}
  35. if settings.account_activation == 'user':
  36. activation_kwargs = {
  37. 'requires_activation': ACTIVATION_REQUIRED_USER
  38. }
  39. elif settings.account_activation == 'admin':
  40. activation_kwargs = {
  41. 'requires_activation': ACTIVATION_REQUIRED_ADMIN
  42. }
  43. User = get_user_model()
  44. new_user = User.objects.create_user(form.cleaned_data['username'],
  45. form.cleaned_data['email'],
  46. form.cleaned_data['password'],
  47. set_default_avatar=True,
  48. **activation_kwargs)
  49. mail_subject = _("Welcome on %(forum_title)s forums!")
  50. mail_subject = mail_subject % {'forum_title': settings.forum_name}
  51. if settings.account_activation == 'none':
  52. authenticated_user = authenticate(
  53. username=new_user.email,
  54. password=form.cleaned_data['password'])
  55. login(request, authenticated_user)
  56. welcome_message = _("Welcome aboard, %(username)s!")
  57. welcome_message = welcome_message % {'username': new_user.username}
  58. messages.success(request, welcome_message)
  59. mail_user(request, new_user, mail_subject,
  60. 'misago/emails/register/complete')
  61. return redirect(settings.LOGIN_REDIRECT_URL)
  62. else:
  63. activation_token = make_activation_token(new_user)
  64. activation_by_admin = new_user.requires_activation_by_admin
  65. activation_by_user = new_user.requires_activation_by_user
  66. mail_user(
  67. request, new_user, mail_subject,
  68. 'misago/emails/register/inactive',
  69. {
  70. 'activation_token': activation_token,
  71. 'activation_by_admin': activation_by_admin,
  72. 'activation_by_user': activation_by_user,
  73. })
  74. request.session['registered_user'] = new_user.pk
  75. return redirect('misago:register_completed')
  76. return render(request, 'misago/register/form.html', {'form': form, 'testname': 'and<b>rzej'})
  77. def register_disabled(request):
  78. return render(request, 'misago/register/disabled.html')
  79. def register_completed(request):
  80. """
  81. If user needs to activate his account, we display him page with message
  82. """
  83. registered_user_pk = request.session.get('registered_user')
  84. if not registered_user_pk:
  85. raise Http404()
  86. registered_user = get_object_or_404(get_user_model().objects,
  87. pk=registered_user_pk)
  88. if not registered_user.requires_activation:
  89. return redirect('misago:index')
  90. activation_by_admin = registered_user.requires_activation_by_admin
  91. activation_by_user = registered_user.requires_activation_by_user
  92. return render(
  93. request,
  94. 'misago/register/completed.html',
  95. {
  96. 'activation_by_admin': activation_by_admin,
  97. 'activation_by_user': activation_by_user,
  98. 'registered_user': registered_user,
  99. })