12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from django.contrib.auth import get_user_model
- from django.shortcuts import get_object_or_404, render
- from django.urls import reverse
- from django.utils.translation import ugettext as _
- from misago.conf import settings
- from misago.core.exceptions import Banned
- from misago.core.mail import mail_user
- from ..bans import get_user_ban
- from ..decorators import deny_authenticated, deny_banned_ips
- from ..models import ACTIVATION_REQUIRED_NONE
- from ..tokens import is_activation_token_valid
- def activation_view(f):
- @deny_authenticated
- @deny_banned_ips
- def decorator(*args, **kwargs):
- return f(*args, **kwargs)
- return decorator
- @activation_view
- def request_activation(request):
- request.frontend_context.update({
- 'SEND_ACTIVATION_API': reverse('misago:api:send-activation')
- })
- return render(request, 'misago/activation/request.html')
- class ActivationStopped(Exception):
- pass
- class ActivationError(Exception):
- pass
- @activation_view
- def activate_by_token(request, pk, token):
- User = get_user_model()
- inactive_user = get_object_or_404(User.objects, pk=pk, is_active=True)
- try:
- if not inactive_user.requires_activation:
- message = _("%(user)s, your account is already active.")
- message = message % {'user': inactive_user.username}
- raise ActivationStopped(message)
- if not is_activation_token_valid(inactive_user, token):
- message = _("%(user)s, your activation link is invalid. "
- "Try again or request new activation link.")
- message = message % {'user': inactive_user.username}
- raise ActivationError(message)
- ban = get_user_ban(inactive_user)
- if ban:
- raise Banned(ban)
- except ActivationStopped as e:
- return render(request, 'misago/activation/stopped.html', {
- 'message': e.args[0],
- })
- except ActivationError as e:
- return render(request, 'misago/activation/error.html', {
- 'message': e.args[0],
- }, status=400)
- inactive_user.requires_activation = ACTIVATION_REQUIRED_NONE
- inactive_user.save(update_fields=['requires_activation'])
- message = _("%(user)s, your account has been activated!")
- return render(request, 'misago/activation/done.html', {
- 'message': message % {'user': inactive_user.username},
- })
|