diff --git a/README.md b/README.md index a246411d8cbbe74f08636de4456851d3eb336a63..d44d0c0be3f93feb14bc651f6ff752d8fdf5303c 100644 --- a/README.md +++ b/README.md @@ -89,3 +89,11 @@ qui fait appel au script `eslint src/` défini dans le [`package.json`](./packag Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en _live_ sur le code et vérifient que tout est en ordre. Pour mieux comprendre ESLint, référez-vous à la [doc](https://eslint.org/docs/user-guide/getting-started). + +# Documentation + +La documentation est compilée avec JSDoc : le script pour le faire tourner est + + npm run doc + +et les fichiers compilés se situent dans `doc/`. \ No newline at end of file diff --git a/doc/global.html b/doc/global.html index 14073eac63dea41abfc6a20dd085273c9c502077..43251922c7ce2f77138a299b04e9264089ae4377 100644 --- a/doc/global.html +++ b/doc/global.html @@ -100,138 +100,6 @@ - - - - - <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("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);</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>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);</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> - - - - - - - - - - - - - -<dl class="details"> - - - - - - - - - - - - - - - - - - - - - - - - - - - <dt class="tag-source">Source:</dt> - <dd class="tag-source"><ul class="dummy"><li> - <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> - - - - - - - -</dl> - - - - - - - - - - - - - - - - - - - - @@ -286,7 +154,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#line55">line 55</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#line90">line 90</a> </li></ul></dd> @@ -370,7 +238,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#line65">line 65</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#line100">line 100</a> </li></ul></dd> @@ -404,11 +272,11 @@ - <h4 class="name" id="groupsUserIsMember"><span class="type-signature"></span>groupsUserIsMember<span class="signature">(person_id)</span><span class="type-signature"> → {string}</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>Fonction qui retrouve les groupes où une personne est membre</p></p> + <p class="summary"><p>Effectue une requête pour une table dans la BDD</p></p> @@ -446,13 +314,13 @@ <tr> - <td class="name"><code>person_id</code></td> + <td class="name"><code>table_name</code></td> <td class="type"> -<span class="param-type">int</span> +<span class="param-type">string</span> @@ -462,7 +330,7 @@ - <td class="description last"></td> + <td class="description last"><p>La table voulue par l'utilisateur.</p></td> </tr> @@ -503,113 +371,7 @@ <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> - <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> - - - - - - - -</dl> - - - - - - - - - - - - - -<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> - - - - - - - - - - - - - - <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> - - - - - - - - - - - - - - - - -<dl class="details"> - - - - - - - - - - - - - - - - - - - - - - - - - - - <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#line8">line 8</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#line59">line 59</a> </li></ul></dd> @@ -643,11 +405,11 @@ - <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> + <h4 class="name" id="listGroups"><span class="type-signature"></span>listGroups<span class="signature">(uid, passwd)</span><span class="type-signature"> → {string}</span></h4> - <p class="summary"><p>Effectue une requête pour une table dans la BDD</p></p> + <p class="summary"><p>Fonction qui retrouve les groupes où une personne est membre</p></p> @@ -685,7 +447,30 @@ <tr> - <td class="name"><code>table_name</code></td> + <td class="name"><code>uid</code></td> + + + <td class="type"> + + +<span class="param-type">int</span> + + + + </td> + + + + + + <td class="description last"><p>Identifiant de la personne à interroger</p></td> + </tr> + + + + <tr> + + <td class="name"><code>passwd</code></td> <td class="type"> @@ -701,7 +486,7 @@ - <td class="description last"><p>La table voulue par l'utilisateur.</p></td> + <td class="description last"><p>Mdp de la personne à interroger</p></td> </tr> @@ -742,7 +527,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#line24">line 24</a> + <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line18">line 18</a> </li></ul></dd> @@ -765,6 +550,28 @@ +<h5>Returns:</h5> + + +<div class="param-desc"> + <p>Liste des uid de groupes où l'id fournie est membre (noms flat des groupes)</p> +</div> + + + +<dl> + <dt> + Type + </dt> + <dd> + +<span class="param-type">string</span> + + + </dd> +</dl> + + @@ -786,13 +593,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#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> + <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></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) + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 09:35:38 GMT+0100 (Romance Standard Time) </footer> <script> prettyPrint(); </script> diff --git a/doc/index.html b/doc/index.html index 7be14afb648fb7068f6bc353b5600bc97f3bf2af..03bcf3efbd41c709555498980024ded53e2e8eba 100644 --- a/doc/index.html +++ b/doc/index.html @@ -140,6 +140,378 @@ +</article> + +</section> + + + + + + + +<section> + +<header> + + <h2>src/admin_view/admin_router.js</h2> + + +</header> + +<article> + <div class="container-overview"> + + + <div class="description"><p>admin_router</p></div> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <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#line1">line 1</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + </div> + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + + + + +<section> + +<header> + + <h2>src/index.js</h2> + + +</header> + +<article> + <div class="container-overview"> + + + <div class="description"><p>index</p></div> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <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#line1">line 1</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + </div> + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + + + + +<section> + +<header> + + <h2>src/ldap_auth/ldap_auth.js</h2> + + +</header> + +<article> + <div class="container-overview"> + + + <div class="description"><p>ldap_auth</p></div> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <dt class="tag-source">Source:</dt> + <dd class="tag-source"><ul class="dummy"><li> + <a href="src_ldap_auth_ldap_auth.js.html">src/ldap_auth/ldap_auth.js</a>, <a href="src_ldap_auth_ldap_auth.js.html#line1">line 1</a> + </li></ul></dd> + + + + + + + +</dl> + + + + + </div> + + + + + + + + + + + + + + + + + + + + +</article> + +</section> + + + + + + + +<section> + +<header> + + <h2>src/server.js</h2> + + +</header> + +<article> + <div class="container-overview"> + + + <div class="description"><p>server.js</p></div> + + + + + +<dl class="details"> + + + + + + + + + + + + + + + + + + + + + + + + + + + <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> + </li></ul></dd> + + + + + + + +</dl> + + + + + </div> + + + + + + + + + + + + + + + + + + + + </article> </section> @@ -150,13 +522,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#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> + <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></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) + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 09:35:38 GMT+0100 (Romance Standard Time) </footer> <script> prettyPrint(); </script> diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html index 0135d5a254b36961c1f09187f15298e8e82b89b5..0d0bfe71cbbc9596c0a0928552f1d95ca4b438ba 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#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> + <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></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) + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 09:35:38 GMT+0100 (Romance Standard Time) </footer> <script> prettyPrint(); </script> diff --git a/doc/src_admin_view_admin_router.js.html b/doc/src_admin_view_admin_router.js.html new file mode 100644 index 0000000000000000000000000000000000000000..f77f1f05e2be05f2f28c2597ba0b577557c1936d --- /dev/null +++ b/doc/src_admin_view_admin_router.js.html @@ -0,0 +1,167 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: src/admin_view/admin_router.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/admin_view/admin_router.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>/** + * @file admin_router + * @summary Interface "administrateur" de l'acces aux BDD + */ + +import express from 'express'; +import knex from '../../db/knex_router'; +import passport from 'passport'; + +const router = express.Router(); + +let port = process.env.PORT || 3000; + +router.get('/', function (req, res) { + console.log('Connecting to ' + req.url); + res.render('login', { title: 'Login', port: port }); +}); + +router.get('/admin', function (req, res) { + console.log('Connecting to ' + req.url); + res.render('home', { title: 'Home', port: port }); +}); + +router.post('/loginAttempt' + , 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 + // on souhaite garde l'information user.dn et body.password qq part. + // TODO: essayer de garder ces informations plus proprement... + , function (req, res) { + req.session.dn = req.user.dn; + req.session.password = req.body.password; + + if (req.session.returnTo !== undefined) { + res.redirect(req.session.returnTo); //TODO: <- euh ok ca marche mais c'est quoi ca? + } else { + res.redirect("/admin"); + } + } + +); + +router.get('/logout', function (req, res) { + req.logout(); + res.redirect('/'); +}); + +router.get('/db?', function (req, res) { + let table_name = req.query.table; + let columns = req.query.columns; + + res.redirect(`db/${table_name}?columns=${columns}`); +}); + +/** + * @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. + */ +router.get('/db/:table_name?', function (req, res) { + + // get columns from query + let columns; + if (req.query.columns) { + columns = req.query.columns.split(','); + } else { + columns = null; + } + console.log(columns); + + 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(); + } + ); +}); + +/** + * @function Error 404 catcher + * @summary Catche les requêtes en dehors des URL acceptées + */ +router.use((req, res, next) => { + let err = new Error('Not found'); + err.status = 404; + next(err); +}); + +/** + * @function Error 404 handler + * @summary Gère les erreurs 404 + */ + +router.use((err, req, res, next) => { + res.locals.message = err.message; + + res.status(err.status || 500); + let error_message = res.statusCode == 404 ? 'Not found.' : 'Internal server error.'; + res.render('error', { + status: res.statusCode, + error_message: error_message + }); +}); + +export default router; +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li></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 09:35:38 GMT+0100 (Romance Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/doc/src_index.js.html b/doc/src_index.js.html index cdbc1780dc6f2832dc197743e60fd4d78344b313..8b3fa9c2a8e095d505d338392eaf61c67dc88177 100644 --- a/doc/src_index.js.html +++ b/doc/src_index.js.html @@ -26,90 +26,32 @@ <section> <article> - <pre class="prettyprint source linenums"><code>import server from './server'; + <pre class="prettyprint source linenums"><code>/** + * @file index + * @summary Entry point de webpack. Finit de setup le server avec ./ldap_auth et ./admin_view + */ + +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'; -/** - * @function Home - * @summary Renvoie l'accueil du backend - */ -server.get('/', function(req, res) { - console.log('Connecting to '+req.url); - res.render('home', {title: 'Home', port: port}); -}); +import setupLdapAuth from './ldap_auth/ldap_auth'; +import router from './admin_view/admin_router'; -server.get('/db?', function(req, res) { - let table_name = req.query.table; - let columns = req.query.columns; +// setting up ldap authentication +setupLdapAuth(server); - res.redirect(`db/${table_name}?columns=${columns}`); -}); +// setting up l'interface admin des BDD +server.use(router); -/** - * @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/:table_name?', function(req, res) { - - // get columns from query - let columns; - if (req.query.columns) { - columns = req.query.columns.split(','); - } else { - columns = null; - } - console.log(columns); - - 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(); - } - ); -}); +let port = process.env.PORT || 3000; -/** - * @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'); - err.status = 404; - next(err); -}); - -/** - * @function Error 404 handler - * @summary Gère les erreurs 404 - */ - -server.use((err, req, res, next) => { - res.locals.message = err.message; - - res.status(err.status || 500); - let error_message = res.statusCode == 404 ? 'Not found.' : 'Internal server error.'; - res.render('error', { - status: res.statusCode, - error_message: error_message - }); +server.listen(port, () => { + console.log(colors.blue(`Express server listening on port ${port}`)); }); - -// define port server is to listen on -const port = process.env.PORT || 3000; - -server.listen(port, () => console.log(colors.blue('Express server running on port', port)));</code></pre> +</code></pre> </article> </section> @@ -119,13 +61,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#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> + <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></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) + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 09:35:38 GMT+0100 (Romance Standard Time) </footer> <script> prettyPrint(); </script> diff --git a/doc/src_ldap_auth_ldap_auth.js.html b/doc/src_ldap_auth_ldap_auth.js.html new file mode 100644 index 0000000000000000000000000000000000000000..cac77e4e9d5a5550d1bb8b6f4b813d6fd25ee220 --- /dev/null +++ b/doc/src_ldap_auth_ldap_auth.js.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: src/ldap_auth/ldap_auth.js</title> + + <script src="scripts/prettify/prettify.js"> </script> + <script src="scripts/prettify/lang-css.js"> </script> + <!--[if lt IE 9]> + <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> + <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> +</head> + +<body> + +<div id="main"> + + <h1 class="page-title">Source: src/ldap_auth/ldap_auth.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>/** + * @file ldap_auth + * @summary Configuration de l'authentification LDAP du backend via passport-ldap + */ +import passport from 'passport'; +import LdapStrategy from 'passport-ldapauth'; +import session from 'express-session'; +import fs from 'fs'; + +function setupLdapAuth(server) { + var config = JSON.parse(fs.readFileSync('config.json', 'utf8')); + + passport.use(new LdapStrategy({ + server: { + url: config.ldap.server, + searchBase: config.ldap.searchBase, + searchFilter: config.ldap.searchFilter + } + })); + + server.use(session({ + secret: config.sessionSecret, + //store: a modifier avant de lancer en prod + //voir les autres options + resave: true, + saveUninitialized: false + })); + server.use(passport.initialize()); + server.use(passport.session()); + + passport.serializeUser(function(user, done) { + done(null, user); + }); + + passport.deserializeUser(function(user, done) { + done(null, user); + }); + + // Returns middleware that parses cookies + //server.use(cookieParser()); +} + +export default setupLdapAuth; +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li></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 09:35:38 GMT+0100 (Romance Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/doc/src_ldap_data_ldap_data.js.html b/doc/src_ldap_data_ldap_data.js.html new file mode 100644 index 0000000000000000000000000000000000000000..50e650bf07bc7a35b958d827df46e09f7aef4603 --- /dev/null +++ b/doc/src_ldap_data_ldap_data.js.html @@ -0,0 +1,108 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: src/ldap_data/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/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.eleves.polytechnique.fr", timeout: 10000, idleTimeout: 10000}); + +// Pas nécessaire normalement car fait dans ldap_auth.js ; ici pour des besoins de debug +function handshake(uid, passwd) { client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net",passwd, (err) => { console.log(err); }); } + +/** + * @summary Fonction qui retrouve les groupes où une personne est membre + * @arg {int} uid - Identifiant de la personne à interroger + * @arg {string} passwd - Mdp de la personne à interroger + * @return {string} Liste des uid de groupes où l'id fournie est membre (noms flat des groupes) + */ +function listGroups(uid) { + return new Promise(function(resolve, reject) { + var groupsList=[]; + + client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) { + if (err) { + reject(err); + } else { + res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); }); + res.on('end', function(res) { resolve(groupsList); }); + } + }); + }); +} + +// Synthaxe d'utilisation +handshake("user","xxx"); +listGroups("user","xxx").then((grList) => { console.log(grList); }); + +/** + * @summary Fonction qui retrouve la liste des membres d'un binet + * @arg {int} uid - Identifiant de la personne interrogeant (pour des raisons d'identification) + * @arg {string} passwd - Mdp de la personne à interroger + * @return {string} Liste des uid de groupes où l'id fournie est membre (noms flat des groupes) + +function listGroups(uid,passwd) { + client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net",passwd, (err) => { console.log(err); }); + + return new Promise(function(resolve, reject) { + var groupsList=[]; + + client.search("ou=groups,dc=frankiz,dc=net", {scope: "sub", attributes: "uid", filter: ldapescape.filter("(restrictedMemberUid=${id})", {id: uid})}, function(err, res) { + if (err) { + reject(err); + } else { + res.on('searchEntry', function(entry) { groupsList.push(entry.object.uid); }); + res.on('end', function(res) { resolve(groupsList); }); + } + }); + }); +}*/</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li></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 09:35:38 GMT+0100 (Romance Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/doc/src_server.js.html b/doc/src_server.js.html new file mode 100644 index 0000000000000000000000000000000000000000..c328fb688dc29e7822dac03ba8cfd44c1be1b2ce --- /dev/null +++ b/doc/src_server.js.html @@ -0,0 +1,121 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>JSDoc: Source: src/server.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/server.js</h1> + + + + + + + <section> + <article> + <pre class="prettyprint source linenums"><code>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 { graphqlExpress, graphiqlExpress } from 'graphql-server-express'; +import { makeExecutableSchema } from 'graphql-tools'; + +/** + * @file server.js + * @summary Cree le serveur express avec tous les middleware qui vont bien + * +*/ + +const server = express(); + +// on sait pas a quoi ca sert mais il parait que c'est utile +server.use(bodyParser.json()); +server.use(bodyParser.urlencoded({ + extended: false +})); + +// setting up view engine for pug +let viewpath = path.resolve('./','src','views'); +console.log(viewpath); +server.set('views', viewpath); +server.set('view engine', 'pug'); + +// favicon: capital sigma symbol +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! + updatedAt: String! + description: String + school: String! + } +`; + +const resolvers = { + Query: { + groups: () => knex.select().from('groups') + } +}; + +const schema = makeExecutableSchema({ + typeDefs, + resolvers +}); + +server.use('/graphql', bodyParser.json(), graphqlExpress({schema})); + +server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'})); + + +export default server; +</code></pre> + </article> + </section> + + + + +</div> + +<nav> + <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#Error404catcher">Error 404 catcher</a></li><li><a href="global.html#Error404handler">Error 404 handler</a></li><li><a href="global.html#KnexAPI:Gettable">Knex API: Get table</a></li><li><a href="global.html#listGroups">listGroups</a></li></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 09:35:38 GMT+0100 (Romance Standard Time) +</footer> + +<script> prettyPrint(); </script> +<script src="scripts/linenumber.js"> </script> +</body> +</html> diff --git a/package.json b/package.json index df8de31d7125f3fe990b9bf419c483e24e4953e3..fa80fd21ee2b75c70a1e49c2df9bc804d1a76655 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "lint": "eslint src/", "build": "webpack", "watch": "webpack --watch", + "doc": "jsdoc -c configfile_doc.json", "test": "nodemon --watch build build/bundle.js" }, "repository": { diff --git a/src/index.js b/src/index.js index 6b75c435c6a2efd7db0b26a439a5f213cfb924da..41857f62ac579320c2d70f25a8d5037e34365d40 100644 --- a/src/index.js +++ b/src/index.js @@ -16,7 +16,7 @@ import router from './admin_view/admin_router'; setupLdapAuth(server); // setting up l'interface admin des BDD -server.use('/', router); +server.use(router); let port = process.env.PORT || 3000; diff --git a/src/views/login.pug b/src/views/login.pug index 9fdad445cf9468d45c96384b3fa602fd01c316a7..18abbff1ba0bd8030f074582611646d221c91001 100644 --- a/src/views/login.pug +++ b/src/views/login.pug @@ -6,9 +6,9 @@ block content p Vous devez vous connecter pour acceder aux BDD ("interface admin"). form(action="/loginAttempt", method="post") div.form-group - label(for="username") Identifiant Frankiz - input.form-control(type="text", placeholder="Identifiant Frankiz", name="username") + label(for="username") Frankiz ID + input.form-control(type="text", placeholder="User", name="username") div.form-group - label(for="password") Mot de passe - input.form-control(type="password", placeholder="Mot de passe", name="password") - button.form-control(type="submit") Se connecter + label(for="password") Password + input.form-control(type="password", placeholder="Password", name="password") + button.form-control(type="submit") Log in