Quando um componente de tema declara ativos em seu about.json, o Discourse os armazena e os serve em /uploads/.
Se a configuração do site “Impedir que anônimos baixem arquivos” estiver ativada, esses ativos de tema retornarão 404 para usuários anônimos porque são tratados como uploads protegidos.
Isso pode quebrar qualquer tema ou componente que carregue dinamicamente seu próprio JavaScript — por exemplo, o componente Topic List Previews.
Passos para reproduzir
- Instale o componente Topic List Previews (
https://github.com/merefield/discourse-tc-topic-list-previews). - Verifique se ele carrega corretamente para usuários logados e anônimos.
- Ative a configuração do site Impedir que anônimos baixem arquivos.
- Visite a página inicial do fórum como um usuário deslogado e verifique o console do navegador.
Comportamento observado
-
Solicitações de arquivos como
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsretornam 404 Not Found (na verdade, uma página de erro HTML).
-
O console do navegador mostra:
Refused to execute script ... because its MIME type ('text/html') is not executable -
Componentes que dependem desse arquivo (por exemplo,
preview-edits.gjsno Topic List Previews) falham ao serem executados, causando problemas de layout.
Comportamento esperado
Ativos de tema definidos em about.json devem ser sempre acessíveis publicamente, independentemente da configuração “Impedir que anônimos baixem arquivos”.
São ativos estáticos, não uploads de usuários, e não devem herdar restrições de acesso de nível de upload.
Detalhes técnicos
-
Versão do Discourse: 3.6.0.beta2 (mais recente)
-
Componente: Topic List Previews
-
Trecho relevante do
about.json:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
Durante a instalação do tema, o Discourse armazena este arquivo como um
Uploadem/uploads/default/original/.... -
A ativação da restrição de anônimos faz com que o Discourse bloqueie as solicitações para esse caminho, mesmo sendo um ativo de tema.
Resolução proposta
Ativos de tema enviados via about.json devem ser:
- Servidos a partir de um caminho dedicado (por exemplo,
/theme-assets/ou/assets/)
ou - Isentos da restrição “Impedir que anônimos baixem arquivos”.
Impacto
Isso afeta qualquer tema ou componente que dependa de ativos de tema (JS/CSS/imagens) carregados dinamicamente no cliente.
Quebra componentes importantes da interface do usuário para visitantes anônimos quando a restrição de download de anônimos está ativada.