diff --git a/config.json b/config.json
index 9e1277e3108d1ed885e5c591fe9f1841514e8be4..27f950c8976c887efdafe22c4897bfdd9842a5c3 100644
--- a/config.json
+++ b/config.json
@@ -14,7 +14,7 @@
 	},
 	"ldap_data_tol": {
 		"searchBase": "ou=eleves,dc=frankiz,dc=net",
-		"searchFilter": "(&(&(&(|(givenName=*${app_fn})(|(givenName=*${app_fn}*)(givenName=${app_fn}*)))(|(sn=*${app_ln})(|(sn=*${app_ln}*)(sn=${app_ln}*))))(brPromo=${app_yr}))(brMemberOf=*${app_na}))",
+		"searchFilterAttributes": ["givenName", "sn", "brPromo","telephoneNumber","mail","brRoom","brIP","brMemberOf","brMemberOf","brMemberOf","brMemberOf","brMemberOf","brMemberOf"],
 		"searchAttributes": ["jpegPhoto","givenName", "sn", "brBirthdate", "brPromo","telephoneNumber","mail","brRoom","brIP"]
 	},
 	"sessionSecret":"change this"
diff --git a/doc/db_knex_router.js.html b/doc/db_knex_router.js.html
index 6b9955abfc463d4541bd9e7923ef831f24d6ff66..77b0a19670a523b59b3d45f4c80c3ea135bf1507 100644
--- a/doc/db_knex_router.js.html
+++ b/doc/db_knex_router.js.html
@@ -45,17 +45,13 @@ module.exports = require('knex')(config);</code></pre>
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/global.html b/doc/global.html
index c50257454724b35b0045fe3b6e121c7de98e0aab..f5578b0321c3be27c2047513620d4b8ba8d5f3b6 100644
--- a/doc/global.html
+++ b/doc/global.html
@@ -154,7 +154,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line89">line 89</a>
+        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line95">line 95</a>
     </li></ul></dd>
     
 
@@ -238,7 +238,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line99">line 99</a>
+        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line105">line 105</a>
     </li></ul></dd>
     
 
@@ -371,7 +371,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line58">line 58</a>
+        <a href="src_admin_view_admin_router.js.html">src/admin_view/admin_router.js</a>, <a href="src_admin_view_admin_router.js.html#line64">line 64</a>
     </li></ul></dd>
     
 
@@ -409,11 +409,15 @@
     
 
     
