From aba62ce8e90d466bd49be47b95e34bbcea101896 Mon Sep 17 00:00:00 2001
From: Quentin CHEVALIER <quentin.chevalier@polytechnique.edu>
Date: Tue, 27 Feb 2018 17:45:10 +0100
Subject: [PATCH] Doc uploaded

---
 doc/global.html           | 335 ++++++++++++++++++++++++++++++--------
 doc/index.html            |   4 +-
 doc/knexfile.js.html      |   4 +-
 doc/src_index.js.html     |  60 ++++---
 doc/src_ldap_data.js.html | 173 ++++++++++++++++++++
 package-lock.json         |  52 +++++-
 package.json              |   2 +
 7 files changed, 529 insertions(+), 101 deletions(-)
 create mode 100644 doc/src_ldap_data.js.html

diff --git a/doc/global.html b/doc/global.html
index 15f6ee6..14073ea 100644
--- a/doc/global.html
+++ b/doc/global.html
@@ -94,19 +94,71 @@
     
 
     
-        <h3 class="subsection-title">Members</h3>
+
+    
+        <h3 class="subsection-title">Methods</h3>
 
         
             
-<h4 class="name" id="Database:Tableget"><span class="type-signature"></span>Database: Table get<span class="type-signature"></span></h4>
 
+    
 
-<p class="summary"><p>Get table data</p>.</p>
+    
+    <h4 class="name" id="checkGroupAdmin"><span class="type-signature"></span>checkGroupAdmin<span class="signature">()</span><span class="type-signature"></span></h4>
+    
+
+    
+    <p class="summary"><p>console.log(client.search(&quot;ou=groups,dc=frankiz,dc=net&quot;, function(err, res) { return err; } ));
+    return client.search(&quot;ou=groups,dc=frankiz,dc=net&quot;, {
+        scope: &quot;one&quot;,
+        filter: ldapescape.filter(&quot;(|(memberUid=${id})(restrictedMemberUid={$id}))&quot;,{id: person_id}),
+        attributes: &quot;uid&quot;,
+    },
+    function(err, res) { return err;
+        if (err) {
+            reject(&quot;LDAP &quot;);
+        }
+        assert.ifError(err);</p>
+<pre class="prettyprint source"><code>    res.on('searchEntry', function(entry) {
+        console.log('entry: ' + JSON.stringify(entry.object));
+    });
+    res.on('searchReference', function(referral) {
+        console.log('referral: ' + referral.uris.join());
+    });
+    res.on('error', function(err) {
+        console.error('error: ' + err.message);
+    });
+    res.on('end', function(result) {
+        console.log('status: ' + result.status);});
+});</code></pre><p>}</p>.</p>
+    
 
 
 
 <div class="description">
-    <p>Get table data</p>
+    <p>console.log(client.search(&quot;ou=groups,dc=frankiz,dc=net&quot;, function(err, res) { return err; } ));
+    return client.search(&quot;ou=groups,dc=frankiz,dc=net&quot;, {
+        scope: &quot;one&quot;,
+        filter: ldapescape.filter(&quot;(|(memberUid=${id})(restrictedMemberUid={$id}))&quot;,{id: person_id}),
+        attributes: &quot;uid&quot;,
+    },
+    function(err, res) { return err;
+        if (err) {
+            reject(&quot;LDAP &quot;);
+        }
+        assert.ifError(err);</p>
+<pre class="prettyprint source"><code>    res.on('searchEntry', function(entry) {
+        console.log('entry: ' + JSON.stringify(entry.object));
+    });
+    res.on('searchReference', function(referral) {
+        console.log('referral: ' + referral.uris.join());
+    });
+    res.on('error', function(err) {
+        console.error('error: ' + err.message);
+    });
+    res.on('end', function(result) {
+        console.log('status: ' + result.status);});
+});</code></pre><p>}</p>
 </div>
 
 
@@ -115,6 +167,12 @@
 
 
 
+
+
+
+
+
+
 <dl class="details">
 
     
@@ -144,7 +202,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line16">line 16</a>
+        <a href="src_ldap_data.js.html">src/ldap_data.js</a>, <a href="src_ldap_data.js.html#line64">line 64</a>
     </li></ul></dd>
     
 
