views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from django.template import RequestContext
  2. from django.utils.translation import ugettext as _
  3. from misago.apps.errors import error404, error_banned
  4. from misago.auth import sign_user_in
  5. from misago.decorators import block_authenticated, block_banned, block_crawlers, block_jammed
  6. from misago import messages
  7. from misago.messages import Message
  8. from misago.models import Ban, User
  9. from misago.shortcuts import redirect_message, render_to_response
  10. from misago.apps.activation.forms import UserSendActivationMailForm
  11. @block_crawlers
  12. @block_banned
  13. @block_authenticated
  14. @block_jammed
  15. def form(request):
  16. message = None
  17. if request.method == 'POST':
  18. form = UserSendActivationMailForm(request.POST, request=request)
  19. if form.is_valid():
  20. user = form.found_user
  21. user_ban = Ban.objects.check_ban(username=user.username, email=user.email)
  22. if user_ban:
  23. return error_banned(request, user, user_ban)
  24. if user.activation == User.ACTIVATION_NONE:
  25. return redirect_message(request, messages.INFO, _("%(username)s, your account is already active.") % {'username': user.username})
  26. if user.activation == User.ACTIVATION_ADMIN:
  27. return redirect_message(request, messages.INFO, _("%(username)s, only board administrator can activate your account.") % {'username': user.username})
  28. user.email_user(
  29. request,
  30. 'users/activation/resend',
  31. _("Account Activation"),
  32. )
  33. return redirect_message(request, messages.SUCCESS, _("%(username)s, e-mail containing new activation link has been sent to %(email)s.") % {'username': user.username, 'email': user.email})
  34. else:
  35. message = Message(form.non_field_errors()[0], messages.ERROR)
  36. else:
  37. form = UserSendActivationMailForm(request=request)
  38. return render_to_response('resend_activation.html',
  39. {
  40. 'message': message,
  41. 'form': form,
  42. },
  43. context_instance=RequestContext(request));
  44. @block_banned
  45. @block_authenticated
  46. @block_jammed
  47. def activate(request, username="", user="0", token=""):
  48. user = int(user)
  49. try:
  50. user = User.objects.get(pk=user)
  51. current_activation = user.activation
  52. # Run checks
  53. user_ban = Ban.objects.check_ban(username=user.username, email=user.email)
  54. if user_ban:
  55. return error_banned(request, user, user_ban)
  56. if user.activation == User.ACTIVATION_NONE:
  57. return redirect_message(request, messages.INFO, _("%(username)s, your account is already active.") % {'username': user.username})
  58. if user.activation == User.ACTIVATION_ADMIN:
  59. return redirect_message(request, messages.INFO, _("%(username)s, only board administrator can activate your account.") % {'username': user.username})
  60. if not token or not user.token or user.token != token:
  61. return redirect_message(request, messages.ERROR, _("%(username)s, your activation link is invalid. Try again or request new activation e-mail.") % {'username': user.username})
  62. # Activate and sign in our member
  63. user.activation = User.ACTIVATION_NONE
  64. sign_user_in(request, user)
  65. # Update monitor
  66. User.objects.resync_monitor()
  67. if current_activation == User.ACTIVATION_CREDENTIALS:
  68. return redirect_message(request, messages.SUCCESS, _("%(username)s, your account has been successfully reactivated after change of sign-in credentials.") % {'username': user.username})
  69. else:
  70. return redirect_message(request, messages.SUCCESS, _("%(username)s, your account has been successfully activated. Welcome aboard!") % {'username': user.username})
  71. except User.DoesNotExist:
  72. return error404(request)