130 lines
3.1 KiB
Markdown
130 lines
3.1 KiB
Markdown
# Chezlepro SOC 2 Type II Cockpit
|
||
|
||
Cockpit web React + API Node pour piloter une conformité opérationnelle **SOC 2 Type II**.
|
||
|
||
Cette version n’est plus seulement un prototype d’interface. 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 d’une source de vérité sur disque, servie par l’API 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 d’accès
|
||
|
||
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.
|
||
|
||
## Ce qui rend cette version utile
|
||
|
||
- 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**.
|
||
|
||
## 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.
|