Bug #37214
type de données sur POST de callback
Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
25 octobre 2019
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
Sur un GET de callback on récupère environ['QUERY_STRING'] et c'est une str mais sur un POST on récupère request.body qui est bytes; assurons-nous en fin de course qu'eopayment reçoit bien du texte.
Fichiers
Révisions associées
lingo: make sure eopayment is given a string (#37214)
Historique
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Patch proposed changé de Non à Oui
- Fichier 0001-lingo-make-sure-eopayment-is-given-a-string-37214.patch 0001-lingo-make-sure-eopayment-is-given-a-string-37214.patch ajouté
- Statut changé de Nouveau à Solution proposée
Mis à jour par Paul Marillonnet il y a plus de 4 ans
Je préférerais voir ça apparaître dans les (apparemment seulement deux) fonctions appelantes :
diff --git a/combo/apps/lingo/views.py b/combo/apps/lingo/views.py
index 18670f6..d47f373 100644
--- a/combo/apps/lingo/views.py
+++ b/combo/apps/lingo/views.py
@@ -569,7 +569,7 @@ class CallbackView(PaymentView):
return self.handle_callback(request, request.environ['QUERY_STRING'], **kwargs)
def post(self, request, *args, **kwargs):
- return self.handle_callback(request, request.body, **kwargs)
+ return self.handle_callback(request, force_text(request.body), **kwargs)
@csrf_exempt
def dispatch(self, *args, **kwargs):
@@ -587,7 +587,7 @@ class ReturnView(PaymentView):
return self.handle_return(request, request.environ['QUERY_STRING'], **kwargs)
def post(self, request, *args, **kwargs):
- return self.handle_return(request, request.body, **kwargs)
+ return self.handle_return(request, force_text(request.body), **kwargs)
def handle_return(self, request, backend_response, **kwargs):
transaction = None
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Fichier 0001-lingo-make-sure-eopayment-is-given-a-string-37214.patch 0001-lingo-make-sure-eopayment-is-given-a-string-37214.patch ajouté
Ok, j'avais un peu peur, peut-être en imaginant une dimension avec environ['QUERY_STRING'] qui serait bytes. Mais faisons ainsi.
Mis à jour par Paul Marillonnet il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
On fera un ticket supplémentaire si jamais cette dimension se méta-cristallise dans la nôtre.
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 3be27ce16bc73378dae0350a3578c11c49017bc8 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Oct 25 09:49:10 2019 +0200 lingo: make sure eopayment is given a string (#37214)
Mis à jour par Frédéric Péters il y a plus de 4 ans
Pour mémoire, pas encore déployé, la trace qui correspond est :
File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in post 572. return self.handle_callback(request, request.body, **kwargs) File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in handle_callback 561. self.handle_response(request, backend_response, **kwargs) File "/usr/lib/python3/dist-packages/combo/apps/lingo/views.py" in handle_response 472. payment_response = payment.response(backend_response) File "/usr/lib/python3/dist-packages/eopayment/__init__.py" in response 174. return self.backend.response(query_string, **kwargs) File "/usr/lib/python3/dist-packages/eopayment/systempayv2.py" in response 369. fields = urlparse.parse_qs(query_string, True) File "/usr/lib/python3.5/urllib/parse.py" in parse_qs 577. encoding=encoding, errors=errors) File "/usr/lib/python3.5/urllib/parse.py" in parse_qsl 629. value = _coerce_result(value) File "/usr/lib/python3.5/urllib/parse.py" in _encode_result 95. return obj.encode(encoding, errors) Exception Type: UnicodeEncodeError at /lingo/callback/3/ Exception Value: 'ascii' codec can't encode character '\xe9' in position 28: ordinal not in range(128)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
lingo: make sure eopayment is given a string (#37214)