gilles
24598c836b
fix(mcp): comparaison constante hmac + rejet si clé vide + WWW-Authenticate
...
Fixes deux vulnérabilités critiques en sécurité:
1. **Timing attack** — remplace la comparaison naïve `!=` par
`hmac.compare_digest()` pour éviter les attaques temporelles
(constant-time comparison).
2. **Clé vide acceptée** — ajoute le check `not settings.mcp_api_key`
pour rejeter (401) TOUS les requêtes `/mcp` si MCP_API_KEY n'est
pas configurée, empêchant l'accès unauthenticated silencieux.
Bonus: ajoute l'en-tête `www-authenticate: Bearer` (RFC 9110).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 22:49:45 +02:00
gilles
cc8fc5ba3f
feat(mcp): middleware ASGI Bearer token pour /mcp*
2026-05-25 22:47:24 +02:00
gilles
48e1b5343e
feat(mcp): dépendance mcp>=1.9 + champ mcp_api_key dans Settings
2026-05-25 22:44:57 +02:00
gilles
ec87bc091d
feat(sse): sync temps réel multi-appareils via Server-Sent Events v0.5.8
...
- Broadcaster asyncio.Queue avec keepalive 25s (prévient timeout proxy)
- Endpoint GET /api/events/stream (StreamingResponse text/event-stream)
- Broadcast notes_changed / todos_changed / shopping_changed sur toutes mutations
- Hook useServerEvents: EventSource avec reconnexion automatique (3s)
- Pages Notes, Todos, Shopping abonnées aux événements SSE
- nginx: location SSE dédiée (proxy_buffering off, timeout 24h)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 20:12:02 +02:00
gilles
be0c8bceb6
feat: export Markdown notes (ARQ/Redis) + backup/restore BDD — v0.5.2
...
- Volume data/ (bind mount ./data) remplace le volume uploads nommé
data/notes/ → .md auto-générés, data/uploads/ → médias, data/backup/ → dumps
- Service Redis (redis:7-alpine) + worker ARQ (backend-worker)
- notes_markdown.py : frontmatter YAML + contenu + pièces jointes (liens relatifs)
Nom : YYYY-MM-DD_slug-titre_shortid.md, rotation si titre modifié
- api/notes.py : publie export_note_markdown / remove_note_markdown sur Redis
après chaque create / update / delete / add_attachment / delete_attachment
- api/admin.py : POST /backup, GET /backups, POST /restore/{filename} (pg_dump/pg_restore)
- Backend Dockerfile : postgresql-client ; requirements : arq==0.26.1
- ConfigPage : section "Base de données" avec sauvegarde + liste + restauration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-25 15:33:29 +02:00
gilles
ee00848fdc
feat: configuration FastAPI et moteur SQLAlchemy async
2026-05-24 04:49:41 +02:00
gilles
8bc69bb705
chore: structure initiale backend et docker-compose
2026-05-24 04:45:16 +02:00