Projet

Général

Profil

Bug #52624

opendatasoft, désactiver l'autoescape dans le rendu du template du champ "text"

Ajouté par Nicolas Roche il y a environ 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
01 avril 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Si on récupère une apostrophe dans un champs utilisé pour le rendu du template,
alors l’apostrophe est échappée : "nom_rue": "Grand\'Rue"
donne :

"text": "107 Grand 'Rue (67000 Strasbourg)"}


Fichiers

Historique

#2

Mis à jour par Nicolas Roche il y a environ 3 ans

  • Description mis à jour (diff)
#3

Mis à jour par Nicolas Roche il y a environ 3 ans

#4

Mis à jour par Thomas Noël il y a environ 3 ans

J'imagine qu'au moins nom_commun pourrait aussi nécessiter un safe et donc je verrais plutôt un usage global de "{% autoescape off } ... { endautoescape %}", non ?

#5

Mis à jour par Nicolas Roche il y a environ 3 ans

J'ai l'impression que c'est déjà le cas : le patch déporte le rendu dans passerelle/utils/templates.py::render_to_string (introduit par #27782) qui sert justement à faire l'autoescape off si j'ai bien compris
(je dirais que le problème ne porte pas sur les champs renvoyé par opendatasoft mais sur le champ "text" que le connecteur ajoute).

#6

Mis à jour par Thomas Noël il y a environ 3 ans

Mal lu ton patch, pas vu que le |safe était dans les tests. Et donc je ne comprends pas pourquoi tu modifies les tests...?

#7

Mis à jour par Nicolas Roche il y a environ 3 ans

pourquoi tu modifies les tests...?

Pour montrer que mon patch change quelque-chose.
(au départ j'avais mis |safe dans les tests parce que je n'avais pas compris comment corriger ce bug directement dans le connecteur)

#8

Mis à jour par Thomas Noël il y a environ 3 ans

Nicolas Roche a écrit :

pourquoi tu modifies les tests...?

Pour montrer que mon patch change quelque-chose.
(au départ j'avais mis |safe dans les tests parce que je n'avais pas compris comment corriger ce bug directement dans le connecteur)

Tu écris "au départ" mais là je vois toujours des "|safe" dans les tests...?

En fait je m'attendais à un test qui modifie un json reçu de opendatasoft, contenant une apostrophe, et montre bien que Passerelle renvoie l'apostrophe tel quel... je suis un peu perdu :)

#9

Mis à jour par Nicolas Roche il y a environ 3 ans

là je vois toujours des "|safe" dans les tests

alors c'est un oubli de ma part, mais pourtant moi je n'en vois pas...
https://git.entrouvert.org/passerelle.git/tree/passerelle/apps/opendatasoft/models.py?h=wip/52624-opendatasoft-do-not-autoescape

En fait je m'attendais à un test qui modifie un json reçu de opendatasoft, contenant une apostrophe, et montre bien que Passerelle renvoie l'apostrophe tel quel.

Il était déjà là avant ce patch, mais pour cela le test spécifiait "|safe" dans le template.
(à mon avis c'est là l'embrouille)
https://git.entrouvert.org/passerelle.git/tree/tests/test_opendatasoft.py?h=wip/52624-opendatasoft-do-not-autoescape#n210

#10

Mis à jour par Thomas Noël il y a environ 3 ans

C'est très confus.

#11

Mis à jour par Nicolas Roche il y a environ 3 ans

Oui, la confusion vient (à mon avis pour l'essentiel) du fait que j'avais dès le début prévu l'apostrophe dans les tests.

En fait je m'attendais à un test qui modifie un json reçu de opendatasoft, contenant une apostrophe, et montre bien que Passerelle renvoie l'apostrophe tel quel...

voir par exemple :

FAKED_CONTENT_Q_SEARCH = json.dumps(
...
                    "nom_rue": "RUE DE L'AUBEPINE",

def test_search_using_q(mocked_get, app, connector):
...
    # check text results
    assert [x['text'] for x in resp.json['data']] == [
        "33 RUE DE L'AUBEPINE Strasbourg",

#12

Mis à jour par Frédéric Péters il y a environ 3 ans

Ok c'est laborieux, pour proposer une version alternative de la description de ce ticket :

Aujourd'hui le gabarit utilisé doit penser à inclure les |safe pour éviter l'échappement d'apostrophes, c'est parfois oublié et pour éviter ça, ce ticket pour que l'échappement soit désactivé par défaut.

#13

Mis à jour par Thomas Noël il y a environ 3 ans

  • Statut changé de Solution proposée à Solution validée

Ca s'éclaire (sans doute aussi parce que j'ai bien dormi cette nuit).

#14

Mis à jour par Nicolas Roche il y a environ 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 5e68865fddafd04d431ecf855c644591557b15cf
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Thu Apr 1 14:33:12 2021 +0200

    opendatasoft: do not escape on template rendering (#52614)
#15

Mis à jour par Frédéric Péters il y a plus de 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

(commit avec mauvais numéro de ticket)

Formats disponibles : Atom PDF