@@ -157,21 +215,41 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
 
 
 
         
             
-<h4 class="name" id="Home"><span class="type-signature"></span>Home<span class="type-signature"></span></h4>
+
+    
+
+    
+    <h4 class="name" id="Error404catcher"><span class="type-signature"></span>Error 404 catcher<span class="signature">()</span><span class="type-signature"></span></h4>
+    
+
+    
+    <p class="summary"><p>Catche les requêtes en dehors des URL acceptées</p></p>
+    
+
+
+
 
 
-<p class="summary"><p>Returns home page of API</p>.</p>
 
 
 
-<div class="description">
-    <p>Returns home page of API</p>
-</div>
 
 
 
@@ -208,7 +286,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line5">line 5</a>
+        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line55">line 55</a>
     </li></ul></dd>
     
 
@@ -224,11 +302,17 @@
 
 
 
-        
-    
 
-    
-        <h3 class="subsection-title">Methods</h3>
+
+
+
+
+
+
+
+
+
+
 
         
             
@@ -236,18 +320,15 @@
     
 
     
-    <h4 class="name" id="checkGroupAdmin"><span class="type-signature"></span>checkGroupAdmin<span class="signature">(uid, from, client)</span><span class="type-signature"></span></h4>
+    <h4 class="name" id="Error404handler"><span class="type-signature"></span>Error 404 handler<span class="signature">()</span><span class="type-signature"></span></h4>
     
 
     
-    <p class="summary"><p>Fonction de Toussaint</p>.</p>
+    <p class="summary"><p>Gère les erreurs 404</p></p>
     
 
 
 
-<div class="description">
-    <p>Fonction de Toussaint</p>
-</div>
 
 
 
@@ -257,84 +338,121 @@
 
 
 
-    <h5>Parameters:</h5>
+
+
+
+<dl class="details">
+
     
 
-<table class="params">
-    <thead>
-    <tr>
-        
-        <th>Name</th>
-        
+    
 
-        <th>Type</th>
+    
 
-        
+    
 
-        
+    
 
-        <th class="last">Description</th>
-    </tr>
-    </thead>
+    
 
-    <tbody>
     
 
-        <tr>
-            
-                <td class="name"><code>uid</code></td>
-            
+    
 
-            <td class="type">
-            
-                
-<span class="param-type">int</span>
+    
 
+    
 
-            
-            </td>
+    
 
-            
+    
 
-            
+    
+    <dt class="tag-source">Source:</dt>
+    <dd class="tag-source"><ul class="dummy"><li>
+        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line65">line 65</a>
+    </li></ul></dd>
+    
 
-            <td class="description last"><p>L'id à tester</p></td>
-        </tr>
+    
 
     
 
-        <tr>
-            
-                <td class="name"><code>from</code></td>
-            
+    
+</dl>
+
 
-            <td class="type">
-            
-                
-<span class="param-type">int</span>
 
 
-            
-            </td>
 
-            
 
+
+
+
+
+
+
+
+
+
+
+
+
+        
             
 
-            <td class="description last"><p>Le groupeà tester</p></td>
-        </tr>
+    
 
+    
+    <h4 class="name" id="groupsUserIsMember"><span class="type-signature"></span>groupsUserIsMember<span class="signature">(person_id)</span><span class="type-signature"> &rarr; {string}</span></h4>
+    
+
+    
+    <p class="summary"><p>Fonction qui retrouve les groupes où une personne est membre</p></p>
+    
+
+
+
+
+
+
+
+
+
+
+
+    <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>client</code></td>
+                <td class="name"><code>person_id</code></td>
             
 
             <td class="type">
             
                 
-<span class="param-type">string</span>
+<span class="param-type">int</span>
 
 
             
@@ -344,7 +462,7 @@
 
             
 
-            <td class="description last"><p>Le serveur à tester</p></td>
+            <td class="description last"></td>
         </tr>
 
     
