Les ressources de thème servies depuis `/uploads/` échouent lorsque « Empêcher les anonymes de télécharger des fichiers » est activé

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

  1. Installez le composant Aperçus de la liste de sujets (https://github.com/merefield/discourse-tc-topic-list-previews).
  2. Vérifiez qu’il se charge correctement pour les utilisateurs connectés et anonymes.
  3. Activez le paramètre du site Empêcher les anonymes de télécharger des fichiers.
  4. 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.js
    

    renvoient 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.gjs dans 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 Upload sous /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.

3 « J'aime »

Merci pour la description très détaillée, je suis d’accord qu’il serait judicieux de faire quelque chose ici.

1 « J'aime »

Je ne pense pas que cela soit limité aux ressources du thème. Il semble que l’activation de ce paramètre casse également des éléments tels que le logo du site, l’icône favicon, etc. pour les utilisateurs anonymes. L’implémentation est un blocage complet sur /uploads/* pour les anonymes.

Voyez-vous également un logo cassé sur votre site pour les anonymes @lhkjacky ?

1 « J'aime »