Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
isms-builder — Système de management de la sécurité de l'information auto-hébergé — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz | Kitploit
Outils/GitHubGitHub/coolstartnow/isms-builder
Apprentissage et ÉducationRéponse aux IncidentsRessources OrganiséesParcours et Cours
GitHubcoolstartnow/isms-builder

isms-builder

Système de management de la sécurité de l'information auto-hébergé — ISO 27001, NIS2, GDPR/DSGVO, BSI IT-Grundschutz

Voir le dépôt
2044751il y a 4 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Site web
Partager
<!-- © 2026 Claude Hecker — ISMS Builder V 1.76 — AGPL-3.0 -->
![Bannière ISMS Builder](https://assets.kitploit.com/production/public/readmes/12462/26d3b00b65a4f94cc34514132f1ee5f5c9036e45516880da99fb9501dd79bead.png)
# ISMS Builder

**Système de management de la sécurité de l'information auto-hébergé — open source, sans cloud**

[![CI](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml/badge.svg)](https://github.com/coolstartnow/isms-builder/actions/workflows/ci.yml)
[![Tests](https://img.shields.io/badge/tests-423%20passing-brightgreen)](https://github.com/coolstartnow/isms-builder/actions)
[![Licence : AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white)](https://nodejs.org)
[![Version](https://raw.githubusercontent.com/coolstartnow/isms-builder/HEAD/docs/badges/version.svg)](CHANGELOG.md)

📖 **[Wiki](https://github.com/coolstartnow/isms-builder/wiki)** — Utilisation de l'image Docker &
variables d'environnement, architecture & modules, FAQ, contribution (DE/EN)

<!-- NOTE RGPD : Les quatre badges ci-dessus (CI, Tests, Licence, Node.js) chargent des ressources
     depuis des serveurs externes (github.com, shields.io/Cloudflare, img.shields.io).
     Lorsque ce README est affiché dans un navigateur, ces requêtes transmettent l'adresse
     IP du visiteur à des tiers (y compris des serveurs basés aux États-Unis — RGPD art. 44 et suiv.).
     Pour une documentation auto-hébergée 100 % conforme au RGPD, remplacez ces quatre lignes de badges
     par leurs équivalents locaux dans docs/badges/ ou supprimez-les entièrement. -->

---

> ## ⚠️ Avertissement de sécurité : faux dépôts et copies diffusant des logiciels malveillants
> ISMS Builder n'a **aucune « release » packagée, aucun installateur ni fichier ZIP téléchargeable** — la seule
> source légitime est ce dépôt, cloné ou téléchargé directement depuis GitHub sous forme de
> code source brut. Nous avons connaissance d'au moins un **dépôt malveillant usurpant l'identité de ce projet**
> (faux README, faux bouton « Download » renvoyant vers un ZIP déguisé en capture d'écran, contenant un
> chargeur de logiciel malveillant Windows — chaîne de charge utile `.cmd` → `.exe` → DLL Lua). **Ne téléchargez ni n'exécutez aucun
> ZIP/installateur/exe « isms_builder » provenant d'ailleurs que de ce dépôt.**
> Si vous trouvez un dépôt ou un site suspect usurpant l'identité de ce projet, veuillez ouvrir une
> [issue](https://github.com/coolstartnow/isms-builder/issues) ou une
> [discussion](https://github.com/coolstartnow/isms-builder/discussions) afin que nous puissions le signaler.

---

> **Statut : développement actif — pas encore un produit fini.**
> Les modules principaux sont fonctionnels et utilisés, mais certaines fonctionnalités sont incomplètes
> et la plateforme est encore en évolution. Les contributions, retours et tests
> en conditions réelles sont les bienvenus — c'est précisément pourquoi ce projet a été open-sourcé.

---

> 🛡️ **Projet associé : [NIS2 Quick-Check](https://github.com/coolstartnow/nis2-quickcheck)** —
> un auto-contrôle NIS2 gratuit et autonome (10 domaines × 5 questions, les 27 États membres de l'UE, les 24
> langues officielles de l'UE). Fonctionne entièrement dans le navigateur, sans backend, sans installation. Ne fait pas partie de
> ISMS Builder et n'est pas nécessaire pour l'utiliser — juste un outil complémentaire pour une première orientation rapide.

---

## Qu'est-ce que ISMS Builder ?

ISMS Builder est une **plateforme web auto-hébergée** pour gérer un Système de Management de la Sécurité de l'Information (SMSI).
Elle couvre l'ensemble du cycle de conformité — de la rédaction des politiques aux preuves d'audit — pour ISO 27001:2022, NIS2, RGPD/DSGVO, BSI IT-Grundschutz et d'autres référentiels.

**Pas de cloud. Pas de frais SaaS. Vos données restent sur votre serveur.**

> Conçu pour les PME, les équipes IT et les consultants qui ont besoin d'un véritable outil SMSI sans contrat fournisseur à cinq chiffres.

---

## Usage prévu et périmètre

Ce projet a débuté comme un outil de travail pour un seul praticien SMSI et s'est développé à partir de là. Il est
open source parce que le travail peut être utile à d'autres — pas parce qu'il s'agit d'un produit commercial
déguisé. Être explicite à ce sujet vous aide à décider s'il correspond à votre situation.

**À quoi il est destiné.** Une petite équipe SMSI — souvent une seule personne, parfois une poignée — qui rédige et maintient la documentation d'un système de management : politiques, risques, actifs, mesures de maîtrise, preuves. Le nombre de personnes qui *ont besoin d'un compte* devrait rester faible. Atteindre un large public fonctionne sans comptes : les accusés de réception des politiques sont envoyés sous forme de liens à jeton, de sorte que les destinataires lisent et confirment un document sans jamais se connecter, et sans apparaître dans aucune liste d'utilisateurs.

**Ce qu'il attend de vous.** ISMS Builder est auto-hébergé, et tout ce qui en découle vous incombe : déploiement, TLS, durcissement, sauvegardes, mises à jour, contrôle d'accès et obligations de protection des données pour tout ce que vous y stockez. Le projet fournit une configuration par défaut raisonnable, pas un service géré.

**Ce qu'il n'est pas.** Il n'existe aucune offre SaaS hébergée, aucun contrat de support commercial et aucun accord de niveau de service. Ce n'est pas un produit d'hébergement multi-tenant. Il ne vous certifie par rapport à aucune norme et ne constitue pas un avis juridique — il vous aide à organiser et à documenter le travail, mais l'évaluation reste la vôtre et celle de votre auditeur.

**Qui le maintient.** Une personne, en parallèle d'un emploi à plein temps. Les tickets et les discussions sont lus et traités, généralement en quelques jours ; les signalements de sécurité sont prioritaires. Les demandes de fonctionnalités sont les bienvenues et façonnent réellement la feuille de route, mais elles se disputent des soirées limitées. Si votre organisation dépend d'un calendrier fixe ou d'un délai de réponse garanti, un fournisseur commercial est la recommandation honnête — et ce n'est pas une raison d'éviter le projet, seulement une raison de planifier de manière réaliste.

---

## Captures d'écran

| Connexion | Tableau de bord |
|---|---|
| ![Connexion](https://assets.kitploit.com/production/public/readmes/12462/dad90b27558016928f149aa956d5b5ecef78f7639fe00117fa6e7b6b9c610884.png) | ![Tableau de bord](https://assets.kitploit.com/production/public/readmes/12462/ad427999a2d247f7b486faff089572c213b6bf809d64946438305c1519e54566.png) |

| Déclaration d'applicabilité | Gestion des risques |
|---|---|
| ![SoA](https://assets.kitploit.com/production/public/readmes/12462/19133912a32d643c4db93e977047aa6f93cc85889555a63dc29b986f5290d196.png) | ![Risques](https://assets.kitploit.com/production/public/readmes/12462/19133912a32d643c4db93e977047aa6f93cc85889555a63dc29b986f5290d196.png) |

| RGPD & Protection des données | Gestion des actifs |
|---|---|
| ![RGPD](https://assets.kitploit.com/production/public/readmes/12462/453b4e84b6c08241d87e8edd96d803a68b5d56565aee2b317444f30db8d9ffb5.png) | ![Actifs](https://assets.kitploit.com/production/public/readmes/12462/053332b35c995bc3a672be7bfd193ca3789f3245e7cdffaa456833fabdec309e.png) |

| Guidance & Dokumentation | Reports |
|---|---|
| ![Guidance](https://assets.kitploit.com/production/public/readmes/12462/2eb44e0df23e8eba8d70e09a14a18028d1d9dc37e8e734d0c837f2b7fe6ec787.png) | ![Reports](https://assets.kitploit.com/production/public/readmes/12462/765395a2a3cf39ec72a00ad53df464bc79d54a69ca34738bdeb775ff7e1584f3.png) |

| Registre des mesures | Mesures pour une mesure de maîtrise |
|---|---|
| ![Registre des mesures](https://assets.kitploit.com/production/public/readmes/12462/eedf38aaab6650767b438c237699536ef4edd1540ec513879d3dba3bc3ddcd53/fb9df24fa7d347305c9d2bdf49a2bd043b1e22f82c1ce8b441ba3fafbb99cc4e-display-v1.webp) | ![Mesures dans la SoA](https://assets.kitploit.com/production/public/readmes/12462/48a0e181c7c9b9597d1962bbf77a1118c564eedc42d802eec2d51eb1b1ff72f1/b34d065f2e668a35c18a545d0c63a64dc59978729f6998631c7b09a574283ca6-display-v1.webp) |

> Exécutez `npm start` et ouvrez `https://localhost:3000` pour explorer localement l'ensemble du jeu de données de démonstration.

---

## Aperçu des fonctionnalités

| Module | Description | Normes |
|---|---|---|
| **Gestion des politiques** | CRUD de modèles, versionnage, cycle de vie (brouillon → revue → approuvé → archivé), hiérarchie des espaces, pièces jointes | ISO 27001 §5 |
| **Déclaration d'applicabilité** | 147 contrôles intégrés couvrant 5 référentiels (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) plus les contrôles ISO 27001 / 9000 / 9001 que vous importez vous-même (jamais fournis), édition en ligne, analyse des écarts, mise en correspondance croisée | ISO 27001 A / BSI / NIS2 / EUCS / EUAI / ISO 9001 / CRA |
| **Registre des mesures** | Un registre unique pour les traitements des risques, les actions issues des constats d'audit, les mesures de gouvernance et les TOM — responsable, échéance, statut, preuves ; assignable aux contrôles de la SoA, aux constats et aux risques ; affiché dans la SoA, les risques, les constats, la gouvernance et le RGPD, mis à niveau automatiquement depuis les versions antérieures ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-measures.en.md)) | ISO 27001 §6.1.3 / RGPD Art. 32 |
| **Gestion des risques** | Registre des risques, plans de traitement (conservés dans le registre des mesures), rôle d'auditeur | ISO 27001 §6.1 |
| **Objectifs de sécurité** | Suivi des KPI avec barres de progression, intégration au calendrier | ISO 27001 §6.2 |
| **RGPD & Vie privée** | Registre des activités de traitement, contrats de sous-traitance, AIPD, TOM, file des demandes DSAR, minuteur 72 h, journal des suppressions avec alertes e-mail | RGPD Art. 13–35 |
| **Gestion des actifs** | Registre des actifs, types d'actifs modifiables, objectifs de protection (CIA + authenticité) avec héritage des dépendances, niveaux de classification, suivi de fin de vie | ISO 27001 A.5.9–5.12 |
| **BCM / PCA** | Analyse d'impact sur l'activité, plans de continuité, exercices | ISO 27001 A.5.29–5.30 / NIS2 |
| **Registres de formation** | Catalogue de formations, suivi de l'achèvement, téléversement des certificats | ISO 27001 A.6.3 |
| **Gestion des fournisseurs** | Registre des prestataires, planification des audits, évaluation des risques | ISO 27001 A.5.19–5.22 |
| **Juridique & Contrats** | Contrats, NDA, politiques de confidentialité, calendrier des échéances | |
| **Boîte de réception des incidents** | Boîte de réception du RSSI + **formulaire de signalement public** (aucune connexion requise) | NIS2 / BSI |
| **Gouvernance** | Revues de direction, comptes rendus de réunion, mesures de gouvernance (conservées dans le registre des mesures) | ISO 27001 §9.3 |
| **Rapports** | Matrice de conformité (Contrôle × Entité), rapport d'écarts, cycles de revue, export CSV | |
| **Constats d'audit** | Registre des constats (IST→SOLL→Risque→Recommandation), plans d'action, suivi de la gravité/du statut, référence FIND-YYYY-NNNN | ISO 27001 §9.2 |
| **Gestion des audits** | Audits avec listes de contrôle, constats créés à partir des non-conformités, programme d'audit annuel (plan trimestriel, approbation), intégration au calendrier et au tableau de bord, export CSV/PDF | ISO 27001 §9.2, ISO 19011 |
| **Accusés de réception des politiques** | Diffusion vérifiable des politiques auprès du personnel et confirmation de compréhension, preuves d'audit centralisées ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-policy-acknowledgements.en.md)) | ISO 27001 7.3, A.6.3 |
| **NIS2** | Liste de contrôle de gouvernance de l'Art. 21 (30 éléments) et échéances de notification de l'Art. 23 avec alertes automatiques | NIS2 Art. 21 / 23 |
| **Calendrier** | Un calendrier unique pour les échéances de tous les modules : mesures, traitements des risques, audits, revues, contrats, formations, délais | |
| **Guidage** | Manuel et base de connaissances intégrés (guides de modules, guides de rôles, documents personnels) avec recherche, en cinq langues | |
| **Application mobile (Android)** | Application Android distincte qui fonctionne hors ligne avec son propre jeu de données et se synchronise avec le serveur via Wi-Fi ou un paquet de fichiers : comptes de synchronisation avec droits par module, configuration par QR code, modèles, SoA, risques, actifs, constats et guidage (en lecture seule) ; nécessite `STORAGE_BACKEND=json` ([docs](https://github.com/coolstartnow/isms-builder/blob/main/docs/module-mobile-sync.en.md)). Pas encore publiée : si vous souhaitez l'essayer en avant-première, contactez-nous via le [site du projet](https://www.isms-builder.com/#contact) | |
| **Traçabilité** | Chaque enregistrement est lié aux contrôles de la SoA + aux documents de politique — de façon bidirectionnelle | |
| **Recherche sémantique** | Recherche IA locale via Ollama (nomic-embed-text) avec repli sur les mots-clés | |
| **Multi-entités** | Arborescence de la structure d'entreprise, applicabilité par entité pour les contrôles et les politiques | |
| **Interface multilingue et données de démonstration** | Interface complète, contenu de démonstration et documentation des modules en 🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU ; l'administrateur contrôle les langues disponibles | |

### ⚠ IMPORTANT : Les contrôles ISO nécessitent une installation manuelle par l'administrateur

> **ISO 27001:2022, ISO 9000:2015 et ISO 9001:2015** sont des normes protégées par le droit d'auteur publiées
> par l'Organisation internationale de normalisation (ISO, © ISO). Les définitions des contrôles
> (intitulés, descriptions, texte des exigences) ne sont **pas incluses** dans ce logiciel et ne doivent **pas**
> être redistribuées sans une licence ISO valide.

**Ce que cela signifie en pratique :**
Les modules SoA pour ISO 27001, ISO 9000 et ISO 9001 sont livrés sans contenu de contrôle.
L'administrateur **doit importer manuellement** les contrôles avant que ces référentiels ne soient utilisables :

1. Obtenir une copie sous licence de la norme auprès de [iso.org](https://www.iso.org/) ou d'un organisme national agréé
2. Préparer un fichier JSON avec vos définitions de contrôles (format documenté dans `scripts/import-iso-controls.sh`)
3. Exécuter le script d'import :
   ```bash
   bash scripts/import-iso-controls.sh path/to/iso-controls.json
   ```
4. Redémarrer le serveur ISMS Builder

> **Frameworks inclus nativement (aucune licence ISO requise) :**
> BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act et CRA sont basés sur des textes
> législatifs européens et des publications fédérales allemandes accessibles au public et sont entièrement préinstallés.

L'exploitation des modules de framework ISO sans licence valide pour la norme concernée relève de la
seule responsabilité de l'opérateur. Le projet ISMS Builder et ses contributeurs déclinent toute
responsabilité quant à l'utilisation non licenciée de contenus protégés par l'ISO.

---

## Démarrage rapide

```bash
git clone https://github.com/coolstartnow/isms-builder.git
cd isms-builder
npm install
cp .env.example .env          # set JWT_SECRET to a long random string
npm start                     # http://localhost:3000
```

Connectez-vous avec **`[email protected]` / `adminpass`**. Lors de la première connexion, il vous sera demandé de choisir votre **langue des données de démonstration** (🇩🇪 DE / 🇬🇧 EN / 🇫🇷 FR / 🇳🇱 NL / 🇭🇺 HU) ou de démarrer avec un système vide. Modifiez immédiatement le mot de passe administrateur après cela.

Pour une utilisation en production avec HTTPS :

```bash
# .env
JWT_SECRET=<output of: openssl rand -hex 32>   # required; production refuses a missing, short or placeholder secret
STORAGE_BACKEND=json
SSL_CERT_FILE=/etc/ssl/certs/your.crt
SSL_KEY_FILE=/etc/ssl/private/your.key
```

**Passer en production ?** La production est toujours une **installation neuve** – démo et production ne sont jamais mélangées.
Ne transformez pas une instance de démo (ou ses données) en système de production : installez une nouvelle instance
(`STORAGE_BACKEND=json` est la valeur par défaut recommandée, voir `.env.example`), créez votre propre administrateur
et définissez vos propres secrets. Les fonctions *Demo Reset* et *Demo Import* intégrées à l'application sont des fonctions de l'instance
de démo uniquement : ce ne sont pas des outils de sauvegarde, de restauration ou de migration, et *Demo Import* ne fonctionne qu'avec
`STORAGE_BACKEND=json`.

Les frameworks SoA intégrés (BSI IT-Grundschutz, EU NIS2, EUCS, EU AI Act, CRA) sont créés
automatiquement sur chaque backend de stockage. Les textes de contrôle d'ISO 27001 / 9000 / 9001 sont
sous copyright ISO et ne sont **jamais** fournis – fournissez-les vous-même dans `data/iso-controls.json`
(voir `scripts/import-iso-controls.sh`).

---

## Docker

Chaque version est publiée en tant que GitHub Package dans le GitHub Container Registry, pour
`linux/amd64` et `linux/arm64` — étiquetée `:latest` et `:<version>` (par ex. `:1.37.5.2`) :

```bash
docker compose up -d
# App runs at http://localhost:3000
```

Ou sans Compose (`data/` doit être un montage bind — les données ne sont jamais intégrées à l'image) :

```bash
docker run -d --name isms-builder -p 3000:3000 \
  -e JWT_SECRET="$(openssl rand -hex 32)" \
  -v "$PWD/data:/app/data" \
  ghcr.io/coolstartnow/isms-builder:latest
```

C'est la configuration par défaut, qui stocke les données sous forme de fichiers JSON simples dans `./data` — aucun conteneur de base de données n'est nécessaire. C'est la configuration recommandée pour les petites équipes et c'est celle qu'utilisent les deux commandes ci-dessus.

**Utiliser PostgreSQL (ou MariaDB) au lieu de JSON.** L'image le prend en charge nativement, mais — contrairement à la configuration JSON ci-dessus — elle nécessite un second conteneur (la base de données elle-même) ainsi qu'une poignée de variables d'environnement indiquant à l'application comment la joindre. Si vous avez seulement récupéré l'image elle-même (`docker pull ghcr.io/coolstartnow/isms-builder`) sans jamais cloner ce dépôt, ces noms de variables ne sont visibles nulle part par défaut — `docker-compose.yml` et `.env.example`, où ils sont documentés, sont des fichiers de ce dépôt Git, et non des éléments de l'image. Cette section existe pour que ces informations ne soient pas un secret réservé au dépôt.

L'image `isms-builder` elle-même n'embarque jamais de serveur de base de données — `postgres:17` (ou `mariadb:11`) est un moteur de base de données complètement générique et vide provenant de Docker Hub, sans aucune connaissance des tables de ce projet. Ces tables (risques, actifs, contrôles SoA, etc.) sont créées automatiquement par l'application elle-même dès son démarrage lorsqu'elle trouve une base de données vide — aucune importation SQL manuelle, aucune étape de migration séparée à exécuter. Consultez « Comment le schéma de base de données est-il créé ? » ci-dessous si vous voulez connaître le mécanisme complet.

Deux conteneurs, un réseau Docker partagé, puis on indique à l'application où trouver la base de données :

```bash
# 1) An isolated network so the two containers can reach each other by name
docker network create isms-net

# 2) The database — empty until the app first connects and creates its tables
docker run -d --name isms-postgres --network isms-net \
  -e POSTGRES_DB=isms_builder \
  -e POSTGRES_USER=isms \
  -e POSTGRES_PASSWORD="$(openssl rand -hex 16)" \
  -v isms-postgres-data:/var/lib/postgresql/data \
  postgres:17-alpine

# 3) The app, pointed at that database by container name (isms-postgres) via
#    Docker's built-in DNS on the shared network — no host/port juggling needed
docker run -d --name isms-builder --network isms-net -p 3000:3000 \
  -e JWT_SECRET="$(openssl rand -hex 32)" \
  -e STORAGE_BACKEND=postgres \
  -e DB_HOST=isms-postgres \
  -e DB_PORT=5432 \
  -e DB_USER=isms \
  -e DB_PASS="<same password as POSTGRES_PASSWORD above>" \
  -e DB_NAME=isms_builder \
  ghcr.io/coolstartnow/isms-builder:latest
```

Signification de chaque variable :

| Variable | Rôle |
|---|---|
| `STORAGE_BACKEND` | `postgres` (ou `pg`) pour PostgreSQL, `mariadb` pour MariaDB/MySQL. Laisser non défini (ou `json`) pour la configuration JSON par défaut. |
| `DB_HOST` | Nom d'hôte du conteneur de base de données. Sur un réseau Docker partagé, il s'agit simplement du `--name` du conteneur — Docker le résout automatiquement. |
| `DB_PORT` | `5432` pour PostgreSQL, `3306` pour MariaDB. |
| `DB_USER` / `DB_PASS` / `DB_NAME` | Doivent correspondre à ce que vous avez défini sur le conteneur de base de données (`POSTGRES_USER`/`POSTGRES_PASSWORD`/`POSTGRES_DB` ci-dessus, ou les équivalents MariaDB). |

Pour MariaDB, remplacez `postgres:17-alpine` par `mariadb:11`, utilisez ses variables `MARIADB_DATABASE` /
`MARIADB_USER` / `MARIADB_PASSWORD` à l'étape 2, et `STORAGE_BACKEND=mariadb` /
`DB_PORT=3306` à l'étape 3. La liste complète et recoupée de toutes les variables d'environnement que ce
projet reconnaît — y compris celles non couvertes ici (SSL, confiance envers le reverse-proxy, SMTP,
2FA, …) — se trouve dans [`.env.example`](https://github.com/coolstartnow/isms-builder/blob/main/.env.example) dans ce dépôt.

Les utilisateurs de Compose obtiennent cela gratuitement : `docker-compose.yml` fournit déjà les profils
de service `mariadb` et `postgres` (commentés par défaut, accompagnés des explications équivalentes des
variables d'environnement) —
`docker compose --profile postgres up -d` démarre les deux conteneurs interconnectés automatiquement,
sans mise en réseau manuelle ni copier-coller de mots de passe requis.

**Comment le schéma de base de données est-il créé ?** Ni l'image `postgres:17` ni l'image `mariadb:11`
ne connaissent quoi que ce soit de ce projet — ce sont des moteurs de base de données génériques et vides,
directement issus de Docker Hub. Il n'y a aucun fichier de dump SQL à importer ni aucune commande de migration
séparée à exécuter manuellement. À la place, dès que le conteneur `isms-builder` démarre et se connecte à une
base de données vide, son propre code applicatif (et non l'image de base de données) crée chaque table dont il a
besoin sur-le-champ — voir
[`server/db/knexDatabase.js`](https://github.com/coolstartnow/isms-builder/blob/main/server/db/knexDatabase.js) : une liste de définitions de tables, chacune
vérifiée avec `hasTable()` et créée avec `createTable()` si absente, le tout avant que l'application ne commence
à accepter des requêtes HTTP. Cela le rend idempotent — le tout premier démarrage construit le schéma complet
à partir de rien, et chaque redémarrage ultérieur sur la même base de données est une opération silencieuse sans
effet puisque les tables existent déjà. C'est le même mécanisme, non modifié, qui a été vérifié en conditions réelles
avec SQLite, MariaDB 11 et PostgreSQL 17 (voir [#70](https://github.com/coolstartnow/isms-builder/issues/70)).

Pour compiler depuis les sources à la place, décommentez le bloc `build:` dans `docker-compose.yml` et exécutez
`docker compose up -d --build`.

Les images portent une attestation de provenance de build signée :

```bash
gh attestation verify oci://ghcr.io/coolstartnow/isms-builder:latest --owner coolstartnow
```

---

## Prérequis

- **Node.js 18+** (testé : 18, 20, 22)
- npm 9+
- (Optionnel) Docker + Docker Compose
- (Optionnel) [Ollama](https://ollama.ai) pour la recherche sémantique IA locale

---

## Configuration (`.env`)

| Variable | Valeur par défaut | Description |
|---|---|---|
| `JWT_SECRET` | *(requis)* | Secret pour la signature JWT — au moins 32 caractères aléatoires (`openssl rand -hex 32`). Avec `NODE_ENV=production` (toujours le cas dans l'image Docker), le serveur ne démarre pas si le secret est absent, trop court ou factice |
| `PORT` | `3000` | Port d'écoute HTTP/HTTPS |
| `STORAGE_BACKEND` | `json` | `json` (dev/démo) ou `sqlite` (production) |
| `SSL_CERT_FILE` | — | Chemin vers le certificat TLS → active HTTPS |
| `SSL_KEY_FILE` | — | Chemin vers la clé privée TLS |
| `DATA_DIR` | `./data` | Remplace le répertoire de données (volumes Docker) |
| `SMTP_HOST` | — | Serveur SMTP pour les alertes par e-mail |
| `SMTP_PORT` | `587` | Port SMTP |
| `SMTP_USER` | — | Nom d'utilisateur SMTP |
| `SMTP_PASS` | — | Mot de passe SMTP |
| `SMTP_FROM` | — | Adresse d'expéditeur pour les notifications |

---

## Architecture

```
server/
  index.js          — Express app setup, router mounts
  auth.js           — JWT auth, RBAC ranks, session
  routes/           — 17 Express route modules (one per domain)
  db/               — Data stores (jsonStore / sqliteStore / orgSettingsStore / …)
  ai/               — Semantic search (embedder, embeddingStore, lexicalSearch)
  reports.js        — Report generation logic
ui/
  index.html        — SPA shell (Atlassian Dark Theme)
  app.js            — All render functions, ~6000 lines vanilla JS
  style.css         — CSS variables, dark theme
data/               — JSON files / SQLite DB (gitignored)
docs/
  ISMS-build-documentation.md  — Full architecture reference
  architecture/                — C4 diagrams, data model, OpenAPI 3.0.3 spec
tests/              — Jest + Supertest (176 tests, --runInBand)
```

- **Auth :** cookie JWT (`sm_session`), mots de passe bcrypt, 2FA TOTP (applicable à l'échelle de l'organisation)
- **RBAC :** `reader` → `editor` / `dept_head` → `contentowner` / `auditor` → `admin`
- **Persistance :** fichiers JSON (par défaut/démo) ou SQLite via `better-sqlite3`
- **IA :** Ollama local optionnel (nomic-embed-text) ; la recherche par mots-clés toujours disponible en solution de repli
- **Journal d'audit :** chaque action de création/mise à jour/suppression/connexion enregistrée, filtrable, exportable

Voir [`docs/architecture/`](https://github.com/coolstartnow/isms-builder/blob/main/docs/architecture) pour les diagrammes C4, le modèle de données complet et la spécification OpenAPI 3.0.3 (plus de 80 points de terminaison).

---

## Exécution des tests

> **Remarque :** La suite de tests sous `tests/` correspond aux tests de développement personnels de l'auteur et est
> fournie avec le projet à des fins de transparence. Elle ne fait **pas** partie de l'application elle-même
> et n'est **pas nécessaire** pour exécuter l'application. Les tests couvrent le comportement interne de l'API et utilisent
> des identifiants de test codés en dur qui n'existent que dans l'environnement de test isolé — ils n'ont
> aucun rapport avec des données de production ou de démonstration.

```bash
npm test                  # runs all 423 tests
npm run preflight         # exactly what CI gates on (tests + pinning + audit)
npm test -- --verbose     # with test names
```

Les tests utilisent un répertoire temporaire isolé — aucune donnée de production n'est touchée.

---

## Contribuer

Les contributions sont les bienvenues ! Consultez [CONTRIBUTING.md](https://github.com/coolstartnow/isms-builder/blob/main/CONTRIBUTING.md) pour :

- La configuration de développement (5 minutes pour lancer le premier test)
- Le style de code et les conventions
- Comment ouvrir une bonne issue ou PR

**Vous avez trouvé un problème de sécurité ?** Veuillez ne pas ouvrir d'issue publique — utilisez le
[signalement privé de vulnérabilité](https://github.com/coolstartnow/isms-builder/security/advisories/new).
[SECURITY.md](https://github.com/coolstartnow/isms-builder/blob/main/SECURITY.md) décrit le périmètre, le safe harbour et ce qu'il est réaliste d'attendre.

Les **good first issues** sont étiquetées [`good first issue`](https://github.com/coolstartnow/isms-builder/issues?q=label%3A%22good+first+issue%22) dans le suivi des issues.

---

## Feuille de route

| Statut | Fonctionnalité |
|---|---|
| ✅ Terminé | Recherche sémantique (Ollama / nomic-embed-text) |
| ✅ Terminé | Backend SQLite, Docker, CI/CD |
| ✅ Terminé | Alertes e-mail du journal de suppression RGPD |
| ✅ Terminé | Lots de démonstration multilingues (DE / EN / FR / NL / HU) |
| ✅ Terminé | Module Constats d'audit avec plans d'action (V 1.37.2.0) |
| ✅ Terminé | Traductions des recommandations FR/NL + configuration des langues par l'administrateur (V 1.37.2.0) |
| ✅ Terminé | Backend MariaDB/MySQL (`STORAGE_BACKEND=mariadb`, V 1.37.2.1) |
| ✅ Terminé | Scanner → brouillon de risque (import XML Greenbone/OpenVAS + PDF, V 1.37.2.0) |
| ✅ Terminé | Accusé de réception des politiques — le personnel confirme les politiques numériquement avec piste d'audit (V 1.37.2.0) |
| ✅ Terminé | CRUD des recommandations — créer, modifier et téléverser sa propre documentation (V 1.37.2.0) |
| ✅ Terminé | Recherche dans les recommandations — recherche plein texte inter-catégories avec extrait (V 1.37.2.0) |
| ✅ Terminé | Objectifs de protection des actifs — CIA + authenticité (1–4), dépendances et héritage du principe du maximum BSI (V 1.37.2.0) |
| ✅ Terminé | Checklist de gouvernance NIS2 Art. 21 (30 éléments) et délais de notification Art. 23 avec alertes automatiques (V 1.37.2.0) |
| ✅ Terminé | Backend PostgreSQL (`STORAGE_BACKEND=pg`) — même couche de stockage Knex que MariaDB, vérifié contre une instance PostgreSQL 17 réelle, y compris le parcours complet `docker compose` (V 1.37.5) |
| ✅ Terminé | Intégration ownCloud / Nextcloud — les politiques approuvées sont publiées automatiquement en PDF via WebDAV, visibilité optionnelle en favori/lien public, vérifié en conditions réelles contre une instance NextcloudPi réelle (#66, V 1.37.5.1) |
| ✅ Terminé | Image Docker publiée sur GitHub Container Registry après chaque release (`ghcr.io/coolstartnow/isms-builder`, `linux/amd64` + `linux/arm64`, provenance de build signée) — contribution de @bucherfa (#71, V 1.40.0). Essai de charge de maintenance : abandonné si cela s'avère demander plus d'entretien que prévu. |
| ✅ Terminé | Assistant de politiques IA — Ollama rédige le contenu de tout type de document (Politique, Procédure, Politique de risque, SoA, Incident, Release) à partir du titre + type + langue (#87, V 1.60.0) |
| ✅ Terminé | Application Android avec usage hors ligne et synchronisation des données — comptes de synchronisation, configuration par QR-code, droits par module (V 1.76.0) |
| ✅ Terminé | Gestion des audits — audits avec checklists, constats issus des non-conformités, programme d'audit annuel |
| ✅ Terminé | Registre des mesures — un seul jeu de données pour les traitements des risques, les actions sur constats, les mesures de gouvernance et les TOM (V 1.80.0) |
| 🔜 Prochain | Suppression à l'épreuve de l'audit — les enregistrements supprimés sont conservés définitivement, les suppressions RGPD anonymisent au lieu de retirer, revue de l'intégrité du journal d'audit |
| 🔜 Prochain | Rapports planifiés — rapport de conformité hebdomadaire/mensuel envoyé par e-mail |
| 🔜 Prochain | Détection d'anomalies dans le journal d'audit (lot LLM) |
| 🚀 Plus tard | Notation quantitative des risques (valeurs en €, inspirée de FAIR) |
| 🚀 Plus tard | Portail de collaboration auditeur — accès externe en lecture seule pour les auditeurs |
| 🚀 Plus tard | Analyse des écarts de politiques (LLM) |
| 🏁 V 2.x | Catégories de recommandations configurables — les administrateurs définissent des catégories personnalisées (par ex. workflows, documents d'organisation) |

---

## À propos de l'auteur

---

[Read more](https://github.com/coolstartnow/isms-builder)
Télécharger l’outil