0001-lingo-remove-character-from-return-url-39256.patch
combo/apps/lingo/views.py | ||
---|---|---|
49 | 49 |
LingoBasketCell, SelfDeclaredInvoicePayment, PaymentBackend, EXPIRED) |
50 | 50 | |
51 | 51 | |
52 |
def signing_dumps(content): |
|
53 |
serialization = signing.dumps(content) |
|
54 |
return serialization.replace(':', '.') |
|
55 | ||
56 | ||
57 |
def signing_loads(serialization): |
|
58 |
serialization = serialization.replace('.', ':') |
|
59 |
return signing.loads(serialization) |
|
60 | ||
61 | ||
52 | 62 |
def get_eopayment_object(request, regie_or_payment_backend, transaction_id=None): |
53 | 63 |
payment_backend = regie_or_payment_backend |
54 | 64 |
if isinstance(regie_or_payment_backend, Regie): |
... | ... | |
210 | 220 |
payment_url = reverse( |
211 | 221 |
'basket-item-pay-view', |
212 | 222 |
kwargs={ |
213 |
'item_signature': signing.dumps(item.pk)
|
|
223 |
'item_signature': signing_dumps(item.pk)
|
|
214 | 224 |
}) |
215 | 225 |
return JsonResponse({'result': 'success', 'id': str(item.id), |
216 | 226 |
'payment_url': request.build_absolute_uri(payment_url)}) |
... | ... | |
456 | 466 |
url = reverse('payment-status') |
457 | 467 |
params = [] |
458 | 468 |
if transaction_id: |
459 |
params.append(('transaction-id', signing.dumps(transaction_id)))
|
|
469 |
params.append(('transaction-id', signing_dumps(transaction_id)))
|
|
460 | 470 |
if next_url: |
461 | 471 |
params.append(('next', next_url)) |
462 | 472 |
return "%s?%s" % (url, urlencode(params)) |
... | ... | |
472 | 482 | |
473 | 483 |
item_signature = kwargs.get('item_signature') |
474 | 484 |
try: |
475 |
item_id = signing.loads(item_signature)
|
|
485 |
item_id = signing_loads(item_signature)
|
|
476 | 486 |
except signing.BadSignature: |
477 | 487 |
return HttpResponseForbidden(_('Invalid payment request.')) |
478 | 488 | |
... | ... | |
646 | 656 |
transaction_id = kwargs.get('transaction_signature') |
647 | 657 |
if transaction_id: |
648 | 658 |
try: |
649 |
transaction_id = signing.loads(transaction_id)
|
|
659 |
transaction_id = signing_loads(transaction_id)
|
|
650 | 660 |
except signing.BadSignature: |
651 | 661 |
pass |
652 | 662 |
try: |
... | ... | |
842 | 852 |
return publish_page(request, page, template_name=template_name) |
843 | 853 | |
844 | 854 |
try: |
845 |
transaction_id = signing.loads(transaction_id)
|
|
855 |
transaction_id = signing_loads(transaction_id)
|
|
846 | 856 |
except signing.BadSignature: |
847 | 857 |
return HttpResponseForbidden(_('Invalid transaction signature.')) |
848 | 858 | |
... | ... | |
858 | 868 |
next_url = transaction.items.first().source_url |
859 | 869 |
next_url = request.build_absolute_uri(next_url) |
860 | 870 | |
861 |
extra_context_data['transaction_id'] = signing.dumps(transaction.pk)
|
|
871 |
extra_context_data['transaction_id'] = signing_dumps(transaction.pk)
|
|
862 | 872 |
extra_context_data['next_url'] = next_url |
863 | 873 |
request.extra_context_data = extra_context_data |
864 | 874 |
return publish_page(request, page, template_name=template_name) |
... | ... | |
871 | 881 |
def get(self, request, *args, **kwargs): |
872 | 882 |
transaction_signature = kwargs.get('transaction_signature') |
873 | 883 |
try: |
874 |
transaction_id = signing.loads(transaction_signature)
|
|
884 |
transaction_id = signing_loads(transaction_signature)
|
|
875 | 885 |
except signing.BadSignature: |
876 | 886 |
return HttpResponseBadRequest(_('Invalid transaction.')) |
877 | 887 |
tests/test_lingo_payment.py | ||
---|---|---|
9 | 9 | |
10 | 10 |
from django.apps import apps |
11 | 11 |
from django.contrib.auth.models import User |
12 |
from django.core import signing |
|
13 | 12 |
from django.core.urlresolvers import reverse |
14 | 13 |
from django.core.wsgi import get_wsgi_application |
15 | 14 |
from django.conf import settings |
... | ... | |
25 | 24 |
Regie, BasketItem, Transaction, TransactionOperation, RemoteItem, EXPIRED, LingoBasketCell, |
26 | 25 |
PaymentBackend) |
27 | 26 |
from combo.utils import aes_hex_decrypt, sign_url |
27 |
from combo.apps.lingo.views import signing_loads, signing_dumps |
|
28 | 28 | |
29 | 29 |
from .test_manager import login |
30 | 30 | |
... | ... | |
131 | 131 |
url, part = url.split('?') |
132 | 132 |
query = urlparse.parse_qs(part) |
133 | 133 |
assert 'transaction-id' in query |
134 |
assert signing.loads(query['transaction-id'][0]) == transaction_id
|
|
134 |
assert signing_loads(query['transaction-id'][0]) == transaction_id
|
|
135 | 135 | |
136 | 136 |
assert url.startswith('/lingo/payment-status') |
137 | 137 | |
... | ... | |
1042 | 1042 |
assert path.startswith(start) |
1043 | 1043 |
assert path.endswith(end) |
1044 | 1044 |
signature = path.replace(start, '').replace(end, '') |
1045 |
assert signing.loads(signature) == item.id
|
|
1045 |
assert signing_loads(signature) == item.id
|
|
1046 | 1046 | |
1047 | 1047 |
if authenticated: |
1048 | 1048 |
app = login(app) |
... | ... | |
1118 | 1118 |
# invalid transaction signature |
1119 | 1119 |
url = reverse( |
1120 | 1120 |
'api-transaction-status', |
1121 |
kwargs={'transaction_signature': signing.dumps('xxxx')}
|
|
1121 |
kwargs={'transaction_signature': signing_dumps('xxxx')}
|
|
1122 | 1122 | |
1123 | 1123 |
) |
1124 | 1124 |
resp = app.get(url, status=404) |
... | ... | |
1128 | 1128 |
transaction_id = 1000 |
1129 | 1129 |
url = reverse( |
1130 | 1130 |
'api-transaction-status', |
1131 |
kwargs={'transaction_signature': signing.dumps(transaction_id)}
|
|
1131 |
kwargs={'transaction_signature': signing_dumps(transaction_id)}
|
|
1132 | 1132 |
) |
1133 | 1133 |
resp = app.get(url, status=404) |
1134 | 1134 |
assert 'Unknown transaction.' in resp.text |
... | ... | |
1142 | 1142 |
transaction = Transaction.objects.create(amount=Decimal('10.0'), regie=regie, status=0) |
1143 | 1143 |
url = reverse( |
1144 | 1144 |
'api-transaction-status', |
1145 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1145 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1146 | 1146 |
) |
1147 | 1147 |
resp = app.get(url) |
1148 | 1148 |
assert resp.json == wait_response |
... | ... | |
1151 | 1151 |
transaction = Transaction.objects.create(amount=Decimal('10.0'), regie=regie, status=0) |
1152 | 1152 |
url = reverse( |
1153 | 1153 |
'api-transaction-status', |
1154 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1154 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1155 | 1155 |
) |
1156 | 1156 |
resp = login(app).get(url) |
1157 | 1157 |
assert resp.json == wait_response |
... | ... | |
1162 | 1162 |
amount=Decimal('10.0'), regie=regie, status=0, user=user) |
1163 | 1163 |
url = reverse( |
1164 | 1164 |
'api-transaction-status', |
1165 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1165 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1166 | 1166 |
) |
1167 | 1167 |
resp = login(app).get(url) |
1168 | 1168 |
assert resp.json == wait_response |
... | ... | |
1174 | 1174 |
amount=Decimal('10.0'), regie=regie, status=0, user=user) |
1175 | 1175 |
url = reverse( |
1176 | 1176 |
'api-transaction-status', |
1177 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1177 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1178 | 1178 |
) |
1179 | 1179 |
resp = app.get(url, status=403) |
1180 | 1180 |
assert error_msg in resp.text |
... | ... | |
1186 | 1186 |
transaction = Transaction.objects.create(amount=Decimal('10.0'), regie=regie, status=0, user=user2) |
1187 | 1187 |
url = reverse( |
1188 | 1188 |
'api-transaction-status', |
1189 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1189 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1190 | 1190 |
) |
1191 | 1191 |
resp = login(app).get(url, status=403) |
1192 | 1192 |
assert error_msg in resp.text |
... | ... | |
1198 | 1198 |
) |
1199 | 1199 |
url = reverse( |
1200 | 1200 |
'api-transaction-status', |
1201 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1201 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1202 | 1202 |
) |
1203 | 1203 |
resp = app.get(url) |
1204 | 1204 |
assert resp.json == { |
... | ... | |
1213 | 1213 |
) |
1214 | 1214 |
url = reverse( |
1215 | 1215 |
'api-transaction-status', |
1216 |
kwargs={'transaction_signature': signing.dumps(transaction.pk)}
|
|
1216 |
kwargs={'transaction_signature': signing_dumps(transaction.pk)}
|
|
1217 | 1217 |
) |
1218 | 1218 |
resp = app.get(url) |
1219 | 1219 |
assert resp.json == { |
1220 |
- |