Error en Discourse_docker (bloqueado:csp) con svg-sprite al usar subcarpetas

Tenemos toda la lógica en su lugar para los sprites SVG en escenarios de subcarpetas, y varios sitios la utilizan con éxito. En este caso, nos hemos encontrado con un caso límite muy específico. Al verificar las variables clave en el sitio de @vkozyrev (en la consola del navegador):

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

Todo parece correcto. Ahora, al cargar la hoja de sprites SVG, usamos loadScript, que a su vez llama a Discourse.getURL. Esta función es la responsable de agregar el prefijo de la subcarpeta. Probémoslo:

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

Vaya… eso no hizo nada. Otra URL aleatoria funciona bien:

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

Una investigación más detallada revela esta línea dentro de getUrl:

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

O, en español: “si la URL ya contiene el prefijo de la subcarpeta, no hacer nada”. Por lo tanto, el problema aquí es que el prefijo de la subcarpeta de @vkozyrev (/sales-community) está incluido en medio de la URL de la hoja de sprites SVG:

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

He hecho la verificación más específica, de modo que solo verifica el prefijo de la subcarpeta al inicio de la URL:

Aunque esto me hace pensar en otros problemas potenciales… por ejemplo, si alguien quisiera que su prefijo de subcarpeta fuera /t o /about, o cualquier otra URL que usamos en Discourse :thinking:

10 Me gusta