From 8b3eb14d73cf21585b47fa5abdaf22a07467224f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 18 Jun 2015 15:33:40 +0200 Subject: [PATCH] Fixed script prefixes in absolute URLs --- src/pretix/helpers/urls.py | 8 ++++++-- src/pretix/plugins/paypal/payment.py | 4 ++-- src/pretix/plugins/paypal/views.py | 8 ++++---- src/pretix/plugins/stripe/payment.py | 2 +- src/pretix/presale/views/checkout.py | 6 +++++- src/pretix/presale/views/event.py | 4 ++-- 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/pretix/helpers/urls.py b/src/pretix/helpers/urls.py index ec9087f452..79262df390 100644 --- a/src/pretix/helpers/urls.py +++ b/src/pretix/helpers/urls.py @@ -1,5 +1,9 @@ +from urllib.parse import urljoin from django.conf import settings +from django.core.urlresolvers import reverse -def build_absolute_uri(url): - return settings.SITE_URL + url +def build_absolute_uri(urlname, args=None, kwargs=None): + # Pass prefix='' as a possible SCRIPT_PREFIX (if pretix runs in a subdirectory) + # is included in SITE_URL _and_ is added by reverse. + return urljoin(settings.SITE_URL, reverse(urlname, args, kwargs, prefix='')) diff --git a/src/pretix/plugins/paypal/payment.py b/src/pretix/plugins/paypal/payment.py index 0939f79dc5..22c4b9b9f7 100644 --- a/src/pretix/plugins/paypal/payment.py +++ b/src/pretix/plugins/paypal/payment.py @@ -89,8 +89,8 @@ class Paypal(BasePaymentProvider): "payment_method": "paypal", }, "redirect_urls": { - "return_url": build_absolute_uri(reverse('plugins:paypal:return')), - "cancel_url": build_absolute_uri(reverse('plugins:paypal:abort')), + "return_url": build_absolute_uri('plugins:paypal:return'), + "cancel_url": build_absolute_uri('plugins:paypal:abort'), }, "transactions": [ { diff --git a/src/pretix/plugins/paypal/views.py b/src/pretix/plugins/paypal/views.py index ab9695e3c7..273987b837 100644 --- a/src/pretix/plugins/paypal/views.py +++ b/src/pretix/plugins/paypal/views.py @@ -71,12 +71,12 @@ def retry(request, order): "payment_method": "paypal", }, "redirect_urls": { - "return_url": build_absolute_uri(reverse('plugins:paypal:retry', kwargs={ + "return_url": build_absolute_uri('plugins:paypal:retry', kwargs={ 'order': order.code - })), - "cancel_url": build_absolute_uri(reverse('plugins:paypal:retry', kwargs={ + }), + "cancel_url": build_absolute_uri('plugins:paypal:retry', kwargs={ 'order': order.code - })), + }), }, "transactions": [ { diff --git a/src/pretix/plugins/stripe/payment.py b/src/pretix/plugins/stripe/payment.py index f185fa9c85..73de287deb 100644 --- a/src/pretix/plugins/stripe/payment.py +++ b/src/pretix/plugins/stripe/payment.py @@ -40,7 +40,7 @@ class Stripe(BasePaymentProvider): return "
%s
%s
" % ( _('Please configure a Stripe Webhook to ' 'the following endpoint in order to automatically cancel orders when a charges are refunded externally.'), - build_absolute_uri(reverse('plugins:stripe:webhook')) + build_absolute_uri('plugins:stripe:webhook') ) def checkout_is_valid_session(self, request): diff --git a/src/pretix/presale/views/checkout.py b/src/pretix/presale/views/checkout.py index f297c93a86..8379933745 100644 --- a/src/pretix/presale/views/checkout.py +++ b/src/pretix/presale/views/checkout.py @@ -305,7 +305,11 @@ class OrderConfirm(EventViewMixin, CartDisplayMixin, EventLoginRequiredMixin, Ch { 'user': request.user, 'order': order, 'event': request.event, - 'url': build_absolute_uri(self.get_order_url(order)), + 'url': build_absolute_uri('presale:event.order', kwargs={ + 'event': self.request.event.slug, + 'organizer': self.request.event.organizer.slug, + 'order': order.code, + }), 'payment': self.payment_provider.order_pending_mail_render(order) }, request.event diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index d295c4179c..2a874de5b8 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -188,10 +188,10 @@ class EventForgot(EventViewMixin, TemplateView): { 'user': user, 'event': self.request.event, - 'url': build_absolute_uri(reverse('presale:event.forgot.recover', kwargs={ + 'url': build_absolute_uri('presale:event.forgot.recover', kwargs={ 'event': self.request.event.slug, 'organizer': self.request.event.organizer.slug, - }) + '?token=' + self.generate_token(user)), + }) + '?token=' + self.generate_token(user), }, self.request.event )