options.py 4.7 KB

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