Security: CSP gehärtet — unsafe-inline + unsafe-eval raus, SW by-v1100
Inline-Scripts extrahiert:
- boot-early.js: Theme + theme-color (synchron im <head>, VOR CSS)
- boot.js: Offline-Banner + Service-Worker-Registration + Update-Flow
- landing-init.js: Dark-mode + Scroll-Animationen + Live-Stats +
Stay-In-App-Handler + Details-Toggle
Inline onclick-Handler in landing.html:
- 5× sessionStorage.setItem('by_stay_in_app','1') → data-stay-in-app
- 1× Details-Toggle → data-toggle-target + data-toggle-text-open
- JS-Handler in landing-init.js binden die data-Attribute
CSP-Header (main.py):
- script-src: 'unsafe-inline' und 'unsafe-eval' entfernt
- style-src 'unsafe-inline' bleibt (Inline-Styles bleiben für jetzt,
zu viele Fundstellen)
- Umami bleibt whitelisted
SW STATIC_ASSETS erweitert um boot-early.js + boot.js.
make bump aktualisiert jetzt auch landing.html ?v= Anker.
Tests grün (19/19).
This commit is contained in:
parent
15d319fbd5
commit
65cfa25e59
10 changed files with 267 additions and 226 deletions
13
backend/static/js/boot-early.js
Normal file
13
backend/static/js/boot-early.js
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/* Theme-Setup und theme-color für Status-Leiste.
|
||||
MUSS synchron im <head> VOR den CSS-Links laufen, sonst FOUC. */
|
||||
(function() {
|
||||
var t = localStorage.getItem('by_theme');
|
||||
var isDark = t === 'dark' || (t !== 'light' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
||||
var isAndroid = /android/i.test(navigator.userAgent);
|
||||
if (t === 'dark') document.documentElement.setAttribute('data-theme', 'dark');
|
||||
if (t === 'light') document.documentElement.setAttribute('data-theme', 'light');
|
||||
// Android: immer dunkel (Amber-Streifen nicht transparent möglich)
|
||||
// iOS: black-translucent übernimmt das
|
||||
var m = document.getElementById('meta-theme-color');
|
||||
if (m) m.setAttribute('content', (isDark || isAndroid) ? '#0f1623' : '#C4843A');
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue