Erro Discourse_docker (blocked:csp) com svg-sprite ao usar subpastas

Temos toda a lógica implementada para sprites SVG em cenários de subpastas, e ela é usada com sucesso por vários sites. Neste caso, encontramos um caso de borda muito específico. Verificando as variáveis principais no site de @vkozyrev (no console do navegador):

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

Parece correto. Agora, ao carregar a folha de sprites SVG, usamos loadScript, que por sua vez chama Discourse.getURL. Essa função é responsável por adicionar o prefixo da subpasta. Testando isso:

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

Estranho… isso não fez nada. Outra URL aleatória funciona bem:

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

Um pouco mais de investigação revela esta linha dentro de getUrl:

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

Ou, em português: “se a URL já contiver o prefixo da subpasta, desista”. Então, o problema aqui é que o prefixo da subpasta de @vkozyrev (/sales-community) está incluído no meio da URL da folha de sprites SVG:

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

Fiz a verificação mais específica, para que ela verifique o prefixo da subpasta apenas no início da URL:

Embora isso me faça pensar em outros problemas potenciais… por exemplo, se alguém quisesse que o prefixo da subpasta fosse /t ou /about, ou qualquer outra URL que usamos no Discourse :thinking:

10 curtidas