Emoji Picker non utilizza URL CDN per le emoji personalizzate

Descrizione

I percorsi delle emoji standard non vengono convertiti in URL CDN, mentre i percorsi delle emoji dell’amministratore vengono convertiti correttamente.

Evidenza

Controller standard (nessuna conversione CDN):

Controller amministratore (conversione corretta utilizzando EmojiSerializer):

I percorsi delle emoji standard dovrebbero essere convertiti in URL CDN come i percorsi delle emoji dell’amministratore.

2 Mi Piace

Vedi questi URL utilizzati da qualche parte nell’interfaccia utente? Sospetto che vengano convertiti in URL CDN nell’app JS prima di essere visualizzati.

Ho verificato e posso confermare che le emoji utilizzano URL S3 direttamente (a partire da //) nell’output renderizzato, non URL CDN.

Su quale pagina vedi questo?

Puoi vederlo nella pagina di composizione del post quando usi il selettore di emoji. Quando le emoji personalizzate vengono caricate, utilizzano direttamente gli endpoint S3, come:\n\nhttps://assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/1/d/1de8f76096f76cf393640bdcff387ec9ae33dd3e.gif\n\nCiò dimostra che i percorsi non vengono convertiti in URL CDN come previsto.


Test delle emoji personalizzate :awthanks:

:up_arrow: questo viene distribuito dalla CDN S3… Abbiamo un problema con il picker stesso @j.jaffeux

Non sta utilizzando la CDN S3 per le emoji personalizzate

Questa interfaccia utente sta utilizzando la CDN S3

Quindi questo è molto specifico per il picker delle emoji, migliorando il titolo qui.

1 Mi Piace

Grazie, questo dovrebbe risolvere il problema:

3 Mi Piace

Grazie per la tua PR che abilita l’uso della CDN per le emoji personalizzate.

Mentre la tua correzione frontend richiede correttamente gli indirizzi CDN delle emoji, sono preoccupato per la sicurezza del backend.
L’endpoint https://meta.discourse.org/emojis.json espone ancora URL sorgente S3 come //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png, che potrebbero potenzialmente portare ad abusi malevoli e a fatturazione S3 eccessiva.

Per una maggiore sicurezza, suggerisco di restituire direttamente gli indirizzi CDN, in modo simile a come vengono gestite le emoji non personalizzate.

Ecco il mio tentativo di correggere il codice:

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ì, so che lo facciamo direttamente per le emoji non personalizzate in emoji.rb, cosa che preferirei rispetto al controller. Voglio assicurarmi che ciò non causi problemi, quindi per ora ho apportato la correzione più semplice, ma approfondirò in futuro.

2 Mi Piace

Chiudo perché il problema originale è stato risolto, sentiti libero di aprire un’altra richiesta di funzionalità per il follow-up.

Questi asset sono minuscoli e generalmente pubblici, il rischio sembra basso.

2 Mi Piace