Pokud jde o komentáře (a hodnocení článků hvězdičkami), s těmi to bylo ještě o dost horší, než se starým designem. Databáze měla špatné kódování, takže obtížně ukládala unicode, počty komentářů se vracely jako obrázek, je tam jakási prastará jQuery. No a jak jsem čím dál víc začal používat Obsidian a markdown, říkal jsem si, že by se mi líbilo umožnit markdown formátování komentářů…
Tady to ovšem bylo o dost rozsáhlejší než prostý redesign. První co jsem po codexu chtěl byla příprava lokálního vývojového prostředí (tedy PHP, MariaDB, webserver) , aniž bych si tím zaneřádil systém. Codex mi doporučil nainstalovat podman a podman-compose a pak vytvořil šelmostroj na vytváření kontejnerů a podu. Fascinující, jak pěkně se dnes dá vyvíjet.
Trochu nepříjemné je, že hosting kontejnery nepodporuje, takže jsme ještě upravovali strukturu souborů a dvojí konfiguraci (přes env proměnné pro lokální vývoj a přetížení přes config.php).
Další byla databáze; export, program na její konverzi, doplnění sloupců, modernizace indexů, samozřejmě to kódování.
A pak samotná implementace, včetně markdownu na vstupu. Rozdíly jsem nechal popsat codex samotný:
Nová implementace nahrazuje soubor volně provázaných PHP skriptů jednotnou aplikací s front controllerem, třídami pro jednotlivé oblasti a verzovaným JSON API. Místo ručního skládání SQL dotazů přes mysqli používá PDO a parametrizované dotazy; komentáře, hodnocení, RSS i počítadlo mají jasně vymezené adresy pod /comments-api/. Článek navíc už nemůže vzniknout vedlejším účinkem veřejného čtení nebo hlasování — jeho založení potvrzuje přihlášený správce.
Výrazně se zlepšilo zabezpečení a práce s obsahem. Aplikace pracuje plně v UTF-8/utf8mb4, odděluje neveřejný kód a konfiguraci od veřejných souborů, používá CSRF ochranu, podepsané HttpOnly cookies se SameSite=Lax, kontrolu povoleného původu požadavků a omezení počtu POST požadavků. Formulář doplňuje honeypot, minimální čas vyplňování, serverová validace délky a URL i konfigurovatelné antispamové heslo. Nové komentáře podporují bezpečně omezený Markdown; surové HTML a obrázky se nezobrazují, zatímco historické příspěvky zůstávají zachované ve svém původním formátu.
Zmodernizovalo se také vývojové a provozní zázemí. Projekt je připraven pro PHP 8.3-FPM, Nginx a MariaDB 10.11 v rootless Podman Compose, má migrace převádějící původní MyISAM databázi na InnoDB, rozšířené textové sloupce, indexy a cizí klíče. Nasazení je oddělené od staré verze, takže lze články převádět postupně bez výpadku; dokumentace zároveň popisuje bezpečný import historických dat, konfiguraci tajemství i ověření provozu.
Jak pomyslná tečka bylo sjednocení designu s redesignovaným blogem.
Nové komentáře spouštím s tímto článkem; opět prosím, pokud narazíte na nějaké problémy, napište mi – buď do komentářů, nebo mailem (pokud by byly komentáře rozbité tak, že by nešly použít).
Hodnocení hvězdičkami používá jako prevenci
opakovaného kliknutí anonymní cookie.
Pokud s tím nesouhlasíte, neklikejte.
Další podrobnosti k cookies zde.