Los recursos del tema servidos desde `/uploads/` se rompen cuando "Evitar que los anónimos descarguen archivos" está habilitado

Cuando un componente de tema declara activos en su about.json, Discourse los almacena y los sirve bajo /uploads/.
Si la configuración del sitio “Evitar que los anónimos descarguen archivos” está habilitada, estos activos del tema devuelven 404 para los usuarios anónimos porque se tratan como cargas protegidas.
Esto puede romper cualquier tema o componente que cargue dinámicamente su propio JavaScript; por ejemplo, el componente Topic List Previews.


Pasos para reproducir

  1. Instala el componente Topic List Previews (https://github.com/merefield/discourse-tc-topic-list-previews).
  2. Verifica que se carga correctamente tanto para usuarios autenticados como anónimos.
  3. Habilita la configuración del sitio Evitar que los anónimos descarguen archivos.
  4. Visita la página de inicio del foro como usuario desconectado y revisa la consola del navegador.

Comportamiento observado

  • Las solicitudes de archivos como

    /uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.js
    

    devuelven 404 No Encontrado (en realidad, una página de error HTML).

  • La consola del navegador muestra:

    Refused to execute script ... because its MIME type ('text/html') is not executable
    
  • Los componentes que dependen de ese archivo (por ejemplo, preview-edits.gjs en Topic List Previews) fallan al ejecutarse, causando problemas de diseño.


Comportamiento esperado

Los activos del tema definidos en about.json siempre deben ser accesibles públicamente, independientemente de la configuración de “Evitar que los anónimos descarguen archivos”.
Son activos estáticos, no cargas de usuario, y no deben heredar restricciones de acceso a nivel de carga.


Detalles técnicos

  • Versión de Discourse: 3.6.0.beta2 (última)

  • Componente: Topic List Previews

  • Fragmento relevante de about.json:

    "assets": {
      "imagesloaded": "assets/imagesloaded.js"
    }
    
  • Durante la instalación del tema, Discourse almacena este archivo como una Upload bajo /uploads/default/original/....

  • Habilitar la restricción de anónimos hace que Discourse bloquee las solicitudes para esa ruta, a pesar de ser un activo del tema.


Resolución propuesta

Los activos del tema cargados a través de about.json deben ser:

  • Servidos desde una ruta dedicada (por ejemplo, /theme-assets/ o /assets/)
    o
  • Exentos de la restricción “Evitar que los anónimos descarguen archivos”.

Impacto

Esto afecta a cualquier tema o componente que dependa de activos del tema (JS/CSS/imágenes) cargados dinámicamente en el cliente.
Rompe componentes importantes de la interfaz de usuario para visitantes anónimos cuando la restricción de descarga de anónimos está activada.

3 Me gusta

Gracias por la descripción tan detallada, estoy de acuerdo en que tiene sentido hacer algo aquí.

1 me gusta

No creo que esto se limite a los activos del tema. Parece que habilitar esa configuración también rompe cosas como el logotipo del sitio, el favicon, etc. para los usuarios anónimos. La implementación es un bloqueo completo en /uploads/* para los anónimos.

¿También ves un logotipo roto en tu sitio para los anónimos @lhkjacky?

1 me gusta