Sous-tâche du parent #3174. Dépend de #3190 (infrastructure d'audit logging).
Objectif
Brancher l'infrastructure d'audit (livrée par #3190) aux points d'action existants. Une fois cette tâche mergée, les actions utilisateurs commencent à s'écrire en base.
Contenu
tRPC pipeline
- Plug du middleware
auditMiddleware sur publicProcedure et protectedProcedure dans server/api/trpc.ts — log automatique de toutes les mutations
- Lectures sensibles loguées explicitement via la table de mapping :
profile.get, declaration.getOrCreate (renvoie GIP MDS)
Auth (NextAuth)
- Event
signIn → log auth.login (success)
logger.error → log auth.login_failed avec whitelist OAuth-safe (évite la fuite de tokens / state / code_verifier)
- Custom logout route → log
auth.logout avec capture de l'identité avant invalidation du cookie
Route handlers (9 routes wrappées via withAuditedRoute)
- Lectures sensibles (rétention 180j) :
/api/declaration-pdf, /api/transmitted-pdf, /api/no-sanction-pdf
- Mutations (rétention 365j) :
/api/upload
- Exports / API SUIT (rétention 365j) :
/api/export/download, /api/export/generate, /api/v1/export/declarations, /api/v1/files
- Système (rétention 365j) :
/api/gip-mds/import
Sécurité
/api/v1/files : validation du siren query param via parseSiren avant écriture en base (évite l'injection de varchar arbitraire)
- Sanitize récursif : les clés sensibles (
token, password, secret, apikey, authorization) sont stripées à toute profondeur dans metadata
Sous-tâche du parent #3174. Dépend de #3190 (infrastructure d'audit logging).
Objectif
Brancher l'infrastructure d'audit (livrée par #3190) aux points d'action existants. Une fois cette tâche mergée, les actions utilisateurs commencent à s'écrire en base.
Contenu
tRPC pipeline
auditMiddlewaresurpublicProcedureetprotectedProceduredansserver/api/trpc.ts— log automatique de toutes les mutationsprofile.get,declaration.getOrCreate(renvoie GIP MDS)Auth (NextAuth)
signIn→ logauth.login(success)logger.error→ logauth.login_failedavec whitelist OAuth-safe (évite la fuite de tokens / state / code_verifier)auth.logoutavec capture de l'identité avant invalidation du cookieRoute handlers (9 routes wrappées via
withAuditedRoute)/api/declaration-pdf,/api/transmitted-pdf,/api/no-sanction-pdf/api/upload/api/export/download,/api/export/generate,/api/v1/export/declarations,/api/v1/files/api/gip-mds/importSécurité
/api/v1/files: validation dusirenquery param viaparseSirenavant écriture en base (évite l'injection de varchar arbitraire)token,password,secret,apikey,authorization) sont stripées à toute profondeur dansmetadata