Foro: editor CKEditor 5 en los mensajes y moderación por POST+CSRF

- forum/forms.py: TopicForm/ReplyForm/EditPostForm con CKEditor5Widget (rich text)
- vistas crear/responder/editar pasan el form; el HTML del editor se sanea con nh3
- acciones de moderación (bloquear, fijar, mover, borrar/restaurar temas y posts)
  ahora exigen POST y van con CSRF; las plantillas usan formularios en vez de enlaces GET
- docs/FORO.md actualizado

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-12 17:15:35 +00:00
parent 2c30844bf7
commit 874a0c1ad9
7 changed files with 73 additions and 23 deletions
+10 -7
View File
@@ -46,10 +46,16 @@ en `forum/permissions.py`:
- El texto de los posts se **sanea con `nh3`** (allowlist de etiquetas) al
guardar — `forum/sanitize.py` — evitando el XSS que tenía el original (que
renderizaba HTML del editor sin filtrar). Se renderiza con `|safe` ya saneado.
- Formularios de publicar/responder/editar/mover van por **POST con CSRF**.
- ⚠️ Pendiente de endurecer: las acciones de moderación (bloquear, borrar,
restaurar, fijar) son enlaces **GET** (como en el original). Para producción se
recomienda pasarlas a POST con CSRF.
- **Todas** las acciones que modifican datos (publicar, responder, editar, mover,
bloquear/desbloquear, fijar, borrar/restaurar temas y posts) van por **POST con
CSRF**. Las vistas de moderación rechazan GET.
## Editor
Los mensajes se escriben con **CKEditor 5** (el mismo editor que usa el resto de
NovaWoW), vía `forum/forms.py` (`TopicForm`, `ReplyForm`, `EditPostForm`). El
HTML que produce el editor se **sanea con nh3** al guardar, así que el rich text
es seguro.
## Despliegue
@@ -70,8 +76,5 @@ en `forum/permissions.py`:
## Notas / posibles mejoras
- Editor enriquecido (CKEditor/TinyMCE) en el textarea de posts (ahora es
texto/HTML saneado; los saltos de línea se respetan por CSS `pre-wrap`).
- El autor se muestra como el nombre de cuenta de juego (`<bnetId>#1`); se podría
mapear a un nick o al email como en «Mi cuenta».
- Endurecer las acciones de moderación a POST+CSRF.