123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- from django.http import JsonResponse
- from django.shortcuts import render
- from django.utils.translation import ugettext as _
- from misago.admin.views.errorpages import admin_csrf_failure, admin_error_page
- from .utils import get_exception_message, is_request_to_misago
- def _ajax_error(code, exception=None, default_message=None):
- return JsonResponse({
- 'detail': get_exception_message(exception, default_message),
- }, status=code)
- @admin_error_page
- def _error_page(request, code, exception=None, default_message=None):
- return render(
- request, 'misago/errorpages/%s.html' % code, {
- 'message': get_exception_message(exception, default_message),
- }, status=code
- )
- def banned(request, exception):
- ban = exception.ban
- request.frontend_context['store'].update({
- 'error': {
- 'ban': ban.get_serialized_message(),
- },
- })
- return render(
- request, 'misago/errorpages/banned.html', {
- 'ban': ban,
- }, status=403
- )
- def permission_denied(request, exception):
- if request.is_ajax():
- return _ajax_error(403, exception, _("Permission denied."))
- else:
- return _error_page(request, 403, exception)
- def page_not_found(request, exception):
- if request.is_ajax():
- return _ajax_error(404, exception, "Not found.")
- else:
- return _error_page(request, 404, exception)
- @admin_csrf_failure
- def csrf_failure(request, reason=""):
- if request.is_ajax():
- return _ajax_error(403, _("Request authentication is invalid."))
- else:
- response = render(request, 'misago/errorpages/csrf_failure.html')
- response.status_code = 403
- return response
- def not_allowed(request):
- return _error_page(request, 405)
- # Decorators for custom error page handlers
- def shared_403_exception_handler(f):
- def page_decorator(request, *args, **kwargs):
- if is_request_to_misago(request):
- return permission_denied(request, *args, **kwargs)
- else:
- return f(request, *args, **kwargs)
- return page_decorator
- def shared_404_exception_handler(f):
- def page_decorator(request, *args, **kwargs):
- if is_request_to_misago(request):
- return page_not_found(request, *args, **kwargs)
- else:
- return f(request, *args, **kwargs)
- return page_decorator
|