-    <p class="summary"><p>Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire)</p></p>
+    <p class="summary"><p>Fonction qui interroge le LDAP et retrouve les groupes dont un individu est membre.</p></p>
     
 
 
 
+<div class="description">
+    <p>Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listGroups(uid).then((res) =&gt; { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).</p>
+</div>
+
 
 
 
@@ -504,7 +508,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <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>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line30">line 30</a>
     </li></ul></dd>
     
 
@@ -531,7 +535,7 @@
 
         
 <div class="param-desc">
-    <p>Liste des uid de groupes (noms flat des groupes) où l'id fourni</p>
+    <p>Liste des uid de groupes (noms flat des groupes) où l'id fourni est membre</p>
 </div>
 
 
@@ -560,17 +564,17 @@
     
 
     
-    <h4 class="name" id="listMembers"><span class="type-signature"></span>listMembers<span class="signature">(uid)</span><span class="type-signature"> &rarr; {string}</span></h4>
+    <h4 class="name" id="listMembers"><span class="type-signature"></span>listMembers<span class="signature">(gid)</span><span class="type-signature"> &rarr; {string}</span></h4>
     
 
     
-    <p class="summary"><p>Fonction qui retrouve la liste des membres d'un binet sur le LDAP</p></p>
+    <p class="summary"><p>Fonction qui interroge le LDAP et retrouve la liste des membres d'un groupe.</p></p>
     
 
 
 
 <div class="description">
-    <p>TBM</p>
+    <p>Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listMembers(uid).then((res) =&gt; { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).</p>
 </div>
 
 
@@ -606,7 +610,7 @@
 
         <tr>
             
-                <td class="name"><code>uid</code></td>
+                <td class="name"><code>gid</code></td>
             
 
             <td class="type">
@@ -622,7 +626,7 @@
 
             
 
-            <td class="description last"><p>Identifiant du groupe à interrogeant (pour des raisons d'identification)</p></td>
+            <td class="description last"><p>Identifiant du groupe à interroger</p></td>
         </tr>
 
     
@@ -663,7 +667,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <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>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line51">line 51</a>
     </li></ul></dd>
     
 
@@ -690,7 +694,7 @@
 
         
 <div class="param-desc">
-    <p>Liste des uid de groupes où l'id fournie est membre (noms flat des groupes)</p>
+    <p>Liste des uid des membres où l'id fournie est membre (noms flat des groupes)</p>
 </div>
 
 
@@ -714,6 +718,441 @@
 
 
         
+            
+
+    
+
+    
+    <h4 class="name" id="TOL"><span class="type-signature"></span>TOL<span class="signature">(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12)</span><span class="type-signature"> &rarr; {Array.&lt;string>}</span></h4>
+    
+
+    
+    <p class="summary"><p>Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche.</p></p>
+    
+
+
+
+<div class="description">
+    <p>Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) =&gt; { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).</p>
+</div>
+
+
+
+
+
+
+
+
+
+    <h5>Parameters:</h5>
+    
+
+<table class="params">
+    <thead>
+    <tr>
+        
+        <th>Name</th>
+        
+
+        <th>Type</th>
+
+        
+
+        
+
+        <th class="last">Description</th>
+    </tr>
+    </thead>
+
+    <tbody>
+    
+
+        <tr>
+            
+                <td class="name"><code>c0</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Prénom</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c1</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Nom</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c2</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Surnom</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c3</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Nationalité</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c4</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Ecole ou université d'origine</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c5</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">int</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Promotion</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c6</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Groupe</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c7</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Cours</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c8</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Sport pratiqué</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c9</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">int</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Numéro de téléphone</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c10</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Adresse courriel</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c11</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Adresse physique</p></td>
+        </tr>
+
+    
+
+        <tr>
+            
+                <td class="name"><code>c12</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>Adresse ip</p></td>
+        </tr>
+
+    
+    </tbody>
+</table>
+
+
+
+
+
+
+<dl class="details">
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="src_ldap_ldap_data.js.html">src/ldap/ldap_data.js</a>, <a href="src_ldap_ldap_data.js.html#line84">line 84</a>
+    </li></ul></dd>
+    
+
+    
+
+    
+
+    
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h5>Returns:</h5>
+
+        
+<div class="param-desc">
+    <p>Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo en byttestring et date de naissance.</p>
+</div>
+
+
+
+<dl>
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">Array.&lt;string></span>
+
+
+    </dd>
+</dl>
+
+    
+
+
+
+
+
+        
     
 
     
@@ -729,17 +1168,13 @@
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/index.html b/doc/index.html
index 60b4594156aa513e4d4661d48aab0917194506a6..04bfcdb11193051b2a612e887d90d4c0aabce777 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -44,7 +44,7 @@
 
     <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>
+<h2>Introduction</h2><p>Ce dépôt contient le <em>backend</em> de Sigma, le successeur de Frankiz, un site étudiant permettant de gérer les groupes et les étudiants du plateau de Saclay.</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>
@@ -59,35 +59,35 @@
 <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>
+<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><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><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><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>
+<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><a href="."><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>
+<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>
@@ -127,11 +127,11 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
 <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>
+<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>
+<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>
+<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>
@@ -143,13 +143,12 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
 </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>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="."><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>
+<p>A la fin de ce fichier JSDoc rajjoute les commentaires placés dans chacun des fichiers et des hyperliens pour y accéder.</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>Il est préférable de l'installer <strong>globalement</strong> avec <code>npm install -g eslint</code>. Pour faire valider les fichiers source par ESLint, utilisez <code>npm run lint</code>.</p>
+<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>
@@ -368,8 +367,6 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     <div class="container-overview">
     
         
-            <div class="description"><p>Interface &quot;administrateur&quot; de l'acces aux BDD. S'appuie sur css et views.</p></div>
-        
 
         
 
@@ -554,7 +551,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     <div class="container-overview">
     
         
-            <div class="description"><p>ldap_auth</p></div>
+            <div class="description"><p>Ce fichier gère les authentifications avec le LDAP précisé dans config.json à l'aide de passport-ldapauth.</p></div>
         
 
         
@@ -582,106 +579,12 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     <dt class="tag-author">Author:</dt>
     <dd class="tag-author">
         <ul>
-            <li>Wangounet</li>
+            <li>Wang</li>
         </ul>
     </dd>
     
 
     
-
-    
-
-    
-
-    
-    <dt class="tag-source">Source:</dt>
-    <dd class="tag-source"><ul class="dummy"><li>
-<<<<<<< HEAD
-        <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>
-    
-
-    
-
-    
-
-    
-</dl>
-
-
-        
-    
-    </div>
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-</article>
-
-</section>
-
-
-
-
-
-
-
-<section>
-
-<header>
-    
-        <h2>src/ldap/ldap_auth.js</h2>
-        
-    
-</header>
-
-<article>
-    <div class="container-overview">
-    
-        
-            <div class="description"><p>ldap_auth</p></div>
-        
-
-        
-
-
-<dl class="details">
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
-
-    
 
     
 
@@ -691,9 +594,6 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
         <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>
-=======
-        <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>
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
     </li></ul></dd>
     
 
@@ -751,7 +651,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     <div class="container-overview">
     
         
-            <div class="description"><p>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.</p></div>
+            <div class="description"><p>Ce fichier gère les requêtes LDAP de type données ; liste des groupe d'un individu=&quot;&quot;, liste des membres d'un groupe... A ne pas confondre avec ldap_auth qui lui gère l'authentification.</p></div>
         
 
         
@@ -886,7 +786,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_server.js.html">src/server.js</a>, <a href="src_server.js.html#line11">line 11</a>
+        <a href="src_server.js.html">src/server.js</a>, <a href="src_server.js.html#line1">line 1</a>
     </li></ul></dd>
     
 
@@ -931,17 +831,13 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html
index 3eff8aab5c3ca514cec6e78032086a6e019aaaa4..cf39b23a7abd36b8c8f646a25e12d169a1bf256b 100644
--- a/doc/knexfile.js.html
+++ b/doc/knexfile.js.html
@@ -66,17 +66,13 @@ module.exports = {
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 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 e7e3c34e28a13139b3a282a8ed4f4c9243ce7859..eca8b450a1341f19524253ed11b160e7d7286173 100644
--- a/doc/src_admin_view_admin_router.js.html
+++ b/doc/src_admin_view_admin_router.js.html
@@ -27,12 +27,12 @@
     <section>
         <article>
             <pre class="prettyprint source linenums"><code>/**
- * @file Interface "administrateur" de l'acces aux BDD. S'appuie sur css et views.
+ * @file
  */
-
 import express from 'express';
 import knex from '../../db/knex_router';
 import passport from 'passport';
+import { ensureLoggedIn } from 'connect-ensure-login';
 
 const router = express.Router();
 
@@ -40,25 +40,30 @@ let port = process.env.PORT || 3000;
 
 router.get('/', function (req, res) {
     console.log('Connecting to ' + req.url);
-    res.render('login', { title: 'Login', port: port });
+    req.flash('failureFlash', 'Invalid username or password.');
+    res.render('login', { title: 'Login', port: port, 
+        errorMessage: req.flash('error') });
 });
 
-router.get('/admin', function (req, res) {
-    console.log('Connecting to ' + req.url);
-    res.render('home', { title: 'Home', port: port });
-});
+router.get('/admin',
+    ensureLoggedIn('/'),
+    function (req, res) {
+        console.log('Connecting to ' + req.url);
+        res.render('home', { title: 'Home', port: port });
+    });
 
-router.post('/loginAttempt'
-    , passport.authenticate('ldapauth', {
-        //successRedirect: '/admin',
+router.post('/login', 
+    passport.authenticate('ldapauth', {
+        successRedirect: '/admin',
         failureRedirect: '/',
-        //failureFlash: true
-        //failureFlas: 'Invalid username or password.' //TODO: test this. ce message s'affiche-t-il tout seul ou faut-il aller le chercher quand on genere login.pug?
-    })
-    // on a commente les deux lignes dessus et on a besoin de faire un callback apres le passport.authenticate car
+        failureFlash: true
+    }),
+    // on a besoin de faire un callback apres le passport.authenticate car
     // on souhaite garde l'information user.dn et body.password qq part.
     // TODO: essayer de garder ces informations plus proprement...
-    , function (req, res) {
+    // EDIT: en fait apparemment on a pas besoin de ces informations du tout
+    /*
+    function (req, res) {
         req.session.dn = req.user.dn;
         req.session.password = req.body.password;
 
@@ -68,10 +73,11 @@ router.post('/loginAttempt'
             res.redirect("/admin");
         }
     }
+    */
 
 );
 
-router.get('/logout', function (req, res) {
+router.post('/logout', function (req, res) {
     req.logout();
     res.redirect('/');
 });
@@ -150,17 +156,13 @@ export default router;
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_index.js.html b/doc/src_index.js.html
index adac30a53b537bfa9a0a955b2b27a9fd1b3d02d1..5678fe8cfd7d98bde0bd22b2fc4aa43fad66cf0e 100644
--- a/doc/src_index.js.html
+++ b/doc/src_index.js.html
@@ -29,14 +29,9 @@
             <pre class="prettyprint source linenums"><code>/**
  * @file Entry point de webpack
  */
-
 import server from './server';
 import colors from 'colors';
-
-import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
-import makeExecutableSchema from 'graphql-tools';
-
-import setupLdapAuth from './ldap_auth/ldap_auth';
+import setupLdapAuth from './ldap/ldap_auth.js';
 import router from './admin_view/admin_router';
 
 // setting up ldap authentication
@@ -60,17 +55,13 @@ server.listen(port, () => {
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 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
index de89ecac68e0945e82b2fa63a9e9171916dda2ce..4feb25815829ca6c8898bf76a78f3059cef28989 100644
--- a/doc/src_ldap_ldap_auth.js.html
+++ b/doc/src_ldap_ldap_auth.js.html
@@ -27,31 +27,28 @@
     <section>
         <article>
             <pre class="prettyprint source linenums"><code>/**
- * @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 Wang
  */
-
 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
- */
+let 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
+    }
+}
+));
 
 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
-        }
-    }));
-
+    // Define new login strategy
     server.use(session({ 
         secret: config.sessionSecret,
         //store: a modifier avant de lancer en prod
@@ -85,13 +82,13 @@ export default setupLdapAuth;
 </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>
+    <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><li><a href="global.html#TOL">TOL</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)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_ldap_data.js.html b/doc/src_ldap_ldap_data.js.html
index 0b0265d5164e9c8edc965b1358328ac5c35353ae..943d24f7871cec923247001766e28d734bfbb0f9 100644
--- a/doc/src_ldap_ldap_data.js.html
+++ b/doc/src_ldap_ldap_data.js.html
@@ -27,26 +27,39 @@
     <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.
+ * @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");
+/* Ne pas hésiter à repasser en synthaxe ES5... Plus simple pour tester en solo avec node directement
+import ldap  from 'ldapjs';
+import fs from 'fs';
+import ldapEscape from 'ldap-escape'; */
+
 var ldap = require('ldapjs');
+var fs = require('fs');
+var ldapEscape = require('ldap-escape');
+
+// Important ; permet de vérifier que l'utilisateur reste connecté.
+var ensureLoggedin =  require('connect-ensure-login').ensureLoggedIn;
 
-var client = ldap.createClient({ url: "ldap://frankiz.eleves.polytechnique.fr", timeout: 10000, idleTimeout: 10000});
+// Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement
+let config = JSON.parse(fs.readFileSync('../../config.json', 'utf8'));
+
+// Connection au serveur LDAP avec des temps de timeout arbitraires
+var client = ldap.createClient({ url: config.ldap.server, timeout: 10000, idleTimeout: 10000});
 
 /**
- * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire)
+ * @summary Fonction qui interroge le LDAP et retrouve les groupes dont un individu est membre.
+ * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listGroups(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
  * @arg {int} uid - Identifiant de l'individu à interroger
- * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni
+ * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni est membre
  */
 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) {
+        client.search(config.ldap_data_gl.searchBase, {scope: "sub", attributes: "uid", filter: ldapEscape.filter(config.ldap_data_gl.searchFilter, {id: uid})}, function(err, res) {
             if (err) {
                 reject(err);
             } else {
@@ -58,30 +71,85 @@ function listGroups(uid) {
 }
  
 /**
- * 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)
+ * @summary Fonction qui interroge le LDAP et retrouve la liste des membres d'un groupe.
+ * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listMembers(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
+ * @arg {int} gid - Identifiant du groupe à interroger
+ * @return {string} Liste des uid des membres 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); });
-    
+function listMembers(gid) {
     return new Promise(function(resolve, reject) {
-        var groupsList=[];
+        var membersList=[];
         
-        client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) {
+        client.search(config.ldap_data_ml.searchBase="", {scope: "sub", attributes: "uid", filter: ldapEscape.filter(config.ldap_data_ml.searchFilter, {id: gid})}, 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); });
+                res.on('searchEntry', function(entry) { membersList.push(entry.object.uid); });
+                res.on('end', function(res) { resolve(membersList); });
+            }
+        });
+    });
+}
+ 
+/**
+ * @summary Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche.
+ * @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
+ * @arg {string} c0 - Prénom
+ * @arg {string} c1 - Nom
+ * @arg {string} c2 - Surnom
+ * @arg {string} c3 - Nationalité
+ * @arg {string} c4 - Ecole ou université d'origine
+ * @arg {int} c5 - Promotion
+ * @arg {string} c6 - Groupe
+ * @arg {string} c7 - Cours
+ * @arg {string} c8 - Sport pratiqué
+ * @arg {int} c9 - Numéro de téléphone
+ * @arg {string} c10 - Adresse courriel
+ * @arg {string} c11 - Adresse physique
+ * @arg {string} c12 - Adresse ip
+ * @return {string[]} Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo en byttestring et date de naissance.
+ */
+function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="", c10="", c11="", c12="") {
+    return new Promise(function(resolve, reject) {
+        var candidatesList=[];
+
+        var filter="";
+        var dic={};
+
+        config.ldap_data_tol.searchFilterAttributes.forEach((element, index, list) => {
+            if (eval("c"+index.toString()) != '') {
+                filter="(&amp;"+filter+"(|("+element+"=*${app_"+element+index+"})"+
+                                "(|("+element+"=${app_"+element+index+"})"+
+                                "(|("+element+"=*${app_"+element+index+"}*)"+
+                                    "("+element+"=${app_"+element+index+"}*)))))";
+                dic["app_"+element+index]=eval("c"+index.toString());
+            }
+        });
+
+        client.search(config.ldap_data_tol.searchBase, {scope: "sub", attributes: config.ldap_data_tol.searchAttributes, filter: ldapEscape.filter(filter, dic)}, function(err, res) {
+            if (err) {
+                reject(err);
+            } else {
+                res.on('searchEntry', function(entry) {
+                    for (var i=0; i&lt;config.ldap_data_tol.searchAttributes.length; i++) {
+                        // Complicated, but hides searchAttributes
+                        eval("candidatesList.push(entry.object."+config.ldap_data_tol.searchAttributes[i]+")");
+                    }
+                });
+                res.on('end', function(res) { resolve(candidatesList); });
             }
         });
     });
 }
 
 // Synthaxe d'utilisation
-listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(grList); });</code></pre>
+//listGroups("quentin.louis").then((meList) => { console.log(meList); });
+TOL("","","","","","","faerix","","","","","","").then((meList) => { console.log(meList); });
+
+/* Partage pour le reste du monde ; même remarque synthaxe  
+export { listGroups, listMembers, TOL }; */
+
+module.exports ={ listGroups, listMembers, TOL };</code></pre>
         </article>
     </section>
 
@@ -91,13 +159,13 @@ listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(g
 </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>
+    <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><li><a href="global.html#TOL">TOL</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)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_server.js.html b/doc/src_server.js.html
index d55747f36337aac154ca31d3fbc49a3f11e9e111..e4aac1742a2d0300fcc6081c9c727dda328c4138 100644
--- a/doc/src_server.js.html
+++ b/doc/src_server.js.html
@@ -26,19 +26,17 @@
     
     <section>
         <article>
-            <pre class="prettyprint source linenums"><code>import express from 'express';
+            <pre class="prettyprint source linenums"><code>/** 
+ * @file Cree le serveur express avec tous les middleware qui vont bien
+*/
+import express from 'express';
 import bodyParser from 'body-parser';
 import favicon from 'serve-favicon';
 import morgan from 'morgan';
-import knex from '../db/knex_router';
 import path from 'path';
-import ldap_auth from './ldap_auth/ldap_auth';
+import schema from './graphql/schema';
 import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
-import { makeExecutableSchema } from 'graphql-tools';
-
-/** 
- * @file Cree le serveur express avec tous les middleware qui vont bien
-*/
+import flash from 'connect-flash';
 
 const server = express();
 
@@ -60,41 +58,14 @@ server.use(favicon(path.resolve('./','assets','favicon.ico')));
 // Morgan is middleware for logging requests
 server.use(morgan('dev'));
 
-// setting up ldap authentication
-ldap_auth(server);
-
-const typeDefs = `
-    type Query {
-        groups: [Group]
-    }
-
-    type Group {
-        name: String!
-        id: ID!
-        website: String
-        updatedAt: String!
-        description: String
-        school: String!
-    }
-`;
-
-const resolvers = {
-    Query: {
-        groups: () => knex.select().from('groups')
-    }
-};
-
-const schema = makeExecutableSchema({
-    typeDefs,
-    resolvers
-});
-
 // Charge le middleware express pour GraphQL
 server.use('/graphql', bodyParser.json(), graphqlExpress({schema}));
 
 // GraphiQL est une console interactive pour faire des requêtes au schéma GraphQL
 server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'}));
 
+// connect-flash is middleware for flashing messages
+server.use(flash());
 
 export default server;
 </code></pre>
@@ -107,17 +78,13 @@ export default server;
 </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>
+    <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><li><a href="global.html#TOL">TOL</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-<<<<<<< HEAD
-    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)
-=======
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time)
->>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 18:30:49 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/src/ldap/ldap_data.js b/src/ldap/ldap_data.js
index 9d7b3f3a76b2c2b195fed3c560daafa16a1ae9b7..9a93f2dc203c022304c49b32f0e9bfcb13497c51 100644
--- a/src/ldap/ldap_data.js
+++ b/src/ldap/ldap_data.js
@@ -1,19 +1,29 @@
 /**
- * @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.
+ * @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 ldap  = require('ldapjs');
+
+/* Ne pas hésiter à repasser en synthaxe ES5... Plus simple pour tester en solo avec node directement
+import ldap  from 'ldapjs';
+import fs from 'fs';
+import ldapEscape from 'ldap-escape'; */
+
+var ldap = require('ldapjs');
 var fs = require('fs');
 var ldapEscape = require('ldap-escape');
 
+// Important ; permet de vérifier que l'utilisateur reste connecté.
 var ensureLoggedin =  require('connect-ensure-login').ensureLoggedIn;
 
+// Point central ; tous les champs de la BDD sont 'cachés' dans config.json et pas visibles directement
 let config = JSON.parse(fs.readFileSync('../../config.json', 'utf8'));
 
+// Connection au serveur LDAP avec des temps de timeout arbitraires
 var client = ldap.createClient({ url: config.ldap.server, timeout: 10000, idleTimeout: 10000});
 
 /**
- * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire).
+ * @summary Fonction qui interroge le LDAP et retrouve les groupes dont un individu est membre.
+ * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listGroups(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
  * @arg {int} uid - Identifiant de l'individu à interroger
  * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni est membre
  */
@@ -33,7 +43,8 @@ function listGroups(uid) {
 }
  
 /**
- * @summary Fonction qui retrouve la liste des membres d'un binet sur le LDAP.
+ * @summary Fonction qui interroge le LDAP et retrouve la liste des membres d'un groupe.
+ * @desc Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma listMembers(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma prédéfini dans config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
  * @arg {int} gid - Identifiant du groupe à interroger
  * @return {string} Liste des uid des membres où l'id fournie est membre (noms flat des groupes)
  */
@@ -41,7 +52,7 @@ function listMembers(gid) {
     return new Promise(function(resolve, reject) {
         var membersList=[];
         
-        client.search(config.ldap_data_ml.searchBase, {scope: "sub", attributes: "uid", filter: ldapEscape.filter(config.ldap_data_ml.searchFilter, {id: gid})}, function(err, res) {
+        client.search(config.ldap_data_ml.searchBase="", {scope: "sub", attributes: "uid", filter: ldapEscape.filter(config.ldap_data_ml.searchFilter, {id: gid})}, function(err, res) {
             if (err) {
                 reject(err);
             } else {
@@ -53,33 +64,41 @@ function listMembers(gid) {
 }
  
 /**
- * @summary Fonction qui retrouve les paxs validant les critères de recherche. Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete.
- * @arg {string} fn - Prénom
- * @arg {string} ln - Nom
- * @arg {string} nk - Surnom
- * @arg {string} na - Nationalité
- * @arg {string} sc - Ecole ou université d'origine
- * @arg {int} yr - Promotion
- * @arg {string} gr - Groupe
- * @arg {string} co - Cours
- * @arg {string} sp - Sport pratiqué
- * @arg {int} nb - Numéro de téléphone
- * @arg {string} ma - Adresse courriel
- * @arg {string} ad - Adresse physique
- * @arg {string} ip - Adresse ip
- * @return {string[]} Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo et date de naissance !
+ * @summary Fonction qui interroge le LDAP et retrouve les paxs validant les critères de recherche.
+ * @desc Accepte des champs incomplets mais pas approximatifs et ne gère pas l'auto-complete. Cette fonction utilise une Promise pour être asynchrone ; elle renvoit la promesse d'une réponse puis traite la demande. Il faut l'appeler suivant un schéma TOL(uid).then((res) => { truc avec res });. Aucun bind n'est nécessaire donc pas d'identifiant ou de mot de passe à passer. Cette fonction fait une demande au LDAP qu'elle filtre selon un schéma généré à la volée à partir de config.json et à chaque résultat (event SearchEntry) le met dans une liste, et renvoit la liste à l'issue (event end).
+ * @arg {string} c0 - Prénom
+ * @arg {string} c1 - Nom
+ * @arg {string} c2 - Surnom
+ * @arg {string} c3 - Nationalité
+ * @arg {string} c4 - Ecole ou université d'origine
+ * @arg {int} c5 - Promotion
+ * @arg {string} c6 - Groupe
+ * @arg {string} c7 - Cours
+ * @arg {string} c8 - Sport pratiqué
+ * @arg {int} c9 - Numéro de téléphone
+ * @arg {string} c10 - Adresse courriel
+ * @arg {string} c11 - Adresse physique
+ * @arg {string} c12 - Adresse ip
+ * @return {string[]} Informations recueillies ; plusieurs fois une liste sur le format ci-dessus pour tous les résultats correspondants plus une photo en byttestring et date de naissance.
  */
-function TOL(fn, ln, nk, na, sc, yr, gr, co, sp, nb, ma, ad, ip) {
+function TOL(c0="", c1="", c2="", c3="", c4="", c5="", c6="", c7="", c8="", c9="", c10="", c11="", c12="") {
     return new Promise(function(resolve, reject) {
         var candidatesList=[];
-        ["jpegPhoto","givenName", "sn", "brBirthdate", "brPromo","telephoneNumber","mail","brRoom","brIP"]
+
         var filter="";
-        
-        config.ldap_data_tol.searchAttributes.forEach(element => { filter="(&("+filter+")";
-            
+        var dic={};
+
+        config.ldap_data_tol.searchFilterAttributes.forEach((element, index, list) => {
+            if (eval("c"+index.toString()) != '') {
+                filter="(&"+filter+"(|("+element+"=*${app_"+element+index+"})"+
+                                "(|("+element+"=${app_"+element+index+"})"+
+                                "(|("+element+"=*${app_"+element+index+"}*)"+
+                                    "("+element+"=${app_"+element+index+"}*)))))";
+                dic["app_"+element+index]=eval("c"+index.toString());
+            }
         });
-        
-        client.search(config.ldap_data_tol.searchBase, {scope: "sub", attributes: config.ldap_data_tol.searchAttributes, filter: ldapEscape.filter(config.ldap_data_tol.searchFilter, { app_fn: fn, app_ln: ln, app_nk: nk, app_na: na, app_sc: sc, app_yr: yr, app_gr: gr, app_co: co, app_sp: sp, app_nb: nb, app_ma: ma, app_ad: ad, app_ip: ip})}, function(err, res) {
+
+        client.search(config.ldap_data_tol.searchBase, {scope: "sub", attributes: config.ldap_data_tol.searchAttributes, filter: ldapEscape.filter(filter, dic)}, function(err, res) {
             if (err) {
                 reject(err);
             } else {
@@ -97,6 +116,9 @@ function TOL(fn, ln, nk, na, sc, yr, gr, co, sp, nb, ma, ad, ip) {
 
 // Synthaxe d'utilisation
 //listGroups("quentin.louis").then((meList) => { console.log(meList); });
-TOL("Quentin","u","","","",2016,"","","","","","").then((meList) => { console.log(meList); });
+TOL("","","","","","","faerix","","","","","","").then((meList) => { console.log(meList); });
+
+/* Partage pour le reste du monde ; même remarque synthaxe  
+export { listGroups, listMembers, TOL }; */
 
-export { listGroups, listMembers, TOL };
\ No newline at end of file
+module.exports ={ listGroups, listMembers, TOL };
\ No newline at end of file