Commit Graph

3 Commits

Author SHA1 Message Date
egutierrez 3716b3f22a fix(security): TrustedHostMiddleware + escape UID/RRULE iCal + tests deterministas del flag
- TrustedHostMiddleware (127.0.0.1/localhost/testserver): anti DNS-rebinding, cierra el
  vector por el que una web maliciosa alcanza el service local desde el navegador.
- _build_vcalendar: sanitiza UID y RRULE (quita saltos de línea) para evitar iCal injection
  (summary/location/description ya escapaban con _vcard_escape).
- tests: fixture autouse que fuerza OSINT_DB_BACKEND OFF por defecto, así la suite es
  determinista sin depender del estado real de dev/feature_flags.json (los tests del camino
  ON sobrescriben _FLAGS_FILE). Corrige 14 fallos que aparecían con el flag activado.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 01:22:36 +02:00
egutierrez fb3956e8eb chore: activar OSINT_DB_BACKEND — osint_web usa DuckDB como fuente de verdad
Verificado end-to-end: lectura de contactos (1065) y libretas desde osint_db; crear un
contacto con 2 telefonos escribe DuckDB + empuja a Xandikos; borrarlo limpia ambos (DB + 404
en Xandikos). El multi-valor real se sirve desde DuckDB (p.ej. un contacto con dos TEL).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 00:50:11 +02:00
egutierrez 9cbea2d036 feat(contacts): multi-valor (varios tel/email/direccion) + libretas + backend osint_db (flag)
- ContactIn + frontmatter + vCard multi-valor: emite N TEL, N EMAIL, N ADR; _vcard_to_json
  parsea ADR -> direcciones[] (y sigue leyendo X-OSINT-DIRECCION legacy). Los singulares
  telefono/email/direccion se mantienen por compat (= primer elemento de cada lista).
- Libretas de contactos (addressbooks): endpoints GET/POST /api/addressbooks; en
  ContactsView un selector de libreta + boton 'Nueva libreta' (replica del patron de crear
  calendario) + filtro por libreta en la lista.
- Frontend ContactsView: TagsInput para telefonos/emails/direcciones, cargando TODOS los
  valores al editar (antes solo el primero).
- Feature flag OSINT_DB_BACKEND (dev/feature_flags.json, default off): con ON, osint_web
  lee/escribe contra el service osint_db (DuckDB = fuente de verdad) via
  server/osintdb_client.py; con OFF, el comportamiento historico (vault .md + vCard
  Xandikos) queda intacto byte a byte.

Verificado: 52 tests backend (40 + 12 nuevos), tsc --noEmit limpio.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 00:47:38 +02:00