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

4.5 KiB
Raw Blame History

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:

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:

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:

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:

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).