errorpages.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.shortcuts import redirect
  2. from misago.admin.auth import is_admin_session, update_admin_session
  3. from misago.core.utils import get_exception_message
  4. from . import get_protected_namespace, protected_admin_view, render
  5. # Magic error page used by admin
  6. @protected_admin_view
  7. def _error_page(request, code, exception=None, default_message=None):
  8. if is_admin_session(request):
  9. template_pattern = 'misago/admin/errorpages/%s.html' % code
  10. response = render(request, template_pattern, {
  11. 'message': get_exception_message(exception, default_message),
  12. }, error_page=True)
  13. response.status_code = code
  14. return response
  15. else:
  16. return redirect('misago:admin:index')
  17. def admin_error_page(f):
  18. def decorator(request, *args, **kwargs):
  19. if get_protected_namespace(request):
  20. update_admin_session(request)
  21. return _error_page(request, *args, **kwargs)
  22. else:
  23. return f(request, *args, **kwargs)
  24. return decorator
  25. # Magic CSRF fail page for Admin
  26. def _csrf_failure(request, reason=""):
  27. if is_admin_session(request):
  28. update_admin_session(request)
  29. response = render(
  30. request,
  31. 'misago/admin/errorpages/csrf_failure_authenticated.html',
  32. error_page=True,
  33. )
  34. else:
  35. response = render(request, 'misago/admin/errorpages/csrf_failure.html')
  36. response.status_code = 403
  37. return response
  38. def admin_csrf_failure(f):
  39. def decorator(request, *args, **kwargs):
  40. if get_protected_namespace(request):
  41. return _csrf_failure(request, *args, **kwargs)
  42. else:
  43. return f(request, *args, **kwargs)
  44. return decorator