diff --git a/src/pretix/presale/templates/pretixpresale/event/offline.html b/src/pretix/presale/templates/pretixpresale/event/offline.html new file mode 100644 index 000000000..f27d4875c --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/event/offline.html @@ -0,0 +1,28 @@ +{% extends "error.html" %} +{% load i18n %} +{% load static %} +{% block title %}{% trans "Shop offline" %}{% endblock %} +{% block content %} + +
+

{% trans "Shop offline" %}

+

{% trans "This ticket shop is currently turned off." %}

+

{% trans "It is only accessible to authenticated team members." %}

+

{% trans "Please try again later." %}

+ + {% if request.user.is_staff and not staff_session %} +
+

+ {% csrf_token %} + +

+
+ {% endif %} + +
+{% endblock %} diff --git a/src/pretix/presale/utils.py b/src/pretix/presale/utils.py index ecfe4d596..54a9b7c6c 100644 --- a/src/pretix/presale/utils.py +++ b/src/pretix/presale/utils.py @@ -38,17 +38,16 @@ from importlib import import_module from urllib.parse import urljoin from django.conf import settings -from django.core.exceptions import PermissionDenied from django.db.models import Q -from django.http import Http404 +from django.http import Http404, HttpResponseForbidden from django.middleware.csrf import rotate_token +from django.template import loader from django.template.response import TemplateResponse from django.urls import resolve from django.utils.crypto import constant_time_compare from django.utils.functional import SimpleLazyObject from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ -from django.views.defaults import permission_denied from django_scopes import scope from pretix.base.middleware import LocaleMiddleware @@ -325,8 +324,9 @@ def _detect_event(request, require_live=True, require_plugin=None): if not can_access: # Directly construct view instead of just calling `raise` since this case is so common that we # don't want it to show in our log files. - return permission_denied( - request, PermissionDenied(_('The selected ticket shop is currently not available.')) + template = loader.get_template("pretixpresale/event/offline.html") + return HttpResponseForbidden( + template.render(request=request) ) if require_plugin: