Ativos de tema servidos de `/uploads/` quebram quando “Impedir que anônimos baixem arquivos” está ativado

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

  1. Instale o componente Topic List Previews (https://github.com/merefield/discourse-tc-topic-list-previews).
  2. Verifique se ele carrega corretamente para usuários logados e anônimos.
  3. Ative a configuração do site Impedir que anônimos baixem arquivos.
  4. 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.js
    

    retornam 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.gjs no 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 Upload em /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.

3 curtidas

Obrigado pela descrição super detalhada, concordo que faz sentido fazer algo aqui.

1 curtida

Não acho que isso se limite a ativos de tema. Parece que habilitar essa configuração também quebra coisas como o logotipo do site, favicon, etc. para usuários anônimos. A implementação é um bloqueio completo em /uploads/* para anônimos.

Você também está vendo um logotipo quebrado em seu site para anônimos @lhkjacky?

1 curtida