Bug #49943
Les "plus" dans les paramètres de l'URL des sources de données semblent être transformés en espaces (régression)
0%
Description
J'ai une source de donnée :
{{passerelle_url}}solis-afi-mss/recette/children/?email={{form_user_var_email}}
Mon utilisateur à cet email :
bmallet+20112020@entrouvert.com
Pour les démarches, la source de donnée est utilisées pour remplir un champ liste et appele passerelle :
endpoint GET /solis-afi-mss/recette/children/?email=bmallet+20112020%40entrouvert.com&orig=wcs.dev.publik.love&algo=sha256×tamp=2021-01-07T10%3A55%3A09Z&nonce=2c2716cbf1bf9d9dd95afdea7142604f&signature=gnfFPVEkIefnShmZclAT8AvJjdO4OWlUEw861S6DPBg%3D ('')
Sur passerelle, je met un breakpoint dans le endpoint et je m’aperçois que le '+' a été remplacé par un espace.
186 def children(self, request, email): 187 import pdb; pdb.set_trace() 188 -> children = self.search_from_email(email)[2] 189 return {'data': children} 190 (Pdb) email 'bmallet 20112020@entrouvert.com'
Si je fait l'appel depuis curl (avec les paramètres qui vont bien parce que j'avais déjà constaté ce problème, mais en voulant débuger avec curl : https://dev.entrouvert.org/issues/48674#note-10) alors on retrouve bien le '+' dans l'adresse email passée au connecteur.
$ curl -G 'https://passerelle.dev.publik.love/solis-afi-mss/recette/children' --data-urlencode 'email=bmallet+20112020@entrouvert.com'
Comme je m'était bien cassé les dents sur ce problème, je suis quasiment certain que cela fonctionnait précédemment (qu'il s'agit d'une régression).
Historique
Mis à jour par Nicolas Roche il y a plus de 3 ans
- Tracker changé de Development à Bug
(Brice me dit que c'était pratique de pouvoir utiliser ces adresses mails avec un '+' pour tester.)
Mis à jour par Frédéric Péters il y a plus de 3 ans
Un gabarit django {{form_user_var_email}} donnera le contenu, blah+toto@example.com donc, et ce résultat sera utilisé.
La demande c'est un filtre pour faire un urllib.parse.quote ?
Mis à jour par Nicolas Roche il y a plus de 3 ans
Oui tu as raison, le "plus" est bien passé dans l'URL :
https://passerelle-ministere-solidarites-sante.test.entrouvert.org/manage/solis-afi-mss/aides-financieres/logs/?log_id=17148
Localement je vois que le '+' est remplacé par passerelle par un espace.
J'ai essayé d'envoyer le '+' encodé : "bmallet%2B20112020%40entrouvert.com" mais je reçoit toujours un espace dans passerelle.
Dans l'absolu oui, il s'agirait en fait d'une demande pour un filtre pour faire un urllib.parse.quote,
mais je ne suis pas certain que cela fonctionnera (la dernière fois que je me suis frotté à ce problème, même tcpdump ne m'a pas permis de localiser où avait lieu le remplacement).
Mis à jour par Frédéric Péters il y a plus de 3 ans
mais je ne suis pas certain que cela fonctionnera (la dernière fois que je me suis frotté à ce problème, même tcpdump ne m'a pas permis de localiser où avait lieu le remplacement).
?
C'est simplement que + dans une query string représente l'espace, il faut encoder la query string avec urllib.parse.quote, c'est tout.
(il est écrit "régression" mais je ne le crois pas une seconde)
Mis à jour par Nicolas Roche il y a plus de 3 ans
J'ai vraiment constaté que passer un email avec '+' fonctionnait avec w.c.s mais pas avec curl, puis que ça fonctionnait avec la commande curl qui encode l'URL, et à présent que ça ne fonctionne plus avec w.c.s.
Donc oui, plutôt une régression côté passerelle lors de l'interprétation des paramètres passés par un schéma json
(le tcpdump c'était pour comparer ce qui sortait de passerelle en fait).
Du coup peut-être déplacer le ticket dans passerelle, ou le rejeter si ce cas n'impacte personne d'autre.
Mis à jour par Frédéric Péters il y a plus de 3 ans
Si le souhait est de pouvoir envoyer des paramètres dans la query string avec un + dedans, c'est bien dans wcs qu'il faut un filtre pour faire urllib.parse.quote. Au cas où, je parle bien des sources de données, pour les appels webservice il suffit d'utiliser les champs adéquats pour les paramètres. Ce qui me fait dire qu'une autre orientation pour ce ticket pourrait être d'étendre la définition des sources de données pour comme les appels webservice avoir des champs spécifiques pour les paramètres.
Mis à jour par Thomas Noël il y a plus de 3 ans
Essayer avec ?email={{form_user_var_email|urlencode }}
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Nouveau à Solution déployée
Oh, trop survolé la doc, je n'étais pas tombé sur |urlencode, ça m'a l'air tout à fait ok.