soc2-cockpit/README.md

130 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chezlepro SOC 2 Type II Cockpit
Cockpit web React + API Node pour piloter une conformité opérationnelle **SOC 2 Type II**.
Cette version nest plus seulement un prototype dinterface. Le dépôt contient maintenant :
- 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.
## Structure
```text
src/
App.jsx
model/
lib/
features/hooks/
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/
```
## Modes de fonctionnement
### Mode local
Le frontend persiste le registre dans `localStorage`.
```bash
cp .env.example .env
# laisser VITE_SOC2_SYNC_MODE=local
npm install
npm run dev
```
### Mode API
Le frontend devient client dune source de vérité sur disque, servie par lAPI locale.
```bash
cp .env.example .env
# définir VITE_SOC2_SYNC_MODE=api
npm install
npm run seed:registry
npm run server
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
```bash
curl -X PUT http://localhost:4177/api/registry \
-H 'Content-Type: application/json' \
--data @compliance/soc2/registry/soc2-registry.json
```
### Exemple : pousser un artefact de preuve
```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
```
## Connecteurs prévus
Le fichier `server/contracts/connectors.json` décrit les contrats attendus pour :
- **Forgejo** : changements, PR, approbations
- **Icinga2** : disponibilité, incidents, tendances
- **Keycloak** : MFA, rôles admin, revues daccès
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.
## Ce qui rend cette version utile
- 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**.
## Séquence suivante recommandée
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.