Files
websitedev/docs/content-editor-recovery.md
T
Do Siki 0047e1b441
CI — Test & Build / 🧪 Run Tests & Generate Reports (push) Waiting to run
CI — Test & Build / 🏗️ Build Docker Image (push) Blocked by required conditions
CI — Test & Build / 🐳 Docker integration & API E2E (push) Blocked by required conditions
CI — Test & Build / 🌐 Staging Playwright smoke (push) Waiting to run
feat: harden content workflows and staging smoke tests
2026-08-17 16:08:57 +02:00

80 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Content Editor strukturális helyreállítás
## Cél és hatókör
Ez a dokumentum a `MITHOME-30` feltárását és a kezdeti adathelyreállítást rögzíti. A Content Editor a `proto/src/content/**/*.json` fájlokat írja, ezért a hiba a megjelenő weboldal-tartalmat közvetlenül érinti.
## Talált hiba
A böngészős mentési kód minden mező értékét szövegként írta vissza. Mentés előtt kiürítette az összes tömböt, majd a `a.b[0].c` útvonalat törékeny reguláris kifejezéssel dolgozta fel. Emiatt:
- a tömbök `[]` értékre ürültek, az elemek pedig hibás, például `items[0]` nevű objektumkulcsokba kerültek;
- az objektumokat és beágyazott tömböket a felület `"[object Object]"` szöveggé alakíthatta;
- a számok és logikai értékek szöveggé alakultak;
- egyes kulcsok sérültek (`id` helyett `i.$1`, `description` helyett `0.$1escription`).
## Helyreállítás 2026-08-17
Az alábbi fájlok strukturálisan helyreálltak:
- `pages/home.json` a Git-történet utolsó ép változatából, a későbbi `https://mail.mozdit.hu` webmail-címet megtartva;
- `pages/about.json` a helyes tömbök és objektumok visszaállításával;
- `pages/services.json` a részletes szolgáltatás-specifikációk beágyazott objektumaival együtt;
- `pages/adatvedelem.json` és `pages/hasznalati-feltetelek.json` a későbbi, üzletileg releváns `Szigetszentmiklós` szöveg megtartásával.
Minden `src/content/pages/*.json` fájl JSON-szintaktikája és a korábbi sérülési mintákra végzett ellenőrzése rendben van. A teljes unit tesztcsomag 55 sikeres teszttel lefutott.
## A hiba megelőzése a kliensben
A `content-editor.js` mentési logikája most karakterenként elemzi az útvonalakat, ezért a HTML-sablon escape-elése nem módosíthatja a parser működését. A felület rekurzívan rendereli az objektumokat és a beágyazott tömböket; a boolean checkboxként, a szám number-inputként szerkeszthető. A mentés ezek típusát megőrzi.
A ténylegesen generált böngésző-kódot ellenőrző regressziós teszt:
```sh
node scripts/test-content-editor-serializer.js
```
A teszt egy beágyazott tömböket és objektumokat, valamint string-, boolean- és numerikus mezőket tartalmazó mintán ellenőrzi a mentési körutazást.
## Szerveroldali védelmi réteg
A `MITHOME-41` részeként a `proto/src/content/schema.js` az összes szerkeszthető content-fájl kötelező mezőit, típusait és megengedett kulcsait írja le. A Next.js loader és a Content Editor ezt az egy közös validátort használja.
A mentés csak sikeres validáció után történik. Az Editor legfeljebb 256 KiB-os request body-t fogad; hibás JSON vagy sémahiba `422` választ ad, és az eredeti fájlt érintetlenül hagyja. Érvényes mentéskor:
1. az eredeti JSON időbélyeges példánya a `.content-backups/` könyvtárba kerül;
2. az új tartalom egy célfájllal azonos könyvtárban létrehozott ideiglenes fájlba íródik;
3. az ideiglenes fájl atomikus átnevezéssel váltja fel a célfájlt.
A backup-könyvtár szándékosan nincs Gitben. A séma- és atomikus mentési tesztek:
```sh
node scripts/test-content-schema.js
node scripts/test-content-editor-save.js
```
## Hozzáférésvédelem
A Content Editor csak akkor indul el, ha a környezetben mindkét változó meg van adva:
```sh
CMS_USER=<egyedi-felhasználónév>
CMS_PASS=<erős-egyedi-jelszó>
```
Nincs beégetett alapértelmezett belépési adat. A szerver kizárólag a `127.0.0.1` címen figyel, ezért távoli használathoz Nginx/VPN vagy SSH tunnel szükséges. A böngésző minden módosító kéréshez szerver által kiadott CSRF-tokent küld.
Az ismételt hibás bejelentkezést és a publikálási kéréseket IP-alapú, 15 perces csúszóablakos limit védi. A mentések és publikálások minimális auditbejegyzést írnak a `.content-editor-audit.jsonl` fájlba (időpont, esemény, felhasználó, célfájl, eredmény); secretet és teljes contentet nem naplóz. Ez a fájl, valamint a backupok nincs Gitben.
A védelmi alapteszt:
```sh
node scripts/test-content-editor-security.js
```
## Következő védelmi lépések
1. A szerveroldali mentésnek sémaellenőrzést, atomikus írást és visszaállítható mentést kell használnia (`MITHOME-41`).
2. A publikálási folyamatot a natív, systemd-alapú kiadási eljáráshoz kell igazítani (`MITHOME-42`).
3. A Content Editor alapértelmezett hitelesítő adatait és a hiányzó CSRF-, audit- és rate-limit védelmet meg kell szüntetni (`MITHOME-43`).