|
@@ -0,0 +1,47 @@
|
|
|
|
+from django.shortcuts import render
|
|
|
|
+from misago.admin.auth import is_admin_session, update_admin_session
|
|
|
|
+from misago.admin.views import get_protected_namespace, protected_admin_view
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# Magic error page used by admin
|
|
|
|
+@protected_admin_view
|
|
|
|
+def _error_page(request, code, message=None):
|
|
|
|
+ template_pattern = 'misago/admin/errorpages/%s.html' % code
|
|
|
|
+
|
|
|
|
+ response = render(request,
|
|
|
|
+ template_pattern,
|
|
|
|
+ {'message': message})
|
|
|
|
+ response.status_code = code
|
|
|
|
+ return response
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def admin_error_page(f):
|
|
|
|
+ def decorator(request, *args, **kwargs):
|
|
|
|
+ if get_protected_namespace(request):
|
|
|
|
+ update_admin_session(request)
|
|
|
|
+ return _error_page(request, *args, **kwargs)
|
|
|
|
+ else:
|
|
|
|
+ return f(request, *args, **kwargs)
|
|
|
|
+ return decorator
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# Magic CSRF fail page for Admin
|
|
|
|
+def _csrf_failure(request, reason=""):
|
|
|
|
+ if is_admin_session(request):
|
|
|
|
+ update_admin_session(request)
|
|
|
|
+ response = render(
|
|
|
|
+ request, 'misago/admin/errorpages/csrf_failure_authenticated.html')
|
|
|
|
+ else:
|
|
|
|
+ response = render(request, 'misago/admin/errorpages/csrf_failure.html')
|
|
|
|
+
|
|
|
|
+ response.status_code = 403
|
|
|
|
+ return response
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def admin_csrf_failure(f):
|
|
|
|
+ def decorator(request, *args, **kwargs):
|
|
|
|
+ if get_protected_namespace(request):
|
|
|
|
+ return _csrf_failure(request, *args, **kwargs)
|
|
|
|
+ else:
|
|
|
|
+ return f(request, *args, **kwargs)
|
|
|
|
+ return decorator
|