Você vê esses URLs sendo usados em algum lugar na interface do usuário? Suspeito que eles estejam sendo convertidos em URLs de CDN no aplicativo JS antes de serem exibidos.
Você pode ver isso na página do compositor de posts ao usar o seletor de emojis. Quando os emojis personalizados são carregados, eles usam endpoints S3 diretamente, como:
Obrigado pela sua PR que permite o uso de CDN para emojis personalizados.
Embora a sua correção de frontend solicite corretamente os endereços da CDN de emojis, estou preocupado com a segurança do backend.
O endpoint https://meta.discourse.org/emojis.json ainda expõe URLs de origem S3 como //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png, o que pode levar a abusos maliciosos e cobranças excessivas de S3.
Para uma melhor segurança, sugiro retornar diretamente os endereços da CDN, semelhante a como os emojis não personalizados são tratados.
Aqui está minha tentativa de corrigir o 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
Sim, eu sei que fazemos isso diretamente para emojis não personalizados em emoji.rb, o que eu prefiro em vez do controller. Quero garantir que isso não cause problemas, então fiz a correção mais simples por enquanto, mas vou investigar isso no futuro.