Bug(s) en el manejo de URIs de Discourse en contenido markdown

urn:records:test:3 es un URI válido según RFC 3986.

Discourse no lo maneja correctamente, sin importar qué formato de markdown se utilice.

  • Simplemente pégalo, como un URI HTTP, y Discourse ignora por completo el hecho de que sea un URI, como se ve aquí: urn:records:test:3.

  • Envuélvelo en \u003c\u003e, como \u003curn:records:test:3\u003e, y Discourse invierte los dos últimos segmentos, como se muestra aquí: \u003curn:records:test:3\u003e. Si haces clic derecho y copias, obtendrás urn:records o test:3, dependiendo de la posición exacta del cursor del mouse. Si haces clic izquierdo, no ocurre nada, porque no se trata completamente como un URI.

  • Colócalo en una etiqueta de enlace completa, es decir, [texto sobre `urn:records:test:3`](urn:records:test:3), y Discourse elimina el último segmento al copiar con clic derecho del URI (que nuevamente no es clicable directamente), como se ve aquí en texto sobre urn:records:test:3, donde copiar con clic derecho obtendrá urn:records:test, o como en [`urn:records:test:3`](urn:records:test:3), vivo aquí en urn:records:test:3, donde copiar con clic derecho obtendrá urn:records:test o 3, dependiendo de la posición exacta del cursor del mouse.

No he realizado pruebas exhaustivas de todas las construcciones válidas de URI. urn:records:test:3 simplemente resulta ser un ejemplo local del mundo real.

3 Me gusta

De hecho, la configuración del sitio allowed_href_schemes solo funciona con esquemas que utilizan el formato scheme://.

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

4 Me gusta

No puedo determinar si eso reconoce un error o si dice “sí, ese es el comportamiento esperado”…

¿Podrías aclararlo?

1 me gusta

Efectivamente, se trata de un error. Es causado por nuestro código de saneamiento, que solo reconoce esquemas de href que comienzan con el formato esquema://.

5 Me gusta

Acabo de encontrar este error con el URI geo, que se ve así: geo:36.95733984,-122.0172856.

Veo que hay una excepción para el URI tel:

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

Existe Uniform Resource Identifier (URI) Schemes, pero utilicé List of URI schemes - Wikipedia para verificar los esquemas, ya que incluyen ejemplos. Estoy mirando el, um, “sufijo” del nombre del esquema, el :// (¿cómo se llama eso? ¿“Formato del esquema”?).

Tras una minuciosa inspección visual, parece que solo se usan tres patrones:

  • ://
  • :/
  • :

Mi cerebro tiene dificultades para rastrear dónde ocurre esto en relación con la escritura de Markdown y la conversión a href, pero creo que si podemos averiguar cómo verificar esos tres formatos, deberíamos estar bien con cualquier esquema añadido por el administrador.

No tengo idea de cómo validar por esquema… :thinking:


Mis nombres de código no oficiales para los formatos:

  • : “observando”
  • :/ “escéptico”
  • :// - “doble escéptico”
1 me gusta

Copiar y pegar lo siguiente en Discourse:

Para mensajería y llamadas seguras, contáctame a través de Snikket/XMPP en xmpp:maiki@chat.v2.talkgroup.xyz.

Genera (con xmpp agregado a allowed href schemes):

Para mensajería y llamadas seguras, contáctame a través de Snikket/XMPP en <a href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz" dir="ltr">xmpp:maiki@chat.v2.talkgroup.xyz</a>.

El problema en este caso es href="mailto:xmpp:maiki@chat.v2.talkgroup.xyz". Lo registro como un caso de uso para este error. :slight_smile:

2 Me gusta

¿Puede esto ser de alguna manera una solución para las URI GEO? No soy desarrollador.