Commit Graph
6 Commits
Author SHA1 Message Date
Jordan DiazandClaude Fable 5.1 273c3dd781 feat(plugins): ganchos de ciclo de vida y checkpoints boot_plugins y post_variables
Fase 0 del instalador de plugins (docs/plugins/fase0-instalador-diseno.md del
repo de Forge). Un plugin puede llevar install.php, uninstall.php, enable.php,
disable.php y status.php; los ejecuta runPluginLifecycle() dentro de la web
por action_ws=pluginLifecycle, sea Forge o el CMS legacy quien instale.
showInstall() reutiliza el mismo nucleo (installPluginArtifacts) en vez de
duplicar install.sql/schemaPresets.

Checkpoints nuevos, sin efecto hasta que un plugin los declare:
- boot_plugins: en init.php, con la BD ya conectada.
- post_variables: tras cada require de lib/variables.php (slug.php, sesion.php,
  lib/recursos.php), una vez por peticion. Un plugin llega DESPUES del bloque
  de cache de variables.php y puede pisarlo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HPL66q9F33YZxbLPUT7KW8
2026-09-12 22:40:42 +00:00
Jordan DiazandClaude Opus 5 e938135869 feat(cache): las webs nuevas llaman al checkpoint cache
Anade la llamada a addPlugins("cache", ...) al final del bloque CACHE HANDLER,
para que el plugin `cache_handler` pueda gobernar la cache de una web recien
creada sin tener que editarle el variables.php a mano.

El orden es deliberado: el checkpoint va DESPUES del default cableado, asi el
plugin puede apagar tambien lo que se encienda arriba (cache.php fija los
flags de CocoDB explicitamente, no solo cuando activa).

`CocoDB::localCache()` se queda como estaba: es el comportamiento actual de
toda web nueva y quitarlo seria una regresion de rendimiento para quien no
tenga el plugin instalado. Sin plugin, la web se comporta igual que antes de
este commit.

Nota: `lib/variables.php` esta en los excludes del rsync de web-base
(server/handlers/acai.py), asi que esto NO toca ninguna web existente — solo
las que se creen a partir de ahora.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FsEzft5j5tZqxPdTdUXxLK
2026-09-06 13:33:40 +00:00
Jordan Diaz 5861bac1da fix(security): sanear idioma de URL para cerrar XSS reflejado
El parametro ?idioma= llegaba crudo (la query string se reenvia entera a
slug.php via .htaccess) y se reflejaba sin escapar en RUTA_RAIZ/ROOT,
lang="..." y variables JS de las plantillas -> XSS reflejado explotable
en cualquier web (p.ej. ?idioma=';alert(document.cookie);// en contexto JS).

- variables.php: allowlist de idiomas antes de definir constantes/render;
  cualquier valor desconocido se descarta.
- footer.tpl/header.tpl: json_encode en los sinks JS (defensa en profundidad).
2026-07-29 11:48:05 +00:00
JordanandClaude Opus 4.6 a88d61bec7 Add missing language routes and root path definitions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 20:41:03 +00:00
JordanandClaude Opus 4.6 3f251f1d32 Add lib/variables.php without SMTP credentials
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 20:38:59 +00:00
Jordan 03acc5b013 Initial commit: plantilla base PHP para webs Acai CMS 2026-02-21 21:13:57 +00:00