options.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from django.shortcuts import redirect, render
  2. from django.utils.translation import ugettext as _
  3. from misago.users.decorators import deflect_guests
  4. @deflect_guests
  5. def index(request):
  6. return redirect('misago:options_form', form_name='forum-options')
  7. @deflect_guests
  8. def form(request, form_name, token=None):
  9. return noscript(request, **{
  10. 'title': _("Options"),
  11. 'message': _("To change options enable JavaScript."),
  12. })
  13. # DEPRECATED VIEWS - DELETE AFTER USER CP IS DONE
  14. def change_username(request):
  15. namechanges = UsernameChanges(request.user)
  16. form = ChangeUsernameForm()
  17. if request.method == 'POST' and namechanges.left:
  18. form = ChangeUsernameForm(request.POST, user=request.user)
  19. if form.is_valid():
  20. try:
  21. form.change_username(changed_by=request.user)
  22. message = _("Your username has been changed.")
  23. messages.success(request, message)
  24. return redirect('misago:usercp_change_username')
  25. except IntegrityError:
  26. message = _("Error changing username. Please try again.")
  27. messages.error(request, message)
  28. return render(request, 'misago/usercp/change_username.html', {
  29. 'form': form,
  30. 'changes_left': namechanges.left,
  31. 'next_change_on': namechanges.next_on
  32. })
  33. def change_email_password(request):
  34. form = ChangeEmailPasswordForm()
  35. if request.method == 'POST':
  36. form = ChangeEmailPasswordForm(request.POST, user=request.user)
  37. if form.is_valid():
  38. new_email = ''
  39. new_password = ''
  40. # Store original data
  41. old_email = request.user.email
  42. old_password = request.user.password
  43. # Assign new creds to user temporarily
  44. if form.cleaned_data['new_email']:
  45. request.user.set_email(form.cleaned_data['new_email'])
  46. new_email = request.user.email
  47. if form.cleaned_data['new_password']:
  48. request.user.set_password(form.cleaned_data['new_password'])
  49. new_password = request.user.password
  50. request.user.email = old_email
  51. request.user.password = old_password
  52. credentials_token = cache_new_credentials(
  53. request.user, new_email, new_password)
  54. mail_subject = _("Confirm changes to %(user)s account "
  55. "on %(forum_title)s forums")
  56. subject_formats = {'user': request.user.username,
  57. 'forum_title': settings.forum_name}
  58. mail_subject = mail_subject % subject_formats
  59. if new_email:
  60. # finally override email before sending message
  61. request.user.email = new_email
  62. mail_user(request, request.user, mail_subject,
  63. 'misago/emails/change_email_password',
  64. {'credentials_token': credentials_token})
  65. message = _("E-mail was sent to %(email)s with a link that "
  66. "you have to click to confirm changes.")
  67. messages.info(request, message % {'email': request.user.email})
  68. return redirect('misago:usercp_change_email_password')
  69. return render(request, 'misago/usercp/change_email_password.html',
  70. {'form': form})
  71. def confirm_email_password_change(request, token):
  72. new_credentials = get_new_credentials(request.user, token)
  73. if not new_credentials:
  74. messages.error(request, _("Confirmation link is invalid."))
  75. else:
  76. changes_made = []
  77. if new_credentials['email']:
  78. request.user.set_email(new_credentials['email'])
  79. changes_made.extend(['email', 'email_hash'])
  80. if new_credentials['password']:
  81. request.user.password = new_credentials['password']
  82. update_session_auth_hash(request, request.user)
  83. changes_made.append('password')
  84. try:
  85. request.user.save(update_fields=changes_made)
  86. message = _("Changes in e-mail and password have been saved.")
  87. messages.success(request, message)
  88. except IntegrityError:
  89. messages.error(request, _("Confirmation link is invalid."))
  90. return redirect('misago:usercp_change_email_password')