From f9b3962beca77ee63ebc61d0df339bfaf39306bf Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 6 May 2021 17:40:54 +0200 Subject: [PATCH 2/3] lingo: add callback through payment backend's slug (#49145) --- combo/apps/lingo/views.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py index 6e12fac2..3c8e4c52 100644 --- a/combo/apps/lingo/views.py +++ b/combo/apps/lingo/views.py @@ -25,6 +25,7 @@ from django.contrib import messages from django.contrib.auth.models import User from django.core import signing from django.core.exceptions import ObjectDoesNotExist, PermissionDenied +from django.db.models.query import Q from django.db.transaction import atomic from django.http import ( Http404, @@ -618,11 +619,26 @@ class UnknownPaymentException(PaymentException): class PaymentView(View): def handle_response(self, request, backend_response, **kwargs): if 'regie_pk' in kwargs: - payment_backend = get_object_or_404(Regie, pk=kwargs['regie_pk']).payment_backend + try: + regie_pk = int(kwargs['regie_pk']) + except ValueError: + regie_pk = None + payment_backend = PaymentBackend.objects.filter(regie__pk=regie_pk).first() elif 'payment_backend_pk' in kwargs: - payment_backend = get_object_or_404(PaymentBackend, pk=kwargs['payment_backend_pk']) + payment_backend_slug = kwargs['payment_backend_pk'] + try: + payment_backend_pk = int(kwargs['payment_backend_pk']) + except ValueError: + payment_backend_pk = None + payment_backend = PaymentBackend.objects.filter( + Q(pk=payment_backend_pk) | Q(slug=payment_backend_slug) + ).first() else: - return HttpResponseBadRequest("A payment backend or regie primary key must be specified") + payment_backend = None + + if not payment_backend: + logger.warning('lingo: payment backend not found on callback kwargs=%r', kwargs) + raise Http404("A payment backend or regie primary key or slug must be specified") payment = get_eopayment_object(request, payment_backend) logger.info(u'received payment response: %r', backend_response) -- 2.31.1