soc2-cockpit/README.md

131 lines
3.1 KiB
Markdown
Raw Normal View History

2026-04-17 10:17:56 -04:00
# Chezlepro SOC 2 Type II Cockpit
Cockpit web React + API Node pour piloter une conformité opérationnelle **SOC 2 Type II**.
2026-04-17 10:17:56 -04:00
Cette version nest plus seulement un prototype dinterface. Le dépôt contient maintenant :
2026-04-17 10:17:56 -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
## Structure
2026-04-17 10:17:56 -04:00
```text
src/
App.jsx
model/
lib/
features/hooks/
2026-04-17 10:17:56 -04:00
components/
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
```
## Modes de fonctionnement
### Mode local
2026-04-17 10:17:56 -04:00
Le frontend persiste le registre dans `localStorage`.
2026-04-17 10:17:56 -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
### Mode API
2026-04-17 10:17:56 -04:00
Le frontend devient client dune source de vérité sur disque, servie par lAPI locale.
2026-04-17 10:17:56 -04:00
```bash
cp .env.example .env
# définir VITE_SOC2_SYNC_MODE=api
2026-04-17 10:17:56 -04:00
npm install
npm run seed:registry
npm run server
2026-04-17 10:17:56 -04:00
npm run dev
```
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
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
```
### Exemple : pousser un artefact de preuve
2026-04-17 10:17:56 -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
## Connecteurs prévus
2026-04-17 10:17:56 -04:00
Le fichier `server/contracts/connectors.json` décrit les contrats attendus pour :
2026-04-17 10:17:56 -04:00
- **Forgejo** : changements, PR, approbations
- **Icinga2** : disponibilité, incidents, tendances
- **Keycloak** : MFA, rôles admin, revues daccès
2026-04-17 10:17:56 -04:00
Le dépôt neffectue pas encore les collectes réelles sans les paramètres daccès du site cible, mais larchitecture est prête pour les implémenter.
2026-04-17 10:17:56 -04:00
## Ce qui rend cette version utile
2026-04-17 10:17:56 -04:00
- le registre nest plus seulement stocké côté navigateur ;
- lAPI 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
## Séquence suivante recommandée
2026-04-17 10:17:56 -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.