Incrustación está ROTA en 3.0.4 (estable)

Tengo la sospecha de que este cambio

rompió la forma en que uso la incrustación en mi sitio web. ¿Alguien puede indicarme qué se cambió exactamente?

Uso Discourse para crear temas para las publicaciones de mi blog (como sistema de comentarios). Mi sitio web está dividido en dos partes para dos idiomas, por lo que uso dos hosts para filtrar las publicaciones en inglés (/blog/somepost) y alemán (/de/blog/somepost) en diferentes categorías del foro.

Las publicaciones del lado alemán del sitio web ya no se incrustan desde que se actualizó mi Discourse. Supongo que tiene algo que ver con el parche anterior.

Cualquier ayuda para intentar resolver esto sería muy apreciada.

2 Me gusta

Por otro lado, podría ser lo que sea que sea este problema:

Ciertamente me aparecen esas DOMExceptions. De nuevo, ¡cualquier ayuda sería muy apreciada!

1 me gusta

Sí, estaría revisando las políticas y configuraciones de seguridad de tu foro y del sitio web incrustado. La captura de pantalla se ve bien. ¿Qué script estás usando y qué hay de tus otras configuraciones de incrustación? ¿Has hecho algún cambio reciente allí?

Mi foro utiliza esta función de publicación incrustada varias veces al día y funciona muy bien en este momento, así que sé que no está rota. Estamos usando la última beta y estamos alojados, así que confío en la configuración.

1 me gusta

¡Hola, gracias por intentar ayudar!

No tengo control sobre ninguna política de seguridad, ya que ambos sitios son alojados por proveedores de hosting. Dudo que ellos hayan causado esto. Pero lo investigaré con mi proveedor de Discourse.

Uso este script en el blog (es un motor de sitio estático llamado Hugo):

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'https://forum.fab.industries/',
                     discourseEmbedUrl: '{{ .Permalink }}' };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

No he cambiado nada de eso desde que lo integré por primera vez hace unos meses.

Todo lo que cambié fue un poco de CSS personalizado que añadí al tema del foro. Lo revertiré hoy y veré si eso soluciona el problema.

De acuerdo. Revertir el CSS no hizo nada. De todos modos, era una posibilidad remota.

Ahora también pude confirmar que la incrustación está rota en general. El lado en inglés del blog también dejó de funcionar. Las nuevas páginas se quedan atascadas en “Cargando discusión…”.

Ahora estoy bastante seguro de que esto se rompió cuando mi proveedor actualizó mi foro a 3.0.4, pero no sé desde qué versión me actualizaron. Así que todavía sospecho de este parche de alguna manera:

Creo que el hecho de que el navegador esté lanzando estos errores relacionados con el DOM no es una coincidencia:

Desactivar CSP en la configuración de administración no parece solucionarlo.

Así que main tiene esto

TopicEmbed.import_remote(@embed_url, user: User.find_by(username_lower: username.downcase))

y stable tiene esto

TopicEmbed.import_remote(user, @embed_url)

Nota el orden de los parámetros.

Ahora el backport del parche de seguridad cambió la firma de la función en stable al nuevo orden de parámetros, así que

def self.import_remote(import_user, url, opts = nil)

se convirtió en

def self.import_remote(url, opts = nil)

y ahora el parámetro url recibe un objeto User.

Cambiar la llamada a la función resuelve el problema

diff --git a/lib/topic_retriever.rb b/lib/topic_retriever.rb
index b798df6cd7..6186ce5868 100644
--- a/lib/topic_retriever.rb
+++ b/lib/topic_retriever.rb
@@ -50,6 +50,6 @@ class TopicRetriever
     user = User.where(username_lower: username.downcase).first
     return if user.blank?

-    TopicEmbed.import_remote(user, @embed_url)
+    TopicEmbed.import_remote(@embed_url, user: user)
   end
 end

@blake

8 Me gusta

He enviado una PR que soluciona este problema FIX broken topic embedding because of incomplete security patch (#22088) by communiteq · Pull Request #22184 · discourse/discourse · GitHub

9 Me gusta

Gracias @RGJ por la corrección, esa PR ya se fusionó.

4 Me gusta