@@ -385,7 +503,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_talk_ldap_data.js.html">src/talk_ldap_data.js</a>, <a href="src_talk_ldap_data.js.html#line12">line 12</a>
+        <a href="src_ldap_data.js.html">src/ldap_data.js</a>, <a href="src_ldap_data.js.html#line14">line 14</a>
     </li></ul></dd>
     
 
@@ -408,6 +526,28 @@
 
 
 
+<h5>Returns:</h5>
+
+        
+<div class="param-desc">
+    <p>Liste des groupes où l'id fournie est membre</p>
+</div>
+
+
+
+<dl>
+    <dt>
+        Type
+    </dt>
+    <dd>
+        
+<span class="param-type">string</span>
+
+
+    </dd>
+</dl>
+
+    
 
 
 
@@ -419,10 +559,12 @@
     
 
     
-    <h4 class="name" id="Error404catcher"><span class="type-signature"></span>Error 404 catcher<span class="signature">()</span><span class="type-signature"></span></h4>
+    <h4 class="name" id="Home"><span class="type-signature"></span>Home<span class="signature">()</span><span class="type-signature"></span></h4>
     
 
     
+    <p class="summary"><p>Renvoie l'accueil du backend</p></p>
+    
 
 
 
@@ -467,7 +609,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line39">line 39</a>
+        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line8">line 8</a>
     </li></ul></dd>
     
 
@@ -501,10 +643,15 @@
     
 
     
-    <h4 class="name" id="Error404handler"><span class="type-signature"></span>Error 404 handler<span class="signature">()</span><span class="type-signature"></span></h4>
+    <h4 class="name" id="KnexAPI:Gettable"><span class="type-signature"></span>Knex API: Get table<span class="signature">(table_name)</span><span class="type-signature"></span></h4>
     
 
     
+    <p class="summary"><p>Effectue une requête pour une table dans la BDD</p></p>
+    
+
+
+
 
 
 
@@ -513,7 +660,53 @@
 
 
 
+    <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>table_name</code></td>
+            
+
+            <td class="type">
+            
+                
+<span class="param-type">string</span>
+
+
+            
+            </td>
+
+            
+
+            
+
+            <td class="description last"><p>La table voulue par l'utilisateur.</p></td>
+        </tr>
+
+    
+    </tbody>
+</table>
 
 
 
@@ -549,7 +742,7 @@
     
     <dt class="tag-source">Source:</dt>
     <dd class="tag-source"><ul class="dummy"><li>
-        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line49">line 49</a>
+        <a href="src_index.js.html">src/index.js</a>, <a href="src_index.js.html#line24">line 24</a>
     </li></ul></dd>
     
 
@@ -593,13 +786,13 @@
 </div>
 
 <nav>
-    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><li><a href="global.html#Database:Tableget">Database: Table get</a></li><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#Home">Home</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><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#groupsUserIsMember">groupsUserIsMember</a></li><li><a href="global.html#Home">Home</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 11:49:25 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 17:44:33 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/index.html b/doc/index.html
index ced8e82..7be14af 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -150,13 +150,13 @@
 </div>
 
 <nav>
