From 7037f348bfc527bbde9664e3ca47a9b14d4d137e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=A8=20Q=20=28it/its=29=20=E2=9C=A8?= Date: Tue, 23 Sep 2025 18:26:38 +0200 Subject: [PATCH] remove infinite loop when output plugin provides a URI for a whole order (#5474) --- src/pretix/base/services/tickets.py | 3 --- src/pretix/control/views/orders.py | 14 +++++++++----- src/pretix/presale/views/order.py | 14 +++++++++----- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/pretix/base/services/tickets.py b/src/pretix/base/services/tickets.py index 355e9a7439..b0244253ea 100644 --- a/src/pretix/base/services/tickets.py +++ b/src/pretix/base/services/tickets.py @@ -69,9 +69,6 @@ def generate_order(order: int, provider: str): prov = response(order.event) if prov.identifier == provider: filename, ttype, data = prov.generate_order(order) - if ttype == 'text/uri-list': - continue - path, ext = os.path.splitext(filename) for ct in CachedCombinedTicket.objects.filter(order=order, provider=provider): ct.delete() diff --git a/src/pretix/control/views/orders.py b/src/pretix/control/views/orders.py index b2a48197f6..fda0db9501 100644 --- a/src/pretix/control/views/orders.py +++ b/src/pretix/control/views/orders.py @@ -711,11 +711,15 @@ class OrderDownload(AsyncAction, OrderView): ) return resp elif isinstance(value, CachedCombinedTicket): - resp = FileResponse(value.file.file, content_type=value.type) - resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format( - self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension - ) - return resp + if value.type == 'text/uri-list': + resp = HttpResponseRedirect(value.file.file.read()) + return resp + else: + resp = FileResponse(value.file.file, content_type=value.type) + resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format( + self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension + ) + return resp else: return redirect(self.get_self_url()) diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 3d0f441f6f..b78e98ea02 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -1146,11 +1146,15 @@ class OrderDownloadMixin: ) return resp elif isinstance(value, CachedCombinedTicket): - resp = FileResponse(value.file.file, content_type=value.type) - resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format( - self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension - ) - return resp + if value.type == 'text/uri-list': + resp = HttpResponseRedirect(value.file.file.read()) + return resp + else: + resp = FileResponse(value.file.file, content_type=value.type) + resp['Content-Disposition'] = 'attachment; filename="{}-{}-{}{}"'.format( + self.request.event.slug.upper(), self.order.code, self.output.identifier, value.extension + ) + return resp else: return redirect(self.get_self_url())