Come sovrascrivere un metodo in post-cooked.js.es6 in un plugin?

Hi,

I’d like to customize the reply/embedded-post. This requires a modification to the _computeCooked method in post-cooked via a plugin; essentially when this.attrs.embeddedPost is true, render something else.

I noticed it’s easier to override or reopen ‘conventional’ Ember classes or the widgets created using ‘createWidget’. What would be the best way to achieve this for the PostCooked class?

Sei riuscito a trovare una soluzione a questo? Sarei molto felice se potessi condividerla.

Non basta api.decorateCooked?

Non sono sicuro. Non ci ho ancora dato un’occhiata. Voglio sostituire
discourse/app/assets/javascripts/discourse/app/widgets/post-cooked.js at eab560fe2aa9053f6d227d29ec6c1ad0939ea940 · discourse/discourse · GitHub
_computedCooked in base alla categoria.
Voglio sostituire

 cookedDiv.innerHTML = this.attrs.cooked;

con un contenuto personalizzato in base alla categoria. Ma ha senso. Dovrebbe essere possibile anche con decorateCooked. Dopo aver letto un po’, sembra che decorateCookedElement possa essere quello giusto, dato che non voglio usare jQuery. Grazie mille :smiley:

Dopo aver smanettato per un giorno, sono finito su questa risposta.

Sembra che sia stato uno sforzo inutile e che io debba prendere una strada diversa.
Quando imposto elem.innerHTML su <script>alert(1)</script>, viene de-escaped: (mentre lo scrivo nel compositore, vedo che verrà rimosso nell’anteprima se lo scrivo senza de-escaping). È un problema o la CSP lo bloccherà?
https://meta.discourse.org/t/mitigate-xss-attacks-with-content-security-policy/104243!csp error|690x191
Anche i post che includono tag script come parte di una spiegazione sembrano generare questi errori CSP. Ora sono davvero confuso. Devo preoccuparmi di XSS memorizzato o la CSP lo bloccherà semplicemente? Nel compositore uso CKEditor, che previene il self-XSS. Se devo preoccuparmene, sembra che debba rimuovere i tag non sicuri. Al momento faccio solo

  value = Loofah.fragment(value).scrub!(:escape).to_s

ma sembra non avere alcun effetto, perché impostare elem.innerHTML su questo valore de-escaperà semplicemente le entità HTML.
EDIT: Ho finalmente trovato la fonte della mia confusione: l’ispezione elemento non mostra l’HTML reale; converte già le entità HTML.


Se fai clic su “Modifica come HTML” nell’ispettore, diventa chiaro che tutto è effettivamente a posto. Il fatto che vengano renderizzati tag altrimenti invisibili avrebbe già dovuto indicarmi questa direzione.