-    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><li><a href="global.html#Database:Tableget">Database: Table get</a></li><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#Home">Home</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><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#groupsUserIsMember">groupsUserIsMember</a></li><li><a href="global.html#Home">Home</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 11:49:25 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 17:44:33 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html
index b1c0939..0135d5a 100644
--- a/doc/knexfile.js.html
+++ b/doc/knexfile.js.html
@@ -65,13 +65,13 @@ module.exports = {
 </div>
 
 <nav>
-    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><li><a href="global.html#Database:Tableget">Database: Table get</a></li><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#Home">Home</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><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#groupsUserIsMember">groupsUserIsMember</a></li><li><a href="global.html#Home">Home</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 11:49:25 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 17:44:33 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_index.js.html b/doc/src_index.js.html
index 33d55ae..cdbc178 100644
--- a/doc/src_index.js.html
+++ b/doc/src_index.js.html
@@ -28,25 +28,33 @@
         <article>
             <pre class="prettyprint source linenums"><code>import server from './server';
 import colors from 'colors';
+import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
+import makeExecutableSchema from 'graphql-tools';
 import knex from '../db/knex_router';
+import path from 'path';
 
 /**
- * Returns home page of API
- * @name Home
+ * @function Home
+ * @summary Renvoie l'accueil du backend
  */
 server.get('/', function(req, res) {
-    console.log('Connectting to '+req.url);
-    res.send(`&lt;h1>Hello, world&lt;/h1>
-    
-    Hello, world ! This is server talking to you live on port `+port+' !');
+    console.log('Connecting to '+req.url);
+    res.render('home', {title: 'Home', port: port});
+});
+
+server.get('/db?', function(req, res) {
+    let table_name = req.query.table;
+    let columns = req.query.columns;
+
+    res.redirect(`db/${table_name}?columns=${columns}`);
 });
 
 /**
- * Get table data
- * @name Database: Table get
- * @argument id - Table user wants
+ * @function Knex API: Get table
+ * @summary Effectue une requête pour une table dans la BDD
+ * @argument {string} table_name - La table voulue par l'utilisateur.
  */
-server.get('/db/:id?', function(req, res) {
+server.get('/db/:table_name?', function(req, res) {
 
     // get columns from query
     let columns;
@@ -57,16 +65,24 @@ server.get('/db/:id?', function(req, res) {
     }
     console.log(columns);
     
-    knex.select(columns).from(req.params.id).then(function(table) {
+    knex.select(columns).from(req.params.table_name).then(function(table) {
         res.setHeader("Content-Type", "application/json");
         res.write(JSON.stringify(table,null,2));
         res.end();
-    });
+    },function() {
+        res.status(400);
+        res.render('error', {
+            status: res.statusCode,
+            error_message: "Bad request: can't find table " + req.params.table_name
+        });
+        res.end();
+    }
+    );
 });
 
 /**
- * @name Error 404 catcher
- * @function
+ * @function Error 404 catcher
+ * @summary Catche les requêtes en dehors des URL acceptées
  */
 server.use((req, res, next) => {
     let err = new Error('Not found');
@@ -75,15 +91,19 @@ server.use((req, res, next) => {
 });
 
 /**
- * @name Error 404 handler
- * @function
+ * @function Error 404 handler
+ * @summary Gère les erreurs 404
  */
+
 server.use((err, req, res, next) => {
     res.locals.message = err.message;
-    res.locals.error = req.server.get('env') === 'development' ? err : {};
 
     res.status(err.status || 500);
-    res.render('Error');
+    let error_message = res.statusCode == 404 ? 'Not found.' : 'Internal server error.';
+    res.render('error', {
+        status: res.statusCode,
+        error_message: error_message
+    });
 });
 
 // define port server is to listen on
@@ -99,13 +119,13 @@ server.listen(port, () => console.log(colors.blue('Express server running on por
 </div>
 
 <nav>
-    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><li><a href="global.html#Database:Tableget">Database: Table get</a></li><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#Home">Home</a></li></ul>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><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#groupsUserIsMember">groupsUserIsMember</a></li><li><a href="global.html#Home">Home</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li></ul>
 </nav>
 
 <br class="clear">
 
 <footer>
-    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 11:49:25 GMT+0100 (Paris, Madrid)
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 17:44:33 GMT+0100 (Paris, Madrid)
 </footer>
 
 <script> prettyPrint(); </script>
diff --git a/doc/src_ldap_data.js.html b/doc/src_ldap_data.js.html
new file mode 100644
index 0000000..cdaa9c9
--- /dev/null
+++ b/doc/src_ldap_data.js.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title>JSDoc: Source: src/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_data.js</h1>
+
+    
+
+
+
+    
+    <section>
+        <article>
+            <pre class="prettyprint source linenums"><code>var ensureLoggedin =  require('connect-ensure-login').ensureLoggedIn;
+var ldapescape = require("ldap-escape");
+//var Fuse = require("fuse.js");
+
+var ldap = require('ldapjs');
+
+var client = ldap.createClient({ url: "ldap://frankiz", timeout: 10000, idleTimeout: 10000});
+
+/**
+ * @summary Fonction qui retrouve les groupes où une personne est membre
+ * @arg {int} person_id
+ * @return {string} Liste des groupes où l'id fournie est membre 
+ */
+function groupsUserIsMember(person_id) {
+    return client.search("ou=groups,dc=frankiz,dc=net", {
+        attributes: "uid",
+        filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid=${id}))", {id: person_id}) },
+    function(err, res){
+        if (err) {
+            return err;
+        } else {
+            console.log(res);
+            res.on('searchEntry', function(entry) {
+                console.log('entry: ' + JSON.stringify(entry.object));
+            });
+            res.on('searchReference', function(referral) {
+                console.log('referral: ' + referral.uris.join());
+            });
+            res.on('error', function(err) {
+                console.error('error: ' + err.message);
+            });
+            res.on('end', function(result) {
+                console.log('status: ' + result.status);
+            });
+        }});
+}
+/**    console.log(client.search("ou=groups,dc=frankiz,dc=net", function(err, res) { return err; } ));
+    return client.search("ou=groups,dc=frankiz,dc=net", {
+        scope: "one",
+        filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid={$id}))",{id: person_id}),
+        attributes: "uid",
+    },
+    function(err, res) { return err;
+        if (err) {
+            reject("LDAP ");
+        }
+        assert.ifError(err);
+
+        res.on('searchEntry', function(entry) {
+            console.log('entry: ' + JSON.stringify(entry.object));
+        });
+        res.on('searchReference', function(referral) {
+            console.log('referral: ' + referral.uris.join());
+        });
+        res.on('error', function(err) {
+            console.error('error: ' + err.message);
+        });
+        res.on('end', function(result) {
+            console.log('status: ' + result.status);});
+    });
+}*/
+
+
+function checkGroupAdmin(uid, from){
+    return new Promise(function(resolve, reject) {
+        client.search("dc=frankiz,dc=net", {scope: "sub", attributes: ["cn", "uid", "mail", "memberUid", "objectClass"], filter: ldapescape.filter("(uid=${uid})", {uid: from})}, function(err, resldap){
+            if (err) {
+                reject("LDAP search error");
+            } else {
+                resldap.on('searchEntry', function(entry) {
+                    if (entry.object.objectClass.indexOf("inetOrgPerson") > -1) {
+                        if (entry.object.uid == uid) {
+                            console.log("Feu1");
+                            resolve(entry.object.cn + " &lt;" + entry.object.mail + ">");
+                        } else {
+                            reject("Cannot send as user which is not you");
+                        }
+                    } else {
+                        if (entry.object.memberUid.indexOf(uid) > -1) {
+                            console.log("Feu2");
+                            resolve(entry.object.cn + " &lt;" + from + "@eleves.polytechnique.fr>")
+                        } else {
+                            reject("You are not admin of this group");
+                        }
+                    }
+                });
+            }
+        });
+    });
+}
+
+function checkGroup(person_id){
+    return new Promise(function(resolve, reject) {
+        client.search("dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(|(memberUid=${id})(restrictedMemberUid=${id}))", {id: person_id})}, function(err, resldap){
+            if (err) {
+                reject("LDAP search error");
+            } else {
+                resldap.on('searchEntry', function(entry) {
+                    if (entry.object.objectClass.indexOf("inetOrgPerson") > -1) {
+                        if (entry.object.uid == person_id) {
+                            resolve("Binet Member");
+                        } else {
+                            reject("Fraud !");
+                        }
+                    } else {
+                        if (entry.object.memberUid.indexOf(person_id) > -1) {
+                            resolve("Binet member 2");
+                        } else {
+                            reject("Fraud");
+                        }
+                    }
+                });
+            }
+        });
+    });
+}
+
+
+console.log(checkGroupAdmin("quentin.chevalier","faerix"));
+
+console.log(checkGroup("quentin.chevalier","faerix"));
+
+console.log(groupsUserIsMember("anatole.romon"));</code></pre>
+        </article>
+    </section>
+
+
+
+
+</div>
+
+<nav>
+    <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#checkGroupAdmin">checkGroupAdmin</a></li><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#groupsUserIsMember">groupsUserIsMember</a></li><li><a href="global.html#Home">Home</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li></ul>
+</nav>
+
+<br class="clear">
+
+<footer>
+    Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Feb 27 2018 17:44:33 GMT+0100 (Paris, Madrid)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/package-lock.json b/package-lock.json
index 1dba8f4..218fd22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -392,6 +392,11 @@
       "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
       "dev": true
     },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+    },
     "asn1": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
@@ -1132,6 +1137,11 @@
         "xdg-basedir": "3.0.0"
       }
     },
+    "connect-ensure-login": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/connect-ensure-login/-/connect-ensure-login-0.1.1.tgz",
+      "integrity": "sha1-F03MUSQ7nqwj+NmCFa62aU4uihI="
+    },
     "console-browserify": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
@@ -2267,6 +2277,14 @@
         "write": "0.2.1"
       }
     },
