Skip to content

Commit

Permalink
ledger.payments.api: add more sane checkout URL generator
Browse files Browse the repository at this point in the history
  • Loading branch information
Scott Percival committed Feb 27, 2018
1 parent 79f67ec commit d22e37a
Showing 1 changed file with 8 additions and 20 deletions.
28 changes: 8 additions & 20 deletions ledger/payments/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from oscar.apps.voucher.models import Voucher
from oscar.apps.payment import forms
import traceback
import six

class CsrfExemptSessionAuthentication(SessionAuthentication):
def enforce_csrf(self, request):
Expand Down Expand Up @@ -836,11 +837,6 @@ class CheckoutCreateView(generics.CreateAPIView):
authentication_classes = [SessionAuthentication]
permission_classes = []

def get_redirect_value(self,serializer,value):
if serializer.validated_data.get(value) is not None:
return '{}={}'.format(value,serializer.validated_data[value])
return ''

def create(self, request):
try:
http_status = status.HTTP_200_OK
Expand All @@ -867,21 +863,13 @@ def create(self, request):
else:
basket = createBasket(serializer.validated_data['products'],request.user,serializer.validated_data['system'])

redirect = HttpResponseRedirect(reverse('checkout:index')+u'?{}&{}&{}&{}&{}&{}&{}&{}&{}&{}&{}&{}&{}&{}'.format(
self.get_redirect_value(serializer,'card_method'),
self.get_redirect_value(serializer,'basket_owner'),
self.get_redirect_value(serializer,'template'),
self.get_redirect_value(serializer,'fallback_url'),
self.get_redirect_value(serializer,'return_url'),
self.get_redirect_value(serializer,'associateInvoiceWithToken'),
self.get_redirect_value(serializer,'forceRedirect'),
self.get_redirect_value(serializer,'sendEmail'),
self.get_redirect_value(serializer,'proxy'),
self.get_redirect_value(serializer,'checkoutWithToken'),
self.get_redirect_value(serializer,'bpay_format'),
self.get_redirect_value(serializer,'icrn_format'),
self.get_redirect_value(serializer,'invoice_text'),
self.get_redirect_value(serializer,'check_url')))
fields = [
'card_method', 'basket_owner', 'template', 'fallback_url', 'return_url', 'associateInvoiceWithToken', 'forceRedirect', 'sendEmail', 'proxy',
'checkoutWithToken', 'bpay_format', 'icrn_format', 'invoice_text', 'check_url'
]
url_args = {f: six.text_type(serializer.validated_data[f]).encode('utf8') for f in fields if f in serializer.validated_data and serializer.validated_data[f] is not None}

redirect = HttpResponseRedirect(reverse('checkout:index')+'?'+six.moves.urllib.parse.urlencode(url_args))
# inject the current basket into the redirect response cookies
# or else, anonymous users will be directionless
redirect.set_cookie(
Expand Down

0 comments on commit d22e37a

Please sign in to comment.