Emoji Picker no está usando URLs CDN para emojis personalizados

Descripción

Las rutas de emoji estándar no se convierten en URL de CDN, mientras que las rutas de emoji de administrador se convierten correctamente.

Evidencia

Controlador estándar (sin conversión CDN):

Controlador de administrador (conversión correcta usando EmojiSerializer):

Las rutas de emoji estándar deben convertirse en URL de CDN como las rutas de emoji de administrador.

2 Me gusta

¿Ves estas URL en alguna parte de la interfaz de usuario? Sospecho que se están convirtiendo en URL de CDN en la aplicación de JavaScript antes de mostrarse.

Comprobé y puedo confirmar que los emojis utilizan URL de S3 directamente (comenzando con //) en la salida renderizada, no URL de CDN.

¿En qué página ves esto?

Puedes ver esto en la página del editor de publicaciones al usar el selector de emojis. Cuando se cargan emojis personalizados, utilizan puntos de conexión S3 directamente, como:

https://assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/1/d/1de8f76096f76cf393640bdcff387ec9ae33dd3e.gif

Esto muestra que las rutas no se están convirtiendo a URLs de CDN como se esperaba.


Probando emoji personalizado :awthanks:

:up_arrow: esto se está enviando desde la CDN de S3… Tenemos un problema con el selector en sí @j.jaffeux

No está usando la CDN de S3 para emojis personalizados

Esta interfaz de usuario está usando la CDN de S3

Así que esto es muy específico del selector de emojis, mejorando el título aquí.

1 me gusta

Gracias, eso debería solucionarlo:

3 Me gusta

Gracias por tu PR que permite el uso de CDN para emojis personalizados.

Si bien tu solución de frontend solicita correctamente las direcciones CDN de emojis, me preocupa la seguridad del backend.
El endpoint https://meta.discourse.org/emojis.json todavía expone URLs de origen S3 como //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png, lo que podría generar un abuso malicioso y una facturación excesiva de S3.

Para una mayor seguridad, sugiero devolver directamente las direcciones CDN, de manera similar a como se manejan los emojis no personalizados.

Aquí está mi intento de arreglar el código:

class EmojisController < ApplicationController
  def index
    emojis = Emoji.allowed.group_by(&:group)
    
    emojis.each do |_, emoji_list|
      emoji_list.each do |emoji|
        emoji.url = Discourse.store.cdn_url(emoji.url) if emoji.url.present?
      end
    end
    
    render json: MultiJson.dump(emojis)
  end
  def search_aliases
    render json: MultiJson.dump(Emoji.search_aliases)
  end
end

Sí, sé que lo hacemos directamente para los emojis no personalizados en emoji.rb, lo cual preferiría en lugar del controlador. Quiero asegurarme de que esto no cause problemas, así que por ahora hice la solución más simple, pero investigaré esto en el futuro.

2 Me gusta

Cerrando porque el problema original está solucionado, siéntete libre de abrir otra solicitud de función para el seguimiento.

Estos activos son pequeños y generalmente públicos, el riesgo parece bajo.

2 Me gusta