openvibers/openvibe.billing Commits
Console CSP: allow avatars from openvibe.media in img-src (#258)
Changes
@@@ -58,7 +58,7 @@ dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0}dt{c.shipped{max-width:1180px;margin:24px auto;padding:0 16px 24px;color:var(--muted);font-size:.85rem}`;const CSS_HASH = `sha256-${crypto.createHash('sha256').update(CSS).digest('base64')}`;--const CSP = `default-src 'none'; style-src '${CSS_HASH}'; img-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`;++const CSP = `default-src 'none'; style-src '${CSS_HASH}'; img-src 'self' https://openvibe.media; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`;// ── Formatting ───────────────────────────────────────────────const n = (v) => Number(v || 0).toLocaleString('en-US');@@@ -168,6 +168,7 @@ const DAY = 86_400_000;assert.strictEqual(r.headers.get('x-robots-tag'), 'noindex, nofollow');assert.strictEqual(r.headers.get('cache-control'), 'no-store');assert.match(r.headers.get('content-security-policy'), /default-src 'none'.*form-action 'self'.*frame-ancestors 'none'/);++ assert.match(r.headers.get('content-security-policy'), /img-src 'self' https:\/\/openvibe\.media(?:;|$)/, `${p} lets an avatar from openvibe.media show`);assert.strictEqual(r.headers.get('x-frame-options'), 'DENY');}const anon = await get('/cashouts');
@@ -58,7 +58,7 @@ dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0}dt{c
@@ -58,7 +58,7 @@ dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0}dt{c
.shipped{max-width:1180px;margin:24px auto;padding:0 16px 24px;color:var(--muted);font-size:.85rem}
.shipped{max-width:1180px;margin:24px auto;padding:0 16px 24px;color:var(--muted);font-size:.85rem}
`;
`;
const CSS_HASH = `sha256-${crypto.createHash('sha256').update(CSS).digest('base64')}`;
const CSS_HASH = `sha256-${crypto.createHash('sha256').update(CSS).digest('base64')}`;
-const CSP = `default-src 'none'; style-src '${CSS_HASH}'; img-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`;
+const CSP = `default-src 'none'; style-src '${CSS_HASH}'; img-src 'self' https://openvibe.media; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`;
// ── Formatting ───────────────────────────────────────────────
// ── Formatting ───────────────────────────────────────────────
const n = (v) => Number(v || 0).toLocaleString('en-US');
const n = (v) => Number(v || 0).toLocaleString('en-US');
@@ -168,6 +168,7 @@ const DAY = 86_400_000;
@@ -168,6 +168,7 @@ const DAY = 86_400_000;
assert.strictEqual(r.headers.get('x-robots-tag'), 'noindex, nofollow');
assert.strictEqual(r.headers.get('x-robots-tag'), 'noindex, nofollow');
assert.strictEqual(r.headers.get('cache-control'), 'no-store');
assert.strictEqual(r.headers.get('cache-control'), 'no-store');
assert.match(r.headers.get('content-security-policy'), /default-src 'none'.*form-action 'self'.*frame-ancestors 'none'/);
assert.match(r.headers.get('content-security-policy'), /default-src 'none'.*form-action 'self'.*frame-ancestors 'none'/);
+ assert.match(r.headers.get('content-security-policy'), /img-src 'self' https:\/\/openvibe\.media(?:;|$)/, `${p} lets an avatar from openvibe.media show`);
assert.strictEqual(r.headers.get('x-frame-options'), 'DENY');
assert.strictEqual(r.headers.get('x-frame-options'), 'DENY');
}
}
const anon = await get('/cashouts');
const anon = await get('/cashouts');