Repository navigation
feat(ra-console): GET /api/v1/audit/search, lecture et vérification des deux journaux - #78
Merged
Merged
Conversation
1 of 6 tasks
…es deux journaux
Étape 2b-D du plan WEBUI (docs/WEBUI.md §7, §15) : la route relit et vérifie
intégralement les deux journaux chaînés (celui de ca-server, qui fait foi
pour la PKI, et celui de ra-console) depuis le stockage S3 commun, avant de
répondre — jamais un index qui pourrait avoir divergé des fichiers source.
Contrat déjà fixé par docs/WEBUI.md §7 : filtres serial/from/to, réponse
{chain_verified, entries_checked, results}, chaque résultat marqué de son
journal d'origine. entries_checked porte sur l'intégralité de ce qui a été
relu, pas seulement sur les entrées retournées.
Décision explicite pour cette tranche : un journal rompu ou illisible
(l'un des deux, ou les deux) bloque tout l'affichage (chain_verified: false,
results vide) plutôt que de montrer une moitié de la vérité à côté d'une
alerte. Sans stockage S3 configuré, la route refuse (503) : ra-console n'a
aucun accès local au journal de ca-server, seul S3 les met en commun
(nouvelle variable OPENEIDAS_S3_CA_KEY, même bucket que OPENEIDAS_S3_* de
2b-C, clé distincte par défaut "ca-server/audit.log").
Une panne S3 (indisponibilité) et une chaîne rompue (constat d'intégrité)
sont deux échecs distincts : la première répond 503, la seconde répond 200
avec chain_verified: false — l'appelant ne doit jamais confondre « je n'ai
pas pu vérifier » avec « j'ai vérifié, et c'est rompu ».
- audit_search.rs (nouveau module) : search() fait tout le travail, testable
sans HTTP ni PostgreSQL.
- tests/audit_search.rs : contre un serveur HTTP qui se comporte comme un
service S3-compatible (MinIO indisponible dans cet environnement) —
fusion et tri des deux journaux, filtre par série, chaîne rompue bloque
tout (testé par mutation : sans le blocage, ce test échoue), panne S3
distinguée d'une chaîne rompue.
Co-authored-by: Claude <noreply@anthropic.com>
PhilippeVienne
force-pushed
the
feat/ra-console-audit-search
branch
from
September 30, 2026 19:31
d3edde8 to
36620e9
Compare
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Objet
Étape 2b-D du plan WEBUI (docs/WEBUI.md §7, §15), dernière lettre du
découpage A→D :
GET /api/v1/audit/searchrelit et vérifie intégralementles deux journaux chaînés — celui de
ca-server(fait foi pour la PKI) etcelui de
ra-console— depuis le stockage S3 commun, avant de répondre.Jamais un index qui pourrait avoir divergé des fichiers source.
Contrat déjà fixé par
docs/WEBUI.md §7(pas de nouvelle décision deconception à valider) : filtres
serial/from/to, réponse{chain_verified, entries_checked, results}, chaque résultat marqué de sonjournal d'origine,
entries_checkedsur l'intégralité relue.Empilée sur #50 (2b-C) : réutilise le champ
S3Configqu'elle étend(
OPENEIDAS_S3_CA_KEY, nouvelle variable, défautca-server/audit.log) etAppState.s3. Base :feat/ra-console-audit-s3(#50), pasdev.Deux décisions explicites de cette tranche :
chain_verified: false,resultsvide), même si l'autre chaîne est saine : personne ne doit pouvoir
l'ignorer par inattention (cohérent avec
§7).ra-consolen'a aucun accès local aujournal de
ca-server, la route refuse plutôt que de ne vérifier qu'unemoitié des deux chaînes.
(200,
chain_verified: false) : l'appelant ne doit jamais confondre« je n'ai pas pu vérifier » avec « j'ai vérifié, et c'est rompu ».
Vérifications
cargo fmt --check: silencieux.cargo clippy --workspace --all-targets -- -D warnings: silencieux, surtoolchain 1.97 (local) et 1.98.1 (CI).
cargo test -p ra-console(avecOE_CASTORE_TEST_DSN) : tout au vert,tests/no_pkcs11.rscompris.cargo test --workspace: tout au vert.cargo audit --ignore RUSTSEC-2023-0071: aucune vulnérabilité.bin/ra-console/tests/audit_search.rs(nouveau), contre un serveur HTTPqui se comporte comme un service S3-compatible (pas d'image MinIO
accessible dans cet environnement) : fusion et tri des deux journaux,
filtre par série, panne S3 distinguée d'une chaîne rompue, et surtout —
une chaîne rompue bloque tout l'affichage.
bien ; restauré ensuite.
Revue humaine obligatoire
Voir PROVENANCE.md. Chaque case est cochée par le
contributeur humain qui valide la PR, après l'avoir fait lui-même.
make licenses)Assistance par IA
Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, etscripts/provenance.py archivea été lancé