Erreur Discourse_docker (blocked:csp) avec svg-sprite lors de l'utilisation de sous-dossiers

Nous avons bien toute la logique en place pour les sprites SVG dans les scénarios de sous-dossiers, et elle est utilisée avec succès par plusieurs sites. Dans ce cas précis, nous avons rencontré un cas limite très spécifique. En examinant les variables clés sur le site de @vkozyrev (via la console du navigateur) :

> Discourse.SvgSpritePath
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"
> Discourse.BaseUri
"/sales-community"

Tout semble correct. Maintenant, lorsque nous chargeons la feuille de sprites SVG, nous utilisons loadScript, qui appelle à son tour Discourse.getURL. Cette fonction est chargée d’ajouter le préfixe du sous-dossier. Essayons :

> Discourse.getURL(Discourse.SvgSpritePath)
"/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js"

Hé… cela n’a rien fait. Un autre URL aléatoire fonctionne correctement :

> Discourse.getURL("/blah")
"/sales-community/blah"

En creusant un peu plus, on tombe sur cette ligne à l’intérieur de getUrl :

if (url.indexOf(Discourse.BaseUri) !== -1) return url;

Ou, en français : « si l’URL contient déjà le préfixe du sous-dossier, on abandonne ». Le problème ici est que le préfixe du sous-dossier de @vkozyrev (/sales-community) est inclus au milieu de l’URL de la feuille de sprites SVG :

/svg-sprite/sales-community-staging.rainmakers.co/svg-2-8ed106e6e3d908b1b86898dfe93a7bac0fd358f4.js

J’ai rendu la vérification plus précise, de sorte qu’elle ne vérifie le préfixe du sous-dossier qu’au début de l’URL :

Cela me fait cependant penser à d’autres problèmes potentiels… par exemple, si quelqu’un voulait que son préfixe de sous-dossier soit /t ou /about, ou toute autre URL que nous utilisons dans Discourse :thinking:

10 « J'aime »