errorpages.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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(
  11. request,
  12. template_pattern,
  13. {"message": get_exception_message(exception, default_message)},
  14. error_page=True,
  15. )
  16. response.status_code = code
  17. return response
  18. else:
  19. return redirect("misago:admin:index")
  20. def admin_error_page(f):
  21. def decorator(request, *args, **kwargs):
  22. if get_protected_namespace(request):
  23. update_admin_session(request)
  24. return _error_page(request, *args, **kwargs)
  25. else:
  26. return f(request, *args, **kwargs)
  27. return decorator
  28. # Magic CSRF fail page for Admin
  29. def _csrf_failure(request, reason=""):
  30. if is_admin_session(request):
  31. update_admin_session(request)
  32. response = render(
  33. request,
  34. "misago/admin/errorpages/csrf_failure_authenticated.html",
  35. error_page=True,
  36. )
  37. else:
  38. response = render(request, "misago/admin/errorpages/csrf_failure.html")
  39. response.status_code = 403
  40. return response
  41. def admin_csrf_failure(f):
  42. def decorator(request, *args, **kwargs):
  43. if get_protected_namespace(request):
  44. return _csrf_failure(request, *args, **kwargs)
  45. else:
  46. return f(request, *args, **kwargs)
  47. return decorator