123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- from django.contrib import messages
- from django.contrib.auth import authenticate, get_user_model, login
- from django.core.exceptions import PermissionDenied
- from django.http import Http404
- from django.shortcuts import get_object_or_404, redirect, render
- from django.utils import timezone
- from django.utils.formats import date_format
- from django.utils.translation import ugettext as _
- from django.views.decorators.cache import never_cache
- from django.views.decorators.debug import sensitive_post_parameters
- from misago.conf import settings
- from misago.core.mail import mail_user
- from misago.users.bans import ban_ip
- from misago.users.decorators import deny_authenticated, deny_banned_ips
- from misago.users.forms.register import RegisterForm
- from misago.users.models import (ACTIVATION_REQUIRED_USER,
- ACTIVATION_REQUIRED_ADMIN)
- from misago.users.tokens import make_activation_token
- from misago.users.validators import validate_new_registration
- def register_decorator(f):
- def decorator(request):
- if settings.account_activation == 'disabled':
- return register_disabled(request)
- else:
- return f(request)
- return decorator
- @sensitive_post_parameters("email", "password")
- @never_cache
- @deny_authenticated
- @deny_banned_ips
- @register_decorator
- def register(request):
- SecuredForm = add_captcha_to_form(RegisterForm, request)
- form = SecuredForm()
- if request.method == 'POST':
- form = SecuredForm(request.POST)
- if form.is_valid():
- try:
- validate_new_registration(
- request.user.ip,
- form.cleaned_data['username'],
- form.cleaned_data['email'])
- except PermissionDenied as e:
- staff_message = _("This ban was automatically imposed on "
- "%(date)s due to denied register attempt.")
- message_formats = {'date': date_format(timezone.now())}
- staff_message = staff_message % message_formats
- ban_ip(request.user.ip,
- staff_message=staff_message,
- length={'days': 1})
- raise e
- activation_kwargs = {}
- if settings.account_activation == 'user':
- activation_kwargs = {
- 'requires_activation': ACTIVATION_REQUIRED_USER
- }
- elif settings.account_activation == 'admin':
- activation_kwargs = {
- 'requires_activation': ACTIVATION_REQUIRED_ADMIN
- }
- User = get_user_model()
- new_user = User.objects.create_user(form.cleaned_data['username'],
- form.cleaned_data['email'],
- form.cleaned_data['password'],
- set_default_avatar=True,
- **activation_kwargs)
- mail_subject = _("Welcome on %(forum_title)s forums!")
- mail_subject = mail_subject % {'forum_title': settings.forum_name}
- if settings.account_activation == 'none':
- authenticated_user = authenticate(
- username=new_user.email,
- password=form.cleaned_data['password'])
- login(request, authenticated_user)
- welcome_message = _("Welcome aboard, %(user)s!")
- welcome_message = welcome_message % {'user': new_user.username}
- messages.success(request, welcome_message)
- mail_user(request, new_user, mail_subject,
- 'misago/emails/register/complete')
- return redirect(settings.LOGIN_REDIRECT_URL)
- else:
- activation_token = make_activation_token(new_user)
- activation_by_admin = new_user.requires_activation_by_admin
- activation_by_user = new_user.requires_activation_by_user
- mail_user(
- request, new_user, mail_subject,
- 'misago/emails/register/inactive',
- {
- 'activation_token': activation_token,
- 'activation_by_admin': activation_by_admin,
- 'activation_by_user': activation_by_user,
- })
- request.session['registered_user'] = new_user.pk
- return redirect('misago:register_completed')
- return render(request, 'misago/register/form.html', {'form': form})
- def register_disabled(request):
- return render(request, 'misago/register/disabled.html')
- def register_completed(request):
- """
- If user needs to activate his account, we display him page with message
- """
- registered_user_pk = request.session.get('registered_user')
- if not registered_user_pk:
- raise Http404()
- registered_user = get_object_or_404(get_user_model().objects,
- pk=registered_user_pk)
- if not registered_user.requires_activation:
- return redirect('misago:index')
- activation_by_admin = registered_user.requires_activation_by_admin
- activation_by_user = registered_user.requires_activation_by_user
- return render(
- request,
- 'misago/register/completed.html',
- {
- 'activation_by_admin': activation_by_admin,
- 'activation_by_user': activation_by_user,
- 'registered_user': registered_user,
- })
|