errorpages.py 1.4 KB

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