Lorsqu’un composant de thème déclare des ressources dans son about.json, Discourse les stocke et les sert sous /uploads/.
Si le paramètre du site « Empêcher les anonymes de télécharger des fichiers » est activé, ces ressources de thème renvoient 404 pour les utilisateurs anonymes car elles sont traitées comme des téléchargements protégés.
Cela peut casser tout thème ou composant qui charge dynamiquement son propre JavaScript — par exemple, le composant Aperçus de la liste de sujets.
Étapes pour reproduire
- Installez le composant Aperçus de la liste de sujets (
https://github.com/merefield/discourse-tc-topic-list-previews). - Vérifiez qu’il se charge correctement pour les utilisateurs connectés et anonymes.
- Activez le paramètre du site Empêcher les anonymes de télécharger des fichiers.
- Visitez la page d’accueil du forum en tant qu’utilisateur déconnecté et vérifiez la console du navigateur.
Comportement observé
-
Les requêtes pour des fichiers tels que
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsrenvoient 404 Not Found (en fait, une page d’erreur HTML).
-
La console du navigateur affiche :
Refused to execute script ... because its MIME type ('text/html') is not executable -
Les composants qui dépendent de ce fichier (par exemple,
preview-edits.gjsdans Aperçus de la liste de sujets) ne parviennent pas à s’exécuter, ce qui entraîne des problèmes de mise en page.
Comportement attendu
Les ressources de thème définies dans about.json doivent toujours être accessibles publiquement, quel que soit le paramètre « Empêcher les anonymes de télécharger des fichiers ».
Ce sont des ressources statiques, pas des téléchargements d’utilisateurs, et elles ne devraient pas hériter des restrictions d’accès au niveau du téléchargement.
Détails techniques
-
Version de Discourse : 3.6.0.beta2 (la plus récente)
-
Composant : Aperçus de la liste de sujets
-
Extrait pertinent de
about.json:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
Lors de l’installation du thème, Discourse stocke ce fichier en tant que
Uploadsous/uploads/default/original/.... -
L’activation de la restriction des anonymes empêche Discourse de traiter les requêtes pour ce chemin, même s’il s’agit d’une ressource de thème.
Résolution proposée
Les ressources de thème téléchargées via about.json devraient être :
- Servies à partir d’un chemin dédié (par exemple,
/theme-assets/ou/assets/)
ou - Exemptées de la restriction « Empêcher les anonymes de télécharger des fichiers ».
Impact
Cela affecte tout thème ou composant qui dépend de ressources de thème (JS/CSS/images) chargées dynamiquement côté client.
Casse des composants d’interface utilisateur majeurs pour les visiteurs anonymes lorsque la restriction de téléchargement des anonymes est activée.