chore: sprint D — sandbox, self-hosted fonts, logger с ротацией
#6 sandbox: true на обоих BrowserWindow (раньше false). Preload использует только contextBridge + ipcRenderer (оба sandbox-safe), никаких Node-built-ins. OS-уровневый sandbox изолирует renderer от GPU/IPC процессов; даже RCE в зависимости renderer'а не получит Node-доступа через preload. #17 self-host шрифтов через @fontsource/* пакеты. Раньше тянулись с fonts.googleapis.com — внешняя CSP-зависимость + отсутствие интернета = шрифты не загружались. Теперь .woff/.woff2 в bundle (22 файла × 15-30KB = ~500KB). Подкрутили CSP: убрали https://fonts.* origins, добавили connect-src 'self', base-uri 'self', frame-ancestors 'none'. #22 src/main/logger.ts — структурный лог с уровнями (debug/info/warn/error) и ротацией. Пишет в %APPDATA%/Exercise Reminder/logs/latest.log (≤1MB) и дублирует в console. При 1MB latest.log → prev.log (предыдущий prev.log удаляется). LAUDE_DEBUG=1 включает debug-уровень. Подключён в hot paths: store (corrupt/atomic write fails), updater (silent check errors), gsi-server (bad requests, handler throws), games/registry (GSI start, reconcile, match_end summary), games/dota2 (rejected token, POST_GAME detection). Особенно полезно для диагностики «челленджи не срабатывают»: лог покажет (а) пришёл ли вообще GSI payload (token verify), (б) детектировался ли POST_GAME, (в) сколько challenges были enabled и которые из них дали 0 reps. Logger — единственный файл с `eslint-disable no-console` (он намеренно дублирует в stderr).
This commit is contained in:
@@ -3,11 +3,14 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; script-src 'self'" />
|
||||
<!--
|
||||
CSP: всё локально, без внешних origins. Шрифты подгружаются через
|
||||
@fontsource/* импорты в globals.css. style-src 'unsafe-inline' нужен
|
||||
для Tailwind utility-классов и инлайн-стилей framer-motion. font-src
|
||||
включает data: на случай если кто-то вставит base64 SVG-glyph.
|
||||
-->
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; img-src 'self' data:; script-src 'self'; connect-src 'self'; base-uri 'self'; frame-ancestors 'none'" />
|
||||
<title>Exercise Reminder</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Bricolage+Grotesque:opsz,wght@12..96,500;12..96,600;12..96,700;12..96,800&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
@@ -1,3 +1,21 @@
|
||||
/* Self-hosted шрифты — раньше тянулись с fonts.googleapis.com через <link>
|
||||
в index.html. Минусы: внешняя зависимость (без интернета шрифты не
|
||||
загружаются), CSP вынужден разрешать style-src https://fonts.googleapis.com
|
||||
и font-src https://fonts.gstatic.com. Сейчас локальные .woff2 в bundle. */
|
||||
@import '@fontsource/plus-jakarta-sans/400.css';
|
||||
@import '@fontsource/plus-jakarta-sans/500.css';
|
||||
@import '@fontsource/plus-jakarta-sans/600.css';
|
||||
@import '@fontsource/plus-jakarta-sans/700.css';
|
||||
@import '@fontsource/plus-jakarta-sans/800.css';
|
||||
@import '@fontsource/bricolage-grotesque/500.css';
|
||||
@import '@fontsource/bricolage-grotesque/600.css';
|
||||
@import '@fontsource/bricolage-grotesque/700.css';
|
||||
@import '@fontsource/bricolage-grotesque/800.css';
|
||||
@import '@fontsource/jetbrains-mono/400.css';
|
||||
@import '@fontsource/jetbrains-mono/500.css';
|
||||
@import '@fontsource/jetbrains-mono/600.css';
|
||||
@import '@fontsource/jetbrains-mono/700.css';
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
Reference in New Issue
Block a user