Bug(s) dans la gestion des URI par Discourse dans le contenu markdown

urn:records:test:3 est une URI valide RFC 3986.

Discourse ne la gère pas correctement, quel que soit le format Markdown utilisé.

  • Collez-la simplement, comme une URI HTTP, et Discourse ignore complètement le fait qu’il s’agit d’une URI, comme ici : urn:records:test:3.

  • Entourez-la de <>, soit <urn:records:test:3>, et Discourse inverse les deux derniers segments, comme ici : urn:records:3:test. Un clic droit pour copier vous donnera soit urn:records soit test:3, selon l’emplacement exact de votre curseur de souris. Un clic gauche ne produit rien, car elle n’est pas tout à fait traitée comme une URI.

  • Utilisez la syntaxe complète de lien, c’est-à-dire [texte sur `urn:records:test:3`](urn:records:test:3), et Discourse supprime le dernier segment de l’URI copiable par clic droit — et là encore, non cliquable en direct —, comme ici dans texte sur urn:records:test:3, où un clic droit pour copier donnera urn:records:test, ou comme avec [`urn:records:test:3`](urn:records:test:3), visible ici dans urn:records:test:3, où un clic droit pour copier donnera urn:records:test ou 3, selon l’emplacement exact de votre curseur de souris.

Je n’ai pas effectué de tests exhaustifs sur toutes les constructions URI valides. urn:records:test:3 est simplement un exemple concret local.

3 « J'aime »

En effet, le paramètre de site allowed_href_schemes ne fonctionne qu’avec les schémas utilisant le format scheme://.

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/addon/sanitizer.js#L59

4 « J'aime »

Je ne sais pas si cela reconnaît un bug ou signifie « oui, c’est le comportement attendu »…

Pourriez-vous préciser ?

1 « J'aime »

C’est en effet un bogue. Il est causé par notre code de nettoyage qui ne reconnaît que les schémas href commençant par le format scheme://.

5 « J'aime »

Je viens de rencontrer ce bug avec l’URI geo, qui ressemble à geo:36.95733984,-122.0172856.

Je vois qu’il y a une exception pour l’URI tel :

    if (allowedHrefSchemes.includes("tel")) {
      extraHrefMatchers.push(new RegExp("^tel://\\\\+?[\\\\w\\\\.\\\\-]+", "i"));

Il existe Uniform Resource Identifier (URI) Schemes, mais j’ai utilisé List of URI schemes - Wikipedia pour vérifier les schémas car ils incluent des exemples. Je regarde le, euh, « suffixe » du nom du schéma, le :// (comment appelle-t-on ça ? « Format du schéma » ?).

Après un examen attentif, il semble qu’il n’y ait que trois modèles utilisés :

  • ://
  • :/
  • :

Mon cerveau a du mal à suivre où cela se produit par rapport à l’écriture du Markdown et à la conversion en href, mais je pense que si nous pouvons trouver comment vérifier ces trois formats, nous devrions être bons pour tout schéma ajouté par l’administrateur.

Aucune idée sur la façon de valider par schéma… :thinking:


Mes noms de code non officiels pour les formats :

  • : « observation »
  • :/ « sceptique »
  • :// - « doublement sceptique »
1 « J'aime »

Copier et coller le texte suivant dans Discourse :

Pour des messages et appels sécurisés, contactez-moi via Snikket/XMPP à xmpp:maiki@chat.v2.talkgroup.xyz.

Produit (avec xmpp ajouté aux schémas de lien autorisés) :

Pour des messages et appels sécurisés, contactez-moi via Snikket/XMPP à <a href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz" dir="ltr">xmpp:maiki@chat.v2.talkgroup.xyz</a>.

Le problème ici réside dans href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz". À noter comme cas d’utilisation pour ce bug. :slight_smile:

2 « J'aime »

Existe-t-il une solution de contournement pour les URI GEO ? Je ne suis pas développeur.