+    "fmtr": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fmtr/-/fmtr-1.1.0.tgz",
+      "integrity": "sha1-R1RcTNo3rWkbDSDiaHbQdexz/mg=",
+      "requires": {
+        "lodash": "4.17.5"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -4054,6 +4072,15 @@
         "invert-kv": "1.0.0"
       }
     },
+    "ldap-escape": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ldap-escape/-/ldap-escape-1.1.5.tgz",
+      "integrity": "sha512-ss9KD4Eg3CyEZWQoC+10XBx7kL33QGekxYbXK1kn6SPNDu1Hf8Jb5q2FORHFr4vB8pHVeblo/VsnsG+UFoDCJA==",
+      "requires": {
+        "fmtr": "1.1.0",
+        "lodash": "4.17.5"
+      }
+    },
     "ldap-filter": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz",
@@ -4069,6 +4096,25 @@
         }
       }
     },
+    "ldapauth-fork": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.0.2.tgz",
+      "integrity": "sha512-YoPHsyfV6L/4SO5EMi/Jk1xUMaY+ANlR4Yp+WIsqGkWOLPKkuzRYB4s/IsdKBeb3sdwVCw+q/YN9eoa1dXmQdA==",
+      "requires": {
+        "@types/ldapjs": "1.0.3",
+        "@types/node": "7.0.55",
+        "bcryptjs": "2.4.3",
+        "ldapjs": "1.0.2",
+        "lru-cache": "4.1.1"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "7.0.55",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.55.tgz",
+          "integrity": "sha512-diCxfWNT4g2UM9Y+BPgy4s3egcZ2qOXc0mXLauvbsBUq9SBKQfh0SmuEUEhJVFZt/p6UDsjg1s2EgfM6OSlp4g=="
+        }
+      }
+    },
     "ldapjs": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz",
@@ -5761,12 +5807,6 @@
       "integrity": "sha512-EzBtUaFH9bHYPc69wqjp0efJI/DPNHdFbGE3uIMn4sVbO0zx8vZ8cG4WKxQfOpUOKsQyGBiT2mTqnCw+6nLswA==",
       "optional": true
     },
-    "safe-json-stringify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.1.0.tgz",
-      "integrity": "sha512-EzBtUaFH9bHYPc69wqjp0efJI/DPNHdFbGE3uIMn4sVbO0zx8vZ8cG4WKxQfOpUOKsQyGBiT2mTqnCw+6nLswA==",
-      "optional": true
-    },
     "safe-regex": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
diff --git a/package.json b/package.json
index c4ed035..e3a2e26 100644
--- a/package.json
+++ b/package.json
@@ -8,6 +8,7 @@
     "@types/webpack": "^3.8.8",
     "body-parser": "^1.18.2",
     "colors": "^1.1.2",
+    "connect-ensure-login": "^0.1.1",
     "express": "^4.16.2",
     "express-session": "^1.15.6",
     "fs": "0.0.1-security",
@@ -16,6 +17,7 @@
     "graphql-server-express": "^1.3.2",
     "graphql-tools": "^2.21.0",
     "knex": "^0.14.4",
+    "ldap-escape": "^1.1.5",
     "ldapjs": "^1.0.2",
     "morgan": "^1.9.0",
     "passport": "^0.4.0",
-- 
GitLab