options.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. class ChangeError(Exception):
  29. pass
  30. def confirm_change_view(f):
  31. @deny_guests
  32. def decorator(request, token):
  33. try:
  34. return f(request, token)
  35. except ChangeError as e:
  36. return render(request, 'misago/options/credentials_error.html', {
  37. 'message': e.args[0],
  38. }, status=400)
  39. return decorator
  40. @confirm_change_view
  41. def confirm_email_change(request, token):
  42. new_credentials = get_new_credentials(request.user, token)
  43. if not (new_credentials and new_credentials.get('email')):
  44. raise ChangeError(_("Confirmation link is invalid."))
  45. try:
  46. request.user.set_email(new_credentials['email'])
  47. request.user.save(update_fields=['email', 'email_hash']])
  48. except IntegrityError:
  49. raise ChangeError()
  50. message = _("%(user)s, your e-mail has been changed.")
  51. return render(request, 'misago/options/credentials_changed.html', {
  52. 'message': message % {'user': inactive_user.username},
  53. })
  54. @confirm_change_view
  55. def confirm_password_change(request, token):
  56. new_credentials = get_new_credentials(request.user, token)
  57. if not (new_credentials and new_credentials.get('password')):
  58. raise ChangeError()
  59. request.user.password = new_credentials['password']
  60. update_session_auth_hash(request, request.user)
  61. request.user.save(update_fields=['password'])
  62. message = _("%(user)s, your password has been changed.")
  63. return render(request, 'misago/options/credentials_changed.html', {
  64. 'message': message % {'user': inactive_user.username},
  65. })