diff --git a/README.md b/README.md
index d44d0c0be3f93feb14bc651f6ff752d8fdf5303c..9a91be0a03c73e35fb9ce43d84708ffe75d6887e 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
 [![pipeline status](https://gitlab.binets.fr/br/sigma-backend/badges/master/pipeline.svg)](https://gitlab.binets.fr/br/sigma-backend/commits/master)
 
-# Backend Sigma
+## Introduction
 
-Ce dépôt contient le _backend_ de Sigma, le successeur de Frankiz.
+Ce dépôt contient le _backend_ de Sigma, le successeur de Frankiz, un site étudiant permettant de gérer les groupes et les étudiants du plateau de Saclay.
 
 Pour obtenir une copie de ce dépôt, clonez-le avec
 
@@ -10,16 +10,20 @@ Pour obtenir une copie de ce dépôt, clonez-le avec
 
 ou `git clone https://gitlab.binets.fr/br/sigma-backend.git`, puis installez les dépendences JavaScript avec `npm install`.
 
+A terme, ce projet doit tourné sur un serveur de l'école polytechnique et fournir à un serveur front - au code séparé et documenté séparément - toute les données nécessaires à son bon fonctionnement (authentification, appartenance à un groupe, droits de visibilité...).
+
+Ce document détaille les différentes dépendances du projet, sa structure générale, détaille un peu plus des éléments sur la base de données et la documentation ; le code est également commenté en détail.
+
 ## Dépendances
 
-Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances dév servent à tester par exemple. On trouve la liste des dépendances dans [`package.json`](./package.json). Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (`devDependencies`).
+Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances développeur servent à tester par exemple. On trouve la liste des dépendances dans [`package.json`](./package.json). Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (`devDependencies`).
 
 Les dépendances s'installent avec `npm install`. Par défaut, toutes les dépendances sont installées. Si la variable `NODE_ENV` est configurée (vérifier avec la commande `echo "$NODE_ENV"`),
 
 * la valeur `development` installe tout
-* la valeur `production` n'installe pas les dépendances dév
+* la valeur `production` n'installe pas les dépendances développeur
 
-Certaines d'entre elles comme KnexJS ou Webpack devraient être installées globalement :
+Certaines d'entre elles comme KnexJS ou Webpack doivent être installées globalement :
 
 ```bash
 npm install -g knex
@@ -27,44 +31,83 @@ npm install -g webpack
 npm install -g eslint
 ```
 
+Les dépendances les plus importantes sont knex.js, notre outil de gestion de BDD locale, GraphQL qui sert à communiquer entre serveurs, ldap.js qui interroge le LDAP avec la plupart des données, webpack qui sert à la gestion du serveur. ESlint est un outil de vérification synthaxique.
+
+Le serveur utilisé est [express.js](https://expressjs.com/) ; il est configuré dans [`server.js`](./src/server.js) puis lancé sur le port 8888 dans [`index.js`](./src/index.js).
+
 ## Structure
 
-Les fichiers source se situent dans le dossier `src`.
+La structure générale du projet est détaillée ci-dessous ; pas d'inquiétude, la plupart des fichiers .js sont aussi extensivement documentés plus bas.
+
+- Racine du projet : fichiers de configuration ;
+    - config.json : données "sensibles" spécifique au projet à priori non partageable (adresse du LDAP, mots de passe),
+    - configfile_doc.json : JSDoc, l'outil de génération automatique de documentation,
+    - autres fichiers relatifs à des modules particuliers ou à la gestion de paquets,
+    - [`assets`](./assets) : ressources ;
+        - images et divers (dont l'essentiel flavicon)
+    - [`build`](./build) : dépendances gérées automatiquement ;
+        - bundle.js est un monstrueux fichier généré automatiquement qui gère nos dépendances.
+    - [`db`](./db) : base de donnée sigma ;
+        - knex_router.js charge la configuration précisée dans knexfile.js,
+        - [`migrations`](./db/migrations) stocke l'ensemble des migrations knex ; c'est un équivalent d'un répertoire git pour la BDD sigma (du coup seulement les groupes pas les individus),
+        - [`seeds`](./db/seeds) : stocke les éléments de générations des BDD ; c'est un ensemble de scripts.
+    - [`doc`](./doc) : documentation ;
+        - ensemble de pages html et fichiers associés ; index.html permet de naviguer sereinement sur toute la doc JSDoc.
+    - [`node_modules`](./node_modules) : gestion automatique des modules.
+    - [`src`](./src) : code source
+        - [`admin_view`](./src/admin_view) : gestion d'une interface administrateur de la base de donnée, s'appuie sur *css* et *views*
+        - [`ldap`](./src/ldap) : gestion des requêtes LDAP
 
-Le serveur utilisé est [express.js](https://expressjs.com/) ; il est configuré dans [`server.js`](./src/server.js) puis lancé sur le port 8888 dans [`index.js`](./src/index.js).
 
 La syntaxe adoptée est JavaScript ES6, un standard moderne (2015) de JavaScript. Il permet d'importer des dépendances en utilisant le mot-clé `import`, ce que le serveur Node.js ne comprend pas puisque la version 8 de Node ne comprend que le standard ES5 (2009), qui gère les imports avec `require()`.
 
-Node comprend le code dans [`build/bundle.js`](./build/bundle.js), donc on le lance dessus après avoir compilé ce fichier.
-
 ## Base de données
 
-La base de donnée utilisée est PostgreSQL.
+Sigma s'appuie sur deux bases de données :
+
+* La BDD frankiz accessible par LDAP hébergée sur un serveur de l'école, qui contient identifiants, mots de passe, et toutes les informations sur les utilisateurs et groupes spécifiques X.
+    * On y accède par des requêtes LDAP, d'où la nécessité de ldap.js.
+* La BDD de sigma propre est en [PostgreSQL](https://www.postgresql.fr/), hébergée en propre BR, qui contient les groupes et leurs niveaux de visibilité mais peu d'information sur les utilisateurs (seulement son école).
+    *  Cette BDD est géré par [Knex](http://knexjs.org).
+
+Cette structure peut sembler lourde et redondante mais s'explique par plusieurs raisons :
+
+* Volonté d'intégrer d'autres écoles simplement
+    * Rajouter leurs groupes sur la BDD sigma
+    * Pas les obliger à rejoindre notre LDAP avec notre structure
+* Garder le LDAP X et le mettre à jour ; il est utilisé par beaucoup d'autres sites X
+* Enjeu de sécurité
+    * La BDD de sigma est public et ne comporte rien de compromettant
+    * La BDD accessible par LDAP de l'X qui contient des informations plus sensibles et qui doit être plus protégée
+
+Les deux sections suivantes détaillent les opérations possibles grâce au back directement sur les bases de données via sigma.
 
-Le schéma de la BDD est géré par [Knex](http://knexjs.org). La config de Knex est dans [`knexfile.js`](./knexfile.js) : c'est un objet JSON qui précise la BDD à lequelle se connecter, l'utilisateur sous lequel elle est, le mot de passe...
+### Fonctions knexjs
+
+Quelques exemples de fonctions utiles de `knexjs` [Knex](http://knexjs.org)
 
 * `knex migrate:make migration_name` crée une migration dans `migrations/` : le nom du fichier est `migration_name.js` avec la date et l'heure en préfixe
 * `knex migrate:latest` met à jour le schéma de la BDD
 * `knex seed:make filename` crée un _seed_ `seeds/filename`
 * `knex seed:run` insère les _seeds_ dans la BDD
 
-### Seeds
+Un fichier _seed_ permet d'insérer des données dans la BDD. Ils sont stockés dans [`seeds`](./db/seeds).
+
+### Fonctions LDAP
 
-Un fichier _seed_ permet d'insérer des données dans la BDD.
+On peut facilement explorer et modifier des éléments du LDAP de l'école depuis le réseau de l'X avec [JXplorer](http://jxplorer.org/) en entrant `frankiz` dans nouvelle connexion et en allant dans `net`.
 
 ## Scripts
 
-Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande `npm run`. Ils sont définis dans [`package.json`](./package.json).
+Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande `npm run`. Ce sont des raccourcis pour gagner du temps sur des opérations un peu longues. Ils sont définis dans [`package.json`](./package.json).
 
-### Transpiler le serveur
+Les plus importants sont détaillées ci-dessous (ne pas oublier `npm install` déjà mentionné plus tôt) :
 
-On utilisera Webpack pour transpiler le fichier source [`src/index.js`](./src/index.js) en [`build/bundle.js`](./build/bundle.js) qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise
+On utilisera Webpack pour transpiler le fichier source [`src/index.js`](./src/index.js) en [`build/bundle.js`](./build/bundle.js) qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise :
 
 * `npm run build` qui exécute la commande `webpack` avec le fichier de configuration `webpack.config.js`, ou
 * `npm run watch` qui recompile automatiquement dès que le code est modifié.
 
-### Démarrer le serveur
-
 Pour faire tourner le serveur, il y a deux options :
 
 * `npm start` fait tourner le serveur `bundle.js` en mode prod sur le port 3000 (donc il faut consulter https://localhost:3000)
@@ -72,28 +115,26 @@ Pour faire tourner le serveur, il y a deux options :
 
 Donc, lancer `npm run watch` dans un terminal et `npm test` dans un autre permet de recompiler le serveur __et__ le redémarrer automatiquement dès qu'il y a une modification.
 
-## ESLint
-
-On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne.
+Le script pour faire tourner [JSDoc](http://usejsdoc.org/index.html) et régénérrer la documentation est : `npm run doc` 
 
-Il est préférable de l'installer **globalement** avec
+## Documentation
 
-   npm install -g eslint
+La documentation détaillée du projet est [ici](./doc/index.html). Elle a été compilée avec [JSDoc](http://usejsdoc.org/index.html) sous format hmtl selon le fichier de configuration [`configfile_doc.json`](./configfile_doc.json) à la racine du projet.
 
-Pour faire valider les fichiers source par ESLint, utilisez
+Les fichiers compilés se situent dans [`doc`](./doc) avec leurs fichiers image. Par nature de l'outil JSDoc il est facile de documenter en détail des fonctions .js mais plus compliqué de documenter un fichier.
 
-    npm run lint
+A la fin de ce fichier JSDoc rajjoute les commentaires placés dans chacun des fichiers et des hyperliens pour y accéder.
 
-qui fait appel au script `eslint src/` défini dans le [`package.json`](./package.json). L'option `--fix` permet de corriger les fichiers.
+## Appendixes
 
-Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en _live_ sur le code et vérifient que tout est en ordre.
+### ESLint
 
-Pour mieux comprendre ESLint, référez-vous à la [doc](https://eslint.org/docs/user-guide/getting-started).
+On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne.
 
-# Documentation
+Il est préférable de l'installer **globalement** avec `npm install -g eslint`. Pour faire valider les fichiers source par ESLint, utilisez `npm run lint`.
 
-La documentation est compilée avec JSDoc : le script pour le faire tourner est
+qui fait appel au script `eslint src/` défini dans le [`package.json`](./package.json). L'option `--fix` permet de corriger les fichiers.
 
-    npm run doc
+Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en _live_ sur le code et vérifient que tout est en ordre.
 
-et les fichiers compilés se situent dans `doc/`.
\ No newline at end of file
+Pour mieux comprendre ESLint, référez-vous à la [doc](https://eslint.org/docs/user-guide/getting-started).
\ No newline at end of file
diff --git a/configfile_doc.json b/configfile_doc.json
index 9db2f2b152d92f1a012e91393d52d7a45e2dfba1..f27faa9693ea735f82da420b517bc27df6f1912d 100644
--- a/configfile_doc.json
+++ b/configfile_doc.json
@@ -2,7 +2,7 @@
     "plugins": ["plugins/markdown", "plugins/summarize"],
     "recurseDepth": 5,
     "source": {
-        "include": ["./src","./db","./knexfile.js"],
+        "include": ["./src","./db","./knexfile.js","./README.md"],
         "exclude": ["./db/migrations","./db/seeds"],
         "includePattern": ".+\\.js(doc|x)?$",
         "excludePattern": "(^|\\/|\\\\)_"
diff --git a/doc/db_knex_router.js.html b/doc/db_knex_router.js.html
index f5a52b629a8eb85fee43ae4ee1408d1a0b393fe0..a69d0112c13b80eefa44384a95fd155c7c585d76 100644
--- a/doc/db_knex_router.js.html
+++ b/doc/db_knex_router.js.html
@@ -51,7 +51,7 @@ module.exports = require('knex')(config);</code></pre>
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/global.html b/doc/global.html
index 5042c702383f0aee411cc7c6321bcdb8954189f4..0211e7aa79ed1d3c3a20856ad974ab13a348faca 100644
--- a/doc/global.html
+++ b/doc/global.html
@@ -504,7 +504,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line17">line 17</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line17">line 17</a>
     </li></ul></dd>
     
 
@@ -663,7 +663,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line38">line 38</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line38">line 38</a>
     </li></ul></dd>
     
 
@@ -735,7 +735,7 @@
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/index.html b/doc/index.html
index 210794c6c9129db89c2ec614567d2a712d03f66d..ecebedb1fee41896a89ef6d836799d82bdae6308 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -42,6 +42,118 @@
 
 
 
+    <section>
+        <article><p><a href="https://gitlab.binets.fr/br/sigma-backend/commits/master"><img src="https://gitlab.binets.fr/br/sigma-backend/badges/master/pipeline.svg" alt="pipeline status"></a></p>
+<h1>Backend Sigma</h1><p>Ce dépôt contient le <em>backend</em> de Sigma, le successeur de Frankiz.</p>
+<p>Pour obtenir une copie de ce dépôt, clonez-le avec</p>
+<pre class="prettyprint source"><code>git clone git@gitlab.binets.fr:br/sigma-backend.git</code></pre><p>ou <code>git clone https://gitlab.binets.fr/br/sigma-backend.git</code>, puis installez les dépendences JavaScript avec <code>npm install</code>.</p>
+<p>A terme, ce projet doit tourné sur un serveur de l'école polytechnique et fournir à un serveur front - au code séparé et documenté séparément - toute les données nécessaires à son bon fonctionnement (authentification, appartenance à un groupe, droits de visibilité...).</p>
+<p>Ce document détaille les différentes dépendances du projet, sa structure générale, détaille un peu plus des éléments sur la base de données et la documentation ; le code est également commenté en détail.</p>
+<h2>Dépendances</h2><p>Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances développeur servent à tester par exemple. On trouve la liste des dépendances dans <a href="./package.json"><code>package.json</code></a>. Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (<code>devDependencies</code>).</p>
+<p>Les dépendances s'installent avec <code>npm install</code>. Par défaut, toutes les dépendances sont installées. Si la variable <code>NODE_ENV</code> est configurée (vérifier avec la commande <code>echo &quot;$NODE_ENV&quot;</code>),</p>
+<ul>
+<li>la valeur <code>development</code> installe tout</li>
+<li>la valeur <code>production</code> n'installe pas les dépendances développeur</li>
+</ul>
+<p>Certaines d'entre elles comme KnexJS ou Webpack doivent être installées globalement :</p>
+<pre class="prettyprint source lang-bash"><code>npm install -g knex
+npm install -g webpack
+npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont knex.js, notre outil de gestion de BDD locale, GraphQL qui sert à communiquer entre serveurs, ldap.js qui interroge le LDAP avec la plupart des données, webpack qui sert à la gestion du serveur. ESlint est un outil de vérification synthaxique.</p>
+<p>Le serveur utilisé est <a href="https://expressjs.com/">express.js</a> ; il est configuré dans <a href="./src/server.js"><code>server.js</code></a> puis lancé sur le port 8888 dans <a href="./src/index.js"><code>index.js</code></a>.</p>
+<h2>Structure</h2><p>La structure générale du projet est détaillée ci-dessous ; pas d'inquiétude, la plupart des fichiers .js sont aussi extensivement documentés plus bas.</p>
+<ul>
+<li>Racine du projet : fichiers de configuration ;<ul>
+<li>config.json : données &quot;sensibles&quot; spécifique au projet à priori non partageable (adresse du LDAP, mots de passe),</li>
+<li>configfile_doc.json : JSDoc, l'outil de génération automatique de documentation,</li>
+<li>autres fichiers relatifs à des modules particuliers ou à la gestion de paquets,</li>
+<li><a href="./assets"><code>assets</code></a> : ressources ;<ul>
+<li>images et divers (dont l'essentiel flavicon)</li>
+</ul>
+</li>
+<li><a href="./build"><code>build</code></a> : dépendances gérées automatiquement ;<ul>
+<li>bundle.js est un monstrueux fichier généré automatiquement qui gère nos dépendances.</li>
+</ul>
+</li>
+<li><a href="./db"><code>db</code></a> : base de donnée sigma ;<ul>
+<li>knex_router.js charge la configuration précisée dans knexfile.js,</li>
+<li><a href="./db/migrations"><code>migrations</code></a> stocke l'ensemble des migrations knex ; c'est un équivalent d'un répertoire git pour la BDD sigma (du coup seulement les groupes pas les individus),</li>
+<li><a href="./db/seeds"><code>seeds</code></a> : stocke les éléments de générations des BDD ; c'est un ensemble de scripts.</li>
+</ul>
+</li>
+<li><a href="./doc"><code>doc</code></a> : documentation ;<ul>
+<li>ensemble de pages html et fichiers associés ; index.html permet de naviguer sereinement sur toute la doc JSDoc.</li>
+</ul>
+</li>
+<li><a href="./node_modules"><code>node_modules</code></a> : gestion automatique des modules.</li>
+<li><a href="./src"><code>src</code></a> : code source<ul>
+<li><a href="./src/admin_view"><code>admin_view</code></a> : gestion d'une interface administrateur de la base de donnée, s'appuie sur <em>css</em> et <em>views</em></li>
+<li><a href="./src/ldap"><code>ldap</code></a> : gestion des requêtes LDAP</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<p>La syntaxe adoptée est JavaScript ES6, un standard moderne (2015) de JavaScript. Il permet d'importer des dépendances en utilisant le mot-clé <code>import</code>, ce que le serveur Node.js ne comprend pas puisque la version 8 de Node ne comprend que le standard ES5 (2009), qui gère les imports avec <code>require()</code>.</p>
+<h2>Base de données</h2><p>Sigma s'appuie sur deux bases de données :</p>
+<ul>
+<li>La BDD frankiz accessible par LDAP hébergée sur un serveur de l'école, qui contient identifiants, mots de passe, et toutes les informations sur les utilisateurs et groupes spécifiques X.<ul>
+<li>On y accède par des requêtes LDAP, d'où la nécessité de ldap.js.</li>
+</ul>
+</li>
+<li>La BDD de sigma propre est en <a href="https://www.postgresql.fr/">PostgreSQL</a>, hébergée en propre BR, qui contient les groupes et leurs niveaux de visibilité mais peu d'information sur les utilisateurs (seulement son école).<ul>
+<li>Cette BDD est géré par <a href="http://knexjs.org">Knex</a>.</li>
+</ul>
+</li>
+</ul>
+<p>Cette structure peut sembler lourde et redondante mais s'explique par plusieurs raisons :</p>
+<ul>
+<li>Volonté d'intégrer d'autres écoles simplement<ul>
+<li>Rajouter leurs groupes sur la BDD sigma</li>
+<li>Pas les obliger à rejoindre notre LDAP avec notre structure</li>
+</ul>
+</li>
+<li>Garder le LDAP X et le mettre à jour ; il est utilisé par beaucoup d'autres sites X</li>
+<li>Enjeu de sécurité<ul>
+<li>La BDD de sigma est public et ne comporte rien de compromettant</li>
+<li>La BDD accessible par LDAP de l'X qui contient des informations plus sensibles et qui doit être plus protégée</li>
+</ul>
+</li>
+</ul>
+<p>Les deux sections suivantes détaillent les opérations possibles grâce au back directement sur les bases de données via sigma.</p>
+<h3>Fonctions knexjs</h3><p>Quelques exemples de fonctions utiles de <code>knexjs</code> <a href="http://knexjs.org">Knex</a></p>
+<ul>
+<li><code>knex migrate:make migration_name</code> crée une migration dans <code>migrations/</code> : le nom du fichier est <code>migration_name.js</code> avec la date et l'heure en préfixe</li>
+<li><code>knex migrate:latest</code> met à jour le schéma de la BDD</li>
+<li><code>knex seed:make filename</code> crée un <em>seed</em> <code>seeds/filename</code></li>
+<li><code>knex seed:run</code> insère les <em>seeds</em> dans la BDD</li>
+</ul>
+<p>Un fichier <em>seed</em> permet d'insérer des données dans la BDD. Ils sont stockés dans <a href="./db/seeds"><code>seeds</code></a>.</p>
+<h3>Fonctions LDAP</h3><p>On peut facilement explorer et modifier des éléments du LDAP de l'école depuis le réseau de l'X avec <a href="http://jxplorer.org/">JXplorer</a> en entrant <code>frankiz</code> dans nouvelle connexion et en allant dans <code>net</code>.</p>
+<h2>Scripts</h2><p>Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande <code>npm run</code>. Ce sont des raccourcis pour gagner du temps sur des opérations un peu longues. Ils sont définis dans <a href="./package.json"><code>package.json</code></a>.</p>
+<p>Les plus importants sont détaillées ci-dessous (ne pas oublier <code>npm install</code> déjà mentionné plus tôt) :</p>
+<p>On utilisera Webpack pour transpiler le fichier source <a href="./src/index.js"><code>src/index.js</code></a> en <a href="./build/bundle.js"><code>build/bundle.js</code></a> qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise :</p>
+<ul>
+<li><code>npm run build</code> qui exécute la commande <code>webpack</code> avec le fichier de configuration <code>webpack.config.js</code>, ou</li>
+<li><code>npm run watch</code> qui recompile automatiquement dès que le code est modifié.</li>
+</ul>
+<p>Pour faire tourner le serveur, il y a deux options :</p>
+<ul>
+<li><code>npm start</code> fait tourner le serveur <code>bundle.js</code> en mode prod sur le port 3000 (donc il faut consulter https://localhost:3000)</li>
+<li><code>npm test</code> le démarre avec <a href="https://nodemon.io/">nodemon</a>, outil dév qui redémarre automatiquement le serveur dans <code>bundle.js</code> dès que celui-ci est modifié.</li>
+</ul>
+<p>Donc, lancer <code>npm run watch</code> dans un terminal et <code>npm test</code> dans un autre permet de recompiler le serveur <strong>et</strong> le redémarrer automatiquement dès qu'il y a une modification.</p>
+<p>Le script pour faire tourner <a href="http://usejsdoc.org/index.html">JSDoc</a> et régénérrer la documentation est : <code>npm run doc</code> </p>
+<h2>Documentation</h2><p>La documentation détaillée du projet est <a href="./doc/index.html">ici</a>. Elle a été compilée avec <a href="http://usejsdoc.org/index.html">JSDoc</a> sous format hmtl selon le fichier de configuration <a href="./configfile_doc.json"><code>configfile_doc.json</code></a> à la racine du projet.</p>
+<p>Les fichiers compilés se situent dans <a href="./doc"><code>doc</code></a> avec leurs fichiers image. Par nature de l'outil JSDoc il est facile de documenter en détail des fonctions .js mais plus compliqué de documenter un fichier.</p>
+<h2>Appendixes</h2><h3>ESLint</h3><p>On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier <code>.eslintrc.json</code>. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne.</p>
+<p>Il est préférable de l'installer <strong>globalement</strong> avec</p>
+<p>   npm install -g eslint</p>
+<p>Pour faire valider les fichiers source par ESLint, utilisez</p>
+<pre class="prettyprint source"><code>npm run lint</code></pre><p>qui fait appel au script <code>eslint src/</code> défini dans le <a href="./package.json"><code>package.json</code></a>. L'option <code>--fix</code> permet de corriger les fichiers.</p>
+<p>Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en <em>live</em> sur le code et vérifient que tout est en ordre.</p>
+<p>Pour mieux comprendre ESLint, référez-vous à la <a href="https://eslint.org/docs/user-guide/getting-started">doc</a>.</p></article>
+    </section>
+
 
 
 
@@ -433,7 +545,7 @@
 
 <header>
     
-        <h2>src/ldap_auth/ldap_auth.js</h2>
+        <h2>src/ldap/ldap_auth.js</h2>
         
     
 </header>
@@ -484,7 +596,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_auth_ldap_auth.js.html">src/ldap_auth/ldap_auth.js</a>, <a href="src_ldap_auth_ldap_auth.js.html#line11">line 11</a>
+        <a href="src_ldap_ldap_auth.js.html">src/ldap/ldap_auth.js</a>, <a href="src_ldap_ldap_auth.js.html#line11">line 11</a>
     </li></ul></dd>
     
 
@@ -533,7 +645,7 @@
 
 <header>
     
-        <h2>src/ldap_auth/ldap_auth.js</h2>
+        <h2>src/ldap/ldap_auth.js</h2>
         
     
 </header>
@@ -577,7 +689,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_auth_ldap_auth.js.html">src/ldap_auth/ldap_auth.js</a>, <a href="src_ldap_auth_ldap_auth.js.html#line1">line 1</a>
+        <a href="src_ldap_ldap_auth.js.html">src/ldap/ldap_auth.js</a>, <a href="src_ldap_ldap_auth.js.html#line1">line 1</a>
     </li></ul></dd>
     
 
@@ -626,7 +738,7 @@
 
 <header>
     
-        <h2>src/ldap_data/ldap_data.js</h2>
+        <h2>src/ldap/ldap_data.js</h2>
         
     
 </header>
@@ -677,7 +789,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line1">line 1</a>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line1">line 1</a>
     </li></ul></dd>
     
 
@@ -821,7 +933,7 @@
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html
index f149d4d0566e0e23142ba8954a05db293ec5e946..3723ad4e524b2e72d40a627243791e41d8b77791 100644
--- a/doc/knexfile.js.html
+++ b/doc/knexfile.js.html
@@ -72,7 +72,7 @@ module.exports = {
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_admin_view_admin_router.js.html b/doc/src_admin_view_admin_router.js.html
index 2f6365d5765f16bcca08d32cba56564318b78a98..ac0f82ec1e9b834624252bed2788ec6d7fa93b4c 100644
--- a/doc/src_admin_view_admin_router.js.html
+++ b/doc/src_admin_view_admin_router.js.html
@@ -156,7 +156,7 @@ export default router;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_index.js.html b/doc/src_index.js.html
index fd0cd9ad2dfaf6e9b714ad9e57bcca4e83f2cbbb..66d57bd44f08e7d623aae4ced4ffbddc5c8a6906 100644
--- a/doc/src_index.js.html
+++ b/doc/src_index.js.html
@@ -66,7 +66,7 @@ server.listen(port, () => {
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_auth_ldap_auth.js.html b/doc/src_ldap_auth_ldap_auth.js.html
index a4327d883eb851693392105ed45e779280a0ecd3..2b8cf5b96e966036b0316e22b1a19809259cd6fa 100644
--- a/doc/src_ldap_auth_ldap_auth.js.html
+++ b/doc/src_ldap_auth_ldap_auth.js.html
@@ -91,7 +91,7 @@ export default setupLdapAuth;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:20:59 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_data_ldap_data.js.html b/doc/src_ldap_data_ldap_data.js.html
index 415cd8d9c2ec17561a912291b5bcbcfdcb78e6ff..1868141a9a4a7de45955452a1feb708e318baed2 100644
--- a/doc/src_ldap_data_ldap_data.js.html
+++ b/doc/src_ldap_data_ldap_data.js.html
@@ -97,7 +97,7 @@ listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(g
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:20:59 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_ldap_auth.js.html b/doc/src_ldap_ldap_auth.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..de89ecac68e0945e82b2fa63a9e9171916dda2ce
--- /dev/null
+++ b/doc/src_ldap_ldap_auth.js.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: src/ldap/ldap_auth.js</title>
+
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+    <h1 class="page-title">Source: src/ldap/ldap_auth.js</h1>
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>/**
+ * @file ldap_auth
+ * @summary Setup de l'auth ldap avec passport-ldapauth
+ */
+
+import passport from 'passport';
+import LdapStrategy from 'passport-ldapauth';
+import session from 'express-session';
+import fs from 'fs';
+
+/**
+ * @file Ce fichier gère les authentifications avec le LDAP précisé dans config.json.
+ * @author Wangounet
+ */
+
+function setupLdapAuth(server) {
+    var config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
+    
+    passport.use(new LdapStrategy({
+        server: {
+            url: config.ldap.server,
+            searchBase: config.ldap.searchBase,
+            searchFilter: config.ldap.searchFilter
+        }
+    }));
+
+    server.use(session({ 
+        secret: config.sessionSecret,
+        //store: a modifier avant de lancer en prod
+        //voir les autres options
+        resave: true,
+        saveUninitialized: false
+    }));
+    server.use(passport.initialize());
+    server.use(passport.session());
+
+    passport.serializeUser(function(user, done) {
+        done(null, user);
+    });
+
+    passport.deserializeUser(function(user, done) {
+        done(null, user);
+    });
+
+    // Returns middleware that parses cookies
+    //server.use(cookieParser());
+}
+
+export default setupLdapAuth;
+</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li><li><a href="global.html#listMembers">listMembers</a></li></ul>
+</nav>
+
+<br class="clear">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/src_ldap_ldap_data.js.html b/doc/src_ldap_ldap_data.js.html
new file mode 100644
index 0000000000000000000000000000000000000000..0b0265d5164e9c8edc965b1358328ac5c35353ae
--- /dev/null
+++ b/doc/src_ldap_ldap_data.js.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: src/ldap/ldap_data.js</title>
+
+    <script src="scripts/prettify/prettify.js"> </script>
+    <script src="scripts/prettify/lang-css.js"> </script>
+    <!--[if lt IE 9]>
+      <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+    <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+    <h1 class="page-title">Source: src/ldap/ldap_data.js</h1>
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>/**
+ * @file Ce fichier gère les requêtes LDAP de type données ; liste des groupe d'un individu, liste des membres d'un groupe... A ne pas confondre avec ldap_auth qui lui gère l'authentification.
+ * @author hawkspar
+*/
+
+var ensureLoggedin =  require('connect-ensure-login').ensureLoggedIn;
+var ldapescape = require("ldap-escape");
+var ldap = require('ldapjs');
+
+var client = ldap.createClient({ url: "ldap://frankiz.eleves.polytechnique.fr", timeout: 10000, idleTimeout: 10000});
+
+/**
+ * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire)
+ * @arg {int} uid - Identifiant de l'individu à interroger
+ * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni
+ */
+function listGroups(uid) {
+    return new Promise(function(resolve, reject) {
+        var groupsList=[];
+        
+        client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) {
+            if (err) {
+                reject(err);
+            } else {
+                res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); });
+                res.on('end', function(res) { resolve(groupsList); });
+            }
+        });
+    });
+}
+ 
+/**
+ * TBM
+ * @summary Fonction qui retrouve la liste des membres d'un binet sur le LDAP
+ * @arg {int} uid - Identifiant du groupe à interrogeant (pour des raisons d'identification)
+ * @return {string} Liste des uid de groupes où l'id fournie est membre (noms flat des groupes)
+ */
+function listMembers(uid) {
+    client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net", (err) => { console.log(err); });
+    
+    return new Promise(function(resolve, reject) {
+        var groupsList=[];
+        
+        client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) {
+            if (err) {
+                reject(err);
+            } else {
+                res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); });
+                res.on('end', function(res) { resolve(groupsList); });
+            }
+        });
+    });
+}
+
+// Synthaxe d'utilisation
+listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(grList); });</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li><li><a href="global.html#listMembers">listMembers</a></li></ul>
+</nav>
+
+<br class="clear">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/src_server.js.html b/doc/src_server.js.html
index 5897b905c9af3ec795ca44675d802e13c3ae4cc3..570c095a91e3f0d787b50e54215520324f4607be 100644
--- a/doc/src_server.js.html
+++ b/doc/src_server.js.html
@@ -110,7 +110,7 @@ export default server;
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:15:16 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/src/ldap_auth/ldap_auth.js b/src/ldap/ldap_auth.js
similarity index 91%
rename from src/ldap_auth/ldap_auth.js
rename to src/ldap/ldap_auth.js
index 6da40b132f6fce41c18e672b77eafc5643ff0c1b..81d0d89a1b17b10042a4e09e6104e4265ce864f2 100644
--- a/src/ldap_auth/ldap_auth.js
+++ b/src/ldap/ldap_auth.js
@@ -1,6 +1,6 @@
 /**
- * @file ldap_auth
- * @summary Setup de l'auth ldap avec passport-ldapauth
+ * @file Ce fichier gère les authentifications avec le LDAP précisé dans config.json à l'aide de passport-ldapauth.
+ * @author Wangounet
  */
 
 import passport from 'passport';
@@ -8,11 +8,6 @@ import LdapStrategy from 'passport-ldapauth';
 import session from 'express-session';
 import fs from 'fs';
 
-/**
- * @file Ce fichier gère les authentifications avec le LDAP précisé dans config.json.
- * @author Wangounet
- */
-
 function setupLdapAuth(server) {
     var config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
     
diff --git a/src/ldap_data/ldap_data.js b/src/ldap/ldap_data.js
similarity index 100%
rename from src/ldap_data/ldap_data.js
rename to src/ldap/ldap_data.js