activation.py 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.template import RequestContext
  4. from django.utils.translation import ugettext as _
  5. from misago.banning.models import check_ban
  6. from misago.banning.decorators import block_banned
  7. from misago.banning.views import error_banned
  8. from misago.forms.layouts import FormLayout
  9. from misago.messages import Message
  10. from misago.security.auth import sign_user_in
  11. from misago.security.decorators import *
  12. from misago.users.forms import *
  13. from misago.users.models import User
  14. from misago.views import error403, error404
  15. @block_banned
  16. @block_authenticated
  17. @block_jammed
  18. def activate(request, username="", user="0", token=""):
  19. user = int(user)
  20. try:
  21. user = User.objects.get(pk=user)
  22. current_activation = user.activation
  23. # Run checks
  24. user_ban = check_ban(username=user.username, email=user.email)
  25. if user_ban:
  26. return error_banned(request, user, user_ban)
  27. if user.activation == User.ACTIVATION_NONE:
  28. return error403(request, Message(request, 'users/activation/not_required', extra={'user': user}))
  29. if user.activation == User.ACTIVATION_ADMIN:
  30. return error403(request, Message(request, 'users/activation/only_by_admin', extra={'user': user}))
  31. if not token or not user.token or user.token != token:
  32. return error403(request, Message(request, 'users/invalid_confirmation_link', extra={'user': user}))
  33. # Activate and sign in our member
  34. user.activation = User.ACTIVATION_NONE
  35. sign_user_in(request, user)
  36. # Update monitor
  37. request.monitor['users_inactive'] = request.monitor['users_inactive'] - 1
  38. if current_activation == User.ACTIVATION_CREDENTIALS:
  39. request.messages.set_flash(Message(request, 'users/activation/credentials', extra={'user':user}), 'success')
  40. else:
  41. request.messages.set_flash(Message(request, 'users/activation/new', extra={'user':user}), 'success')
  42. return redirect(reverse('index'))
  43. except User.DoesNotExist:
  44. return error404(request)
  45. @block_banned
  46. @block_authenticated
  47. @block_jammed
  48. def form(request):
  49. message = None
  50. if request.method == 'POST':
  51. form = UserSendSpecialMailForm(request.POST, request=request)
  52. if form.is_valid():
  53. user = form.found_user
  54. user_ban = check_ban(username=user.username, email=user.email)
  55. if user_ban:
  56. return error_banned(request, user, user_ban)
  57. if user.activation == User.ACTIVATION_NONE:
  58. return error403(request, Message(request, 'users/activation/not_required', extra={'user': user}))
  59. if user.activation == User.ACTIVATION_ADMIN:
  60. return error403(request, Message(request, 'users/activation/only_by_admin', extra={'user': user}))
  61. request.messages.set_flash(Message(request, 'users/activation/resent', extra={'user':user}), 'success')
  62. user.email_user(
  63. request,
  64. 'users/activation/resend',
  65. _("Account Activation"),
  66. )
  67. return redirect(reverse('index'))
  68. else:
  69. message = Message(request, form.non_field_errors()[0], 'error')
  70. else:
  71. form = UserSendSpecialMailForm(request=request)
  72. return request.theme.render_to_response('users/resend_activation.html',
  73. {
  74. 'message': message,
  75. 'form': FormLayout(form),
  76. },
  77. context_instance=RequestContext(request));