2026-04-17 10:17:56 -04:00
|
|
|
|
# Chezlepro SOC 2 Type II Cockpit
|
|
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Cockpit web React + API Node pour piloter une conformité opérationnelle **SOC 2 Type II**.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Cette version n’est plus seulement un prototype d’interface. Le dépôt contient maintenant :
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
- un **frontend React/Vite** ;
|
|
|
|
|
|
- un **backend HTTP Node** ;
|
|
|
|
|
|
- un **registre JSON versionné** dans `compliance/soc2/registry/` ;
|
|
|
|
|
|
- des **manifests dérivés** ;
|
|
|
|
|
|
- un répertoire d’**artefacts de preuves** ;
|
|
|
|
|
|
- un **contrat de connecteurs** pour Forgejo / Icinga2 / Keycloak.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
## Structure
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
src/
|
|
|
|
|
|
App.jsx
|
|
|
|
|
|
model/
|
|
|
|
|
|
lib/
|
2026-04-17 11:08:30 -04:00
|
|
|
|
features/hooks/
|
2026-04-17 10:17:56 -04:00
|
|
|
|
components/
|
2026-04-17 11:08:30 -04:00
|
|
|
|
server/
|
|
|
|
|
|
index.js
|
|
|
|
|
|
config.js
|
|
|
|
|
|
lib/
|
|
|
|
|
|
http.js
|
|
|
|
|
|
store.js
|
|
|
|
|
|
contracts/
|
|
|
|
|
|
connectors.json
|
|
|
|
|
|
scripts/
|
|
|
|
|
|
seed-registry.mjs
|
|
|
|
|
|
compliance/soc2/
|
|
|
|
|
|
registry/
|
|
|
|
|
|
soc2-registry.json
|
|
|
|
|
|
evidence-manifest.json
|
|
|
|
|
|
auditor-pack-index.json
|
|
|
|
|
|
evidence/
|
|
|
|
|
|
packs/
|
2026-04-17 10:17:56 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
## Modes de fonctionnement
|
|
|
|
|
|
|
|
|
|
|
|
### Mode local
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Le frontend persiste le registre dans `localStorage`.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
```bash
|
|
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
# laisser VITE_SOC2_SYNC_MODE=local
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
### Mode API
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Le frontend devient client d’une source de vérité sur disque, servie par l’API locale.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-04-17 11:08:30 -04:00
|
|
|
|
cp .env.example .env
|
|
|
|
|
|
# définir VITE_SOC2_SYNC_MODE=api
|
2026-04-17 10:17:56 -04:00
|
|
|
|
npm install
|
2026-04-17 11:08:30 -04:00
|
|
|
|
npm run seed:registry
|
|
|
|
|
|
npm run server
|
2026-04-17 10:17:56 -04:00
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
API par défaut : `http://localhost:4177/api`
|
|
|
|
|
|
|
|
|
|
|
|
## Endpoints backend
|
|
|
|
|
|
|
|
|
|
|
|
- `GET /api/health`
|
|
|
|
|
|
- `GET /api/registry`
|
|
|
|
|
|
- `PUT /api/registry`
|
|
|
|
|
|
- `POST /api/registry/reset`
|
|
|
|
|
|
- `GET /api/evidence`
|
|
|
|
|
|
- `POST /api/evidence`
|
|
|
|
|
|
|
|
|
|
|
|
### Exemple : écrire le registre
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-04-17 11:08:30 -04:00
|
|
|
|
curl -X PUT http://localhost:4177/api/registry \
|
|
|
|
|
|
-H 'Content-Type: application/json' \
|
|
|
|
|
|
--data @compliance/soc2/registry/soc2-registry.json
|
2026-04-17 10:17:56 -04:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
### Exemple : pousser un artefact de preuve
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
```bash
|
|
|
|
|
|
python - <<'PY'
|
|
|
|
|
|
import base64, json
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
payload = {
|
|
|
|
|
|
"filename": "example-proof.txt",
|
|
|
|
|
|
"contentBase64": base64.b64encode(b"preuve de test").decode(),
|
|
|
|
|
|
"mimeType": "text/plain"
|
|
|
|
|
|
}
|
|
|
|
|
|
Path("payload.json").write_text(json.dumps(payload), encoding="utf-8")
|
|
|
|
|
|
PY
|
|
|
|
|
|
|
|
|
|
|
|
curl -X POST http://localhost:4177/api/evidence \
|
|
|
|
|
|
-H 'Content-Type: application/json' \
|
|
|
|
|
|
--data @payload.json
|
|
|
|
|
|
```
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
## Connecteurs prévus
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Le fichier `server/contracts/connectors.json` décrit les contrats attendus pour :
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
- **Forgejo** : changements, PR, approbations
|
|
|
|
|
|
- **Icinga2** : disponibilité, incidents, tendances
|
|
|
|
|
|
- **Keycloak** : MFA, rôles admin, revues d’accès
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
Le dépôt n’effectue pas encore les collectes réelles sans les paramètres d’accès du site cible, mais l’architecture est prête pour les implémenter.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
## Ce qui rend cette version utile
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
- le registre n’est plus seulement stocké côté navigateur ;
|
|
|
|
|
|
- l’API peut servir de **source de vérité locale** ;
|
|
|
|
|
|
- les manifests sont régénérés à chaque écriture ;
|
|
|
|
|
|
- les artefacts de preuves ont un emplacement physique ;
|
|
|
|
|
|
- le front peut fonctionner en **mode local** ou **mode API**.
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
## Séquence suivante recommandée
|
2026-04-17 10:17:56 -04:00
|
|
|
|
|
2026-04-17 11:08:30 -04:00
|
|
|
|
1. brancher les vrais accès Forgejo / Icinga2 / Keycloak ;
|
|
|
|
|
|
2. ajouter une authentification applicative ;
|
|
|
|
|
|
3. gérer le téléversement multipart réel ;
|
|
|
|
|
|
4. ajouter des jobs de collecte planifiés ;
|
|
|
|
|
|
5. produire des packs auditeur exportables en HTML/PDF.
|