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 57fe512677587d0b5f6edbfc8802152a276125e7..4b1b95742b42471eb70bc9c91e23a4daba540c67 100644 --- a/doc/global.html +++ b/doc/global.html @@ -105,6 +105,7 @@ <h4 class="name" id="Error404catcher"><span class="type-signature"></span>Error 404 catcher<span class="signature">()</span><span class="type-signature"></span></h4> +<<<<<<< HEAD @@ -189,6 +190,8 @@ <h4 class="name" id="Error404handler"><span class="type-signature"></span>Error 404 handler<span class="signature">()</span><span class="type-signature"></span></h4> +======= +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 @@ -238,7 +241,11 @@ <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> +<<<<<<< HEAD <a href="src_admin_view_admin_view.js.html">src/admin_view/admin_view.js</a>, <a href="src_admin_view_admin_view.js.html#line66">line 66</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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </li></ul></dd> @@ -371,7 +378,11 @@ <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> +<<<<<<< HEAD <a href="src_admin_view_admin_view.js.html">src/admin_view/admin_view.js</a>, <a href="src_admin_view_admin_view.js.html#line25">line 25</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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </li></ul></dd> @@ -405,11 +416,19 @@ +<<<<<<< HEAD <h4 class="name" id="listGroups"><span class="type-signature"></span>listGroups<span class="signature">(uid)</span><span class="type-signature"> → {string}</span></h4> <p class="summary"><p>Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire)</p></p> +======= + <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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 @@ -447,13 +466,17 @@ <tr> +<<<<<<< HEAD <td class="name"><code>uid</code></td> +======= + <td class="name"><code>table_name</code></td> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 <td class="type"> -<span class="param-type">int</span> +<span class="param-type">string</span> @@ -463,7 +486,11 @@ +<<<<<<< HEAD <td class="description last"><p>Identifiant de l'individu à interroger</p></td> +======= + <td class="description last"><p>La table voulue par l'utilisateur.</p></td> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </tr> @@ -504,7 +531,11 @@ <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> +<<<<<<< HEAD <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line17">line 17</a> +======= + <a href="src_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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </li></ul></dd> @@ -527,6 +558,7 @@ +<<<<<<< HEAD <h5>Returns:</h5> @@ -549,6 +581,8 @@ </dl> +======= +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 @@ -560,6 +594,7 @@ +<<<<<<< HEAD <h4 class="name" id="listMembers"><span class="type-signature"></span>listMembers<span class="signature">(uid)</span><span class="type-signature"> → {string}</span></h4> @@ -572,6 +607,16 @@ <div class="description"> <p>TBM</p> </div> +======= + <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>Fonction qui retrouve les groupes où une personne est membre</p></p> + + + +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 @@ -607,6 +652,32 @@ <tr> <td class="name"><code>uid</code></td> +<<<<<<< HEAD +======= + + + <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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 <td class="type"> @@ -622,7 +693,11 @@ +<<<<<<< HEAD <td class="description last"><p>Identifiant du groupe à interrogeant (pour des raisons d'identification)</p></td> +======= + <td class="description last"><p>Mdp de la personne à interroger</p></td> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </tr> @@ -663,7 +738,11 @@ <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> +<<<<<<< HEAD <a href="src_ldap_data_ldap_data.js.html">src/ldap_data/ldap_data.js</a>, <a href="src_ldap_data_ldap_data.js.html#line38">line 38</a> +======= + <a href="src_ldap_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> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </li></ul></dd> @@ -729,13 +808,21 @@ </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </footer> <script> prettyPrint(); </script> diff --git a/doc/index.html b/doc/index.html index 8420669988005b6e53eafdd9ea66f22c7952d45d..a0b56f1b1d87fcbfe0966dec67b40675a36d94f4 100644 --- a/doc/index.html +++ b/doc/index.html @@ -476,6 +476,378 @@ + + + + + + + <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> + + + + + + + +<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"> + + + + + + + + + + + + + + + + + + + + @@ -529,13 +901,21 @@ </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </footer> <script> prettyPrint(); </script> diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html index 19b4ce3c5a234b2a945b152cedae24e2da7f7404..c6b5c709a534d8ed8226717b8872956e5bb8e482 100644 --- a/doc/knexfile.js.html +++ b/doc/knexfile.js.html @@ -66,13 +66,21 @@ module.exports = { </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 ff646b9daa10fbca54d2b2d8b65f98e7df003c15..71c3ca431ca95e2bf5fcf5eb99a8254a2b3264cd 100644 --- a/doc/src_index.js.html +++ b/doc/src_index.js.html @@ -26,6 +26,7 @@ <section> <article> +<<<<<<< HEAD <pre class="prettyprint source linenums"><code>import server from './server'; import router from './admin_view/admin_view'; import colors from 'colors'; @@ -43,6 +44,34 @@ let port = process.env.PORT || 3000; server.listen(port, () => { console.log(colors.blue(`Express server listening on port ${port}`)); });</code></pre> +======= + <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 setupLdapAuth from './ldap_auth/ldap_auth'; +import router from './admin_view/admin_router'; + +// setting up ldap authentication +setupLdapAuth(server); + +// setting up l'interface admin des BDD +server.use(router); + +let port = process.env.PORT || 3000; + +server.listen(port, () => { + console.log(colors.blue(`Express server listening on port ${port}`)); +}); +</code></pre> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </article> </section> @@ -52,13 +81,21 @@ server.listen(port, () => { </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 index 068b3770aa09d86ac54cf087b08fef0362643185..f8f20db35b7100f060fb37d32316830c57f01d0b 100644 --- a/doc/src_ldap_data_ldap_data.js.html +++ b/doc/src_ldap_data_ldap_data.js.html @@ -26,6 +26,7 @@ <section> <article> +<<<<<<< HEAD <pre class="prettyprint source linenums"><code>/** * @file Ce fichier gère les requêtes LDAP de type données ; liste des groupe d'un individu, liste des membres d'un groupe... A ne pas confondre avec ldap_auth qui lui gère l'authentification. * @author hawkspar @@ -33,14 +34,31 @@ var ensureLoggedin = require('connect-ensure-login').ensureLoggedIn; var ldapescape = require("ldap-escape"); +======= + <pre class="prettyprint source linenums"><code>var ensureLoggedin = require('connect-ensure-login').ensureLoggedIn; +var ldapescape = require("ldap-escape"); +//var Fuse = require("fuse.js"); + +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 var ldap = require('ldapjs'); var client = ldap.createClient({ url: "ldap://frankiz.eleves.polytechnique.fr", timeout: 10000, idleTimeout: 10000}); +<<<<<<< HEAD /** * @summary Fonction qui retrouve les groupes du LDAP dont un individu est membre (pas de bind nécessaire) * @arg {int} uid - Identifiant de l'individu à interroger * @return {string} Liste des uid de groupes (noms flat des groupes) où l'id fourni +======= +// 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 */ function listGroups(uid) { return new Promise(function(resolve, reject) { @@ -56,6 +74,7 @@ function listGroups(uid) { }); }); } +<<<<<<< HEAD /** * TBM @@ -65,6 +84,21 @@ function listGroups(uid) { */ function listMembers(uid) { client.bind("uid=${uid},ou=eleves,dc=frankiz,dc=net", (err) => { console.log(err); }); +======= + +// 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); }); +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 return new Promise(function(resolve, reject) { var groupsList=[]; @@ -78,10 +112,14 @@ function listMembers(uid) { } }); }); +<<<<<<< HEAD } // Synthaxe d'utilisation listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(grList); });</code></pre> +======= +}*/</code></pre> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </article> </section> @@ -91,13 +129,21 @@ listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(g </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_server.js.html b/doc/src_server.js.html index 4b4c8dd72ff51d04fc1f2002157ce2a8c31e4eed..1619ef261d890202affd64f6eade1137620eb783 100644 --- a/doc/src_server.js.html +++ b/doc/src_server.js.html @@ -71,9 +71,17 @@ const typeDefs = ` } type Group { +<<<<<<< HEAD name: String id: Int school: String +======= + name: String! + id: ID! + updatedAt: String! + description: String + school: String! +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 } `; @@ -104,13 +112,21 @@ export default server; </div> <nav> +<<<<<<< HEAD <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></ul> +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </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 09:49:00 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) +>>>>>>> 65d345b0b615581fa3cae6fa778b938f07bb4cf4 </footer> <script> prettyPrint(); </script> 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/admin_view/admin_view.js b/src/admin_view/admin_router.js similarity index 61% rename from src/admin_view/admin_view.js rename to src/admin_view/admin_router.js index f905c586c2b89ca10dcfddbc439f1c1a4d4fe7b1..0c8fae6ace33cf385e10ad4a3d38ceb695088c79 100644 --- a/src/admin_view/admin_view.js +++ b/src/admin_view/admin_router.js @@ -1,18 +1,53 @@ /** * @file Interface "administrateur" de l'acces aux BDD. S'appuie sur css et views. */ + import express from 'express'; import knex from '../../db/knex_router'; +import passport from 'passport'; const router = express.Router(); -let port = 3000; +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; @@ -76,4 +111,4 @@ router.use((err, req, res, next) => { }); }); -export default router; \ No newline at end of file +export default router; diff --git a/src/index.js b/src/index.js index 8cf048f20ca45d473bf7c8221d3de754695c9816..f61366f733ae28a66cabdaf699d6024c1f41244b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,15 +1,24 @@ -import server from './server'; -import router from './admin_view/admin_view'; -import colors from 'colors'; -import path from 'path'; - /** * @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 router from './admin_view/admin_router'; + +// setting up ldap authentication +setupLdapAuth(server); + +// setting up l'interface admin des BDD server.use(router); let port = process.env.PORT || 3000; server.listen(port, () => { console.log(colors.blue(`Express server listening on port ${port}`)); -}); \ No newline at end of file +}); diff --git a/src/ldap_auth/ldap_auth.js b/src/ldap_auth/ldap_auth.js index 0f7a2e2f15ad5b89be6f077bb4fa333624365071..6da40b132f6fce41c18e672b77eafc5643ff0c1b 100644 --- a/src/ldap_auth/ldap_auth.js +++ b/src/ldap_auth/ldap_auth.js @@ -1,10 +1,11 @@ -//var cookieParser = require('cookie-parser'); -//var routes = require('./routes/routes'); -//var api = require('./api/api'); +/** + * @file ldap_auth + * @summary Setup de l'auth ldap avec passport-ldapauth + */ + import passport from 'passport'; import LdapStrategy from 'passport-ldapauth'; import session from 'express-session'; -import ldap from 'ldapjs'; import fs from 'fs'; /** @@ -12,7 +13,7 @@ import fs from 'fs'; * @author Wangounet */ -function SetupLdap(app) { +function setupLdapAuth(server) { var config = JSON.parse(fs.readFileSync('config.json', 'utf8')); passport.use(new LdapStrategy({ @@ -23,9 +24,15 @@ function SetupLdap(app) { } })); - app.use(session({ secret: config.sessionSecret})); - app.use(passport.initialize()); - app.use(passport.session()); + 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); @@ -36,15 +43,7 @@ function SetupLdap(app) { }); // Returns middleware that parses cookies - //app.use(cookieParser()); - - //routes(app, passport); - //api(app, passport, ldap, mailqueue, config); - - setInterval(function(){ - //console.log(mailqueue.length); - }, 2000); - + //server.use(cookieParser()); } -export default SetupLdap; \ No newline at end of file +export default setupLdapAuth; diff --git a/src/server.js b/src/server.js index 5bd7c6f4f7bf5017bdf71e78da383525f68b429a..ebcce17253347f981dda36dde9703b1181d00f22 100644 --- a/src/server.js +++ b/src/server.js @@ -41,9 +41,11 @@ const typeDefs = ` } type Group { - name: String - id: Int - school: String + name: String! + id: ID! + updatedAt: String! + description: String + school: String! } `; diff --git a/src/views/home.pug b/src/views/home.pug index 20f88d1de35b41901c1385d5def01325ccd3986f..e0b402e12dbbe063f98bb2ea06a5116453b8b2e3 100644 --- a/src/views/home.pug +++ b/src/views/home.pug @@ -2,7 +2,8 @@ extends layout.pug block content h1 Welcome to API server - p Hello, world ! This is server talking to you live on port #{port} ! + p Hello, world! This is server talking to you live on port #{port}! + p "Interface BDD" du back form(action="/db", method="get") div.form-group label(for="table") Table @@ -12,4 +13,7 @@ block content input.form-control(type="search", name="columns") button.form-control(type="submit") Search | - a(href="/graphiql") Check GraphQL \ No newline at end of file + a(href="/graphql") Check GraphQL + | + form(action="/logout", method="post") + button.form-control(type="submit") Se deconnecter diff --git a/src/views/login.pug b/src/views/login.pug new file mode 100644 index 0000000000000000000000000000000000000000..18abbff1ba0bd8030f074582611646d221c91001 --- /dev/null +++ b/src/views/login.pug @@ -0,0 +1,14 @@ +extends layout.pug + +block content + h1 Welcome to API server + p Hello, world! This is server talking to you live on port #{port}! + p Vous devez vous connecter pour acceder aux BDD ("interface admin"). + form(action="/loginAttempt", method="post") + div.form-group + label(for="username") Frankiz ID + input.form-control(type="text", placeholder="User", name="username") + div.form-group + label(for="password") Password + input.form-control(type="password", placeholder="Password", name="password") + button.form-control(type="submit") Log in