diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index 06f9e613b8..ac6b9055de 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -500,21 +500,23 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): self.subevent = None utm_params = {k: v for k, v in request.GET.items() if k.startswith("utm_")} + pass_through_url_params = utm_params | \ + {k: v for k, v in request.GET.items() if k in ("locale", "consent")} | \ + ({"widget_data": request.GET.get('widget_data')} if len(self.request.GET.get('widget_data', '{}')) > 3 else {}) + if request.GET.get('src', '') == 'widget' and 'take_cart_id' in request.GET: # User has clicked "Open in a new tab" link in widget get_or_create_cart_id(request) return redirect_to_url(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?' + urlencode(utm_params)) elif request.GET.get('iframe', '') == '1' and ( - 'take_cart_id' in request.GET or len(self.request.GET.get('widget_data', '{}')) > 3 + 'take_cart_id' in request.GET or len(self.request.GET.get('widget_data', '{}')) > 3 or 'consent' in request.GET ): # Widget just opened, and a cart already exists or we have been passed widget_data. # Let's do a stupid redirect to check if cookies are disabled. return redirect_to_url(eventreverse(request.event, 'presale:event.index', kwargs=kwargs) + '?' + urlencode({ 'require_cookie': 'true', 'cart_id': get_or_create_cart_id(request), - **({"widget_data": request.GET.get('widget_data')} if len(self.request.GET.get('widget_data', '{}')) > 3 else {}), - **({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}), - **utm_params, + **pass_through_url_params, })) elif 'require_cookie' in request.GET and settings.SESSION_COOKIE_NAME not in request.COOKIES and \ '__Host-' + settings.SESSION_COOKIE_NAME not in self.request.COOKIES: @@ -527,10 +529,8 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): } ) + "?" + urlencode({ "src": "widget", - **({"locale": request.GET.get('locale')} if request.GET.get('locale') else {}), **({"take_cart_id": request.GET.get('cart_id')} if request.GET.get('cart_id') else {}), - **({"widget_data": request.GET.get('widget_data')} if len(self.request.GET.get('widget_data', '{}')) > 3 else {}), - **utm_params, + **pass_through_url_params, }) }) r._csp_ignore = True