Comment surcharger une méthode dans post-cooked.js.es6 dans 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?

As-tu réussi à trouver une solution à cela ? Je serais très heureux si tu pouvais la partager.

api.decorateCooked ne suffit-il pas ?

Je ne suis pas sûr. Je ne l’ai pas encore examiné. Je souhaite remplacer
discourse/app/assets/javascripts/discourse/app/widgets/post-cooked.js at eab560fe2aa9053f6d227d29ec6c1ad0939ea940 · discourse/discourse · GitHub
_computedCooked par catégorie.
Je veux remplacer

 cookedDiv.innerHTML = this.attrs.cooked;

par du contenu personnalisé selon la catégorie. Mais cela a du sens. Cela devrait également être possible avec decorateCooked. Après avoir un peu lu, il semble que decorateCookedElement soit le bon choix, car je ne souhaite pas utiliser jQuery. Merci beaucoup :smiley:

Après avoir bidouillé pendant une journée, je suis tombé sur cette réponse.

Il semble que ce fut un effort perdu et que je dois emprunter une autre voie.

Lorsque je définis elem.innerHTML sur <script>alert(1)</script>, cela devient déséchapé. (je remarque en tapant ceci dans le compositeur que cela sera supprimé dans l’aperçu si je le tape sans échappement). Est-ce un problème ou la CSP l’empêchera-t-elle ?

Mitigate XSS Attacks with Content Security Policy

Les publications incluant des balises script dans le cadre d’une explication semblent également générer ces erreurs CSP. Je suis vraiment confus maintenant. Dois-je m’inquiéter du XSS stocké ou la CSP le bloquera-t-elle simplement ? Dans le compositeur, j’utilise CKEditor qui prévient le XSS auto. Si je dois m’en soucier, il semble que je doive élaguer les balises non sécurisées. Pour l’instant, je fais simplement :

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

mais cela semble n’avoir aucun effet car définir elem.innerHTML sur cette valeur déséchappe simplement les entités HTML.

EDIT : J’ai enfin trouvé la source de ma confusion : l’inspection de l’élément ne vous montre pas le vrai HTML. Il convertit déjà les entités HTML.

Si vous cliquez sur « éditer en HTML » dans l’inspecteur, il devient clair que tout est en fait correct. Le fait de voir des balises autrement invisibles être rendues aurait déjà dû m’orienter dans cette direction.