forked from ORGANISATION-KA-INTERNATIONALE/FEDIVERSE-OKI
Porte la section Funkwhale (MIZIK) et corrige la CSP par page
- src/lib/server/funkwhale.ts : 50 morceaux aléatoires de mizik.o-k-i.net, filtre local, mapping vers le lecteur audio intégré (10 affichés) - Section « Morceaux » sur l'accueil entre podcast et timeline, FR/EN - Bus audio partagé (audio-bus.svelte.ts) : un seul flux à la fois entre le lecteur podcast et le lecteur musique - Lecteur audio : méta générique (artiste — album) pour les morceaux - CSP : mizik.o-k-i.net ajouté à img-src/media-src - Fix critique : la balise meta CSP embarque désormais la politique complète (lue depuis _headers) — default-src 'self' seul bloquait par intersection les images et médias des instances ; frame-ancestors retiré de la meta (ignoré hors en-tête)
This commit is contained in:
@@ -14,6 +14,20 @@ function* walk(dir) {
|
||||
}
|
||||
}
|
||||
|
||||
// La politique complète (hors script-src) est lue depuis build/_headers,
|
||||
// unique source de vérité partagée avec .htaccess
|
||||
const headers = readFileSync(join(BUILD_DIR, '_headers'), 'utf8');
|
||||
const cspLine = headers
|
||||
.split('\n')
|
||||
.map((line) => line.trim())
|
||||
.find((line) => line.startsWith('Content-Security-Policy:'));
|
||||
if (!cspLine) throw new Error('[csp] Content-Security-Policy introuvable dans build/_headers');
|
||||
const sharedPolicy = cspLine
|
||||
.slice('Content-Security-Policy:'.length)
|
||||
.trim()
|
||||
// frame-ancestors est ignoré (et logué) dans une balise meta : il reste porté par l'en-tête HTTP
|
||||
.replace(/frame-ancestors 'none';\s*/, '');
|
||||
|
||||
let pages = 0;
|
||||
|
||||
for (const file of walk(BUILD_DIR)) {
|
||||
@@ -28,7 +42,7 @@ for (const file of walk(BUILD_DIR)) {
|
||||
|
||||
if (hashes.size === 0) continue;
|
||||
|
||||
const csp = `default-src 'self'; script-src 'self' ${[...hashes].join(' ')}`;
|
||||
const csp = `default-src 'self'; script-src 'self' ${[...hashes].join(' ')}; ${sharedPolicy}`;
|
||||
const meta = `<meta http-equiv="Content-Security-Policy" content="${csp}" />`;
|
||||
|
||||
const anchor = html.match(/<meta charset="[^"]+"\s*\/?>/);
|
||||
@@ -41,4 +55,4 @@ for (const file of walk(BUILD_DIR)) {
|
||||
pages++;
|
||||
}
|
||||
|
||||
console.log(`[csp] meta CSP injectée dans ${pages} page(s)`);
|
||||
console.log(`[csp] meta CSP complète injectée dans ${pages} page(s)`);
|
||||
|
||||
Reference in New Issue
Block a user