Cargas seguras de medios rompen logos de categorías

Las opciones “Medios Seguros” + “Habilitar cargas en S3” parecen romper los logotipos de las categorías.

Recientemente descubrí que los documentos cargados podían verse o descargarse mediante un enlace URL directo por parte de usuarios que no tenían acceso a la publicación privada donde se había cargado el documento. Entendí que primero había que habilitar las cargas en S3 para usar la función de Medios Seguros, así que lo habilité primero y copié manualmente las cargas desde el servidor de Discourse al bucket de S3. Luego seguí esta publicación para habilitar Medios Seguros:

Después de seguir ese procedimiento, tuve que ejecutar un remapeo de Discourse para cambiar /uploads/default/ por //bucketname-etc-etc/. Tras el remapeo, ejecuté rake posts:rebake y todo parecía estar bien en su mayoría. Todas las demás cargas (documentos e imágenes en publicaciones, imágenes de marca del sitio, etc.) seguían mostrándose y enlazándose correctamente después de habilitar Medios Seguros y ejecutar las tareas rake y de remapeo correspondientes. Sí tuve que volver a cargar los avatares de usuario y los logotipos de grupo, pero una vez que se volvieron a cargar, todos se mostraron correctamente y tenían las nuevas URLs cortas y las URLs de secure-media-uploads como se esperaba.

Sí noté que las imágenes de logotipo de las categorías ya no se mostraban. Mientras revisaba con el modo desarrollador de mi navegador, noté que al volver a cargar una imagen de logotipo de categoría, se creaba la URL correcta de secure-media-uploads, mostrando la imagen correctamente. Sin embargo, una vez que hacía clic en “Guardar categoría”, la página de la categoría se actualizaba e intentaba incorrectamente mapear directamente a la URL sin firmar de AWS S3 para la imagen, lo que impedía que se mostrara:

Cada página en Discourse que muestra una imagen de logotipo de categoría intenta mapear la imagen directamente a la URL sin firmar de AWS S3 en lugar de a la URL de secure-media-uploads.

Como solución alternativa, he tenido que visitar laboriosamente cada objeto de imagen de logotipo de categoría en AWS S3 y cambiar los permisos a Lectura pública.

He confirmado que este comportamiento existe en los navegadores Chrome, Firefox y Microsoft Edge. He intentado las tareas rake posts:rebake y uploads:secure_upload_analyse_and_update, pero parecen no hacer nada con el logotipo de la categoría. ¿Quizás hay otra tarea que solucione estas URLs de imagen de logotipo de categoría mapeadas incorrectamente? ¿O esto es en realidad por diseño, requiriendo que todos los objetos de carga en S3 sean de lectura pública, excepto aquellos que son seguros (publicaciones privadas)?

3 Me gusta

Gracias por comentarlo, no sabía que existían los logotipos de categorías :sweat: Lo revisaré esta semana e intentaré solucionarlo para ti aquí.

6 Me gusta

¡Genial! Muchas gracias @martin!

3 Me gusta

Creo que el problema principal aquí es que secure_upload_analyse_and_update es un poco excesivo al determinar qué debería y qué no debería ser seguro, ya que la clase UploadSecurity (discourse/lib/upload_security.rb at main · discourse/discourse · GitHub) verifica si este tipo de cargas públicas (por ejemplo, avatares, logotipos de categorías, etc.) deben ser seguros o no en el momento de la carga, y este type no está presente al volver a verificar en la tarea rake.

Tengo una tarea registrada internamente para mejorar esto, verificando todos los lugares donde una carga puede residir en el momento de esta comprobación de seguridad, pero eso está lejos de ocurrir y forma parte de un plan más amplio para almacenar las referencias de carga de una manera más ordenada.

De todos modos, estoy construyendo ahora un PR para solucionar este problema haciendo que los logotipos y fondos de categoría sean de tipo público al considerar si deben ser seguros o no. Una vez que esto se fusiona y tú actualizas, solo tendrás que volver a cargar las imágenes de categoría y todo debería funcionar correctamente.

4 Me gusta