diff --git a/config.json b/config.json index 5900e8eaa5b5ad1f3c2209b26ce2c63580654615..3dd69aedd8a8f61e5a26ed1c389c5be1451059d7 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "ldap": { - "server": "ldap://frankiz.eleves.polytechnique.fr:636", + "server": "ldap://frankiz.eleves.polytechnique.fr:389", "searchBase": "ou=eleves,dc=frankiz,dc=net", "searchFilter": "(uid={{username}})" }, diff --git a/db/seeds/01_create_groups.js b/db/seeds/01_create_groups.js index bfb6e29087a8ba06a6f83d5230838cc8cb8cd5c7..b5cdc8328d1811503a7310dc9c0c3d7ad6c72baa 100644 --- a/db/seeds/01_create_groups.js +++ b/db/seeds/01_create_groups.js @@ -15,6 +15,11 @@ exports.seed = function(knex, Promise) { website: 'binet-jtx.com', school: 'polytechnique' }, + { + name: 'Kès', + website: 'kes.binets.fr', + school: 'polytechnique' + }, { name: 'DaTA', website: 'data-ensta.fr', diff --git a/doc/db_knex_router.js.html b/doc/db_knex_router.js.html index a69d0112c13b80eefa44384a95fd155c7c585d76..6b9955abfc463d4541bd9e7923ef831f24d6ff66 100644 --- a/doc/db_knex_router.js.html +++ b/doc/db_knex_router.js.html @@ -51,7 +51,11 @@ module.exports = require('knex')(config);</code></pre> <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/global.html b/doc/global.html index 0211e7aa79ed1d3c3a20856ad974ab13a348faca..c50257454724b35b0045fe3b6e121c7de98e0aab 100644 --- a/doc/global.html +++ b/doc/global.html @@ -735,7 +735,11 @@ <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/index.html b/doc/index.html index ecebedb1fee41896a89ef6d836799d82bdae6308..60b4594156aa513e4d4661d48aab0917194506a6 100644 --- a/doc/index.html +++ b/doc/index.html @@ -554,7 +554,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont <div class="container-overview"> - <div class="description"><p>Ce fichier gère les authentifications avec le LDAP précisé dans config.json.</p></div> + <div class="description"><p>ldap_auth</p></div> @@ -596,6 +596,7 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> +<<<<<<< HEAD <a href="src_ldap_ldap_auth.js.html">src/ldap/ldap_auth.js</a>, <a href="src_ldap_ldap_auth.js.html#line11">line 11</a> </li></ul></dd> @@ -690,6 +691,9 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont <dt class="tag-source">Source:</dt> <dd class="tag-source"><ul class="dummy"><li> <a href="src_ldap_ldap_auth.js.html">src/ldap/ldap_auth.js</a>, <a href="src_ldap_ldap_auth.js.html#line1">line 1</a> +======= + <a href="src_ldap_auth_ldap_auth.js.html">src/ldap_auth/ldap_auth.js</a>, <a href="src_ldap_auth_ldap_auth.js.html#line1">line 1</a> +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </li></ul></dd> @@ -933,7 +937,11 @@ npm install -g eslint</code></pre><p>Les dépendances les plus importantes sont <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/knexfile.js.html b/doc/knexfile.js.html index 3723ad4e524b2e72d40a627243791e41d8b77791..3eff8aab5c3ca514cec6e78032086a6e019aaaa4 100644 --- a/doc/knexfile.js.html +++ b/doc/knexfile.js.html @@ -72,7 +72,11 @@ module.exports = { <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_admin_view_admin_router.js.html b/doc/src_admin_view_admin_router.js.html index ac0f82ec1e9b834624252bed2788ec6d7fa93b4c..e7e3c34e28a13139b3a282a8ed4f4c9243ce7859 100644 --- a/doc/src_admin_view_admin_router.js.html +++ b/doc/src_admin_view_admin_router.js.html @@ -156,7 +156,11 @@ export default router; <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_index.js.html b/doc/src_index.js.html index 66d57bd44f08e7d623aae4ced4ffbddc5c8a6906..adac30a53b537bfa9a0a955b2b27a9fd1b3d02d1 100644 --- a/doc/src_index.js.html +++ b/doc/src_index.js.html @@ -66,7 +66,11 @@ server.listen(port, () => { <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_ldap_auth_ldap_auth.js.html b/doc/src_ldap_auth_ldap_auth.js.html index 2b8cf5b96e966036b0316e22b1a19809259cd6fa..c00223e49194ff4f298c233eee1d1f974489fa97 100644 --- a/doc/src_ldap_auth_ldap_auth.js.html +++ b/doc/src_ldap_auth_ldap_auth.js.html @@ -28,30 +28,27 @@ <article> <pre class="prettyprint source linenums"><code>/** * @file ldap_auth - * @summary Setup de l'auth ldap avec passport-ldapauth + * @author Wangounet + * @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'; -/** - * @file Ce fichier gère les authentifications avec le LDAP précisé dans config.json. - * @author Wangounet - */ +let config = JSON.parse(fs.readFileSync('config.json', 'utf8')); + +passport.use(new LdapStrategy({ + server: { + url: config.ldap.server, + searchBase: config.ldap.searchBase, + searchFilter: config.ldap.searchFilter + } +})); function setupLdapAuth(server) { - var config = JSON.parse(fs.readFileSync('config.json', 'utf8')); - passport.use(new LdapStrategy({ - server: { - url: config.ldap.server, - searchBase: config.ldap.searchBase, - searchFilter: config.ldap.searchFilter - } - })); - + // Define new login strategy server.use(session({ secret: config.sessionSecret, //store: a modifier avant de lancer en prod @@ -91,7 +88,11 @@ export default setupLdapAuth; <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 10:20:59 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_ldap_data_ldap_data.js.html b/doc/src_ldap_data_ldap_data.js.html index 1868141a9a4a7de45955452a1feb708e318baed2..f8b46a4e53baa171143cef09ebeef62bf56db2ee 100644 --- a/doc/src_ldap_data_ldap_data.js.html +++ b/doc/src_ldap_data_ldap_data.js.html @@ -97,7 +97,11 @@ listGroups("quentin.chevalier","Ie42fds'eaJm1").then((grList) => { console.log(g <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 10:20:59 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/doc/src_server.js.html b/doc/src_server.js.html index 570c095a91e3f0d787b50e54215520324f4607be..d55747f36337aac154ca31d3fbc49a3f11e9e111 100644 --- a/doc/src_server.js.html +++ b/doc/src_server.js.html @@ -71,6 +71,7 @@ const typeDefs = ` type Group { name: String! id: ID! + website: String updatedAt: String! description: String school: String! @@ -88,8 +89,10 @@ const schema = makeExecutableSchema({ resolvers }); +// Charge le middleware express pour GraphQL server.use('/graphql', bodyParser.json(), graphqlExpress({schema})); +// GraphiQL est une console interactive pour faire des requêtes au schéma GraphQL server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'})); @@ -110,7 +113,11 @@ export default server; <br class="clear"> <footer> +<<<<<<< HEAD Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 11:39:38 GMT+0100 (Paris, Madrid) +======= + Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Feb 28 2018 10:56:16 GMT+0100 (Romance Standard Time) +>>>>>>> 21e0f3870a71cc6be0c944541976c3a24302cd36 </footer> <script> prettyPrint(); </script> diff --git a/src/admin_view/admin_router.js b/src/admin_view/admin_router.js index 0c8fae6ace33cf385e10ad4a3d38ceb695088c79..b704b4f81039cce049d4adaabe9aeeede8533580 100644 --- a/src/admin_view/admin_router.js +++ b/src/admin_view/admin_router.js @@ -1,7 +1,6 @@ /** - * @file Interface "administrateur" de l'acces aux BDD. S'appuie sur css et views. + * @file */ - import express from 'express'; import knex from '../../db/knex_router'; import passport from 'passport'; @@ -20,17 +19,17 @@ router.get('/admin', function (req, res) { res.render('home', { title: 'Home', port: port }); }); -router.post('/loginAttempt' - , passport.authenticate('ldapauth', { +router.post('/login', + passport.authenticate('ldapauth', { //successRedirect: '/admin', failureRedirect: '/', //failureFlash: true //failureFlas: 'Invalid username or password.' //TODO: test this. ce message s'affiche-t-il tout seul ou faut-il aller le chercher quand on genere login.pug? - }) + }), // on a commente les deux lignes dessus et on a besoin de faire un callback apres le passport.authenticate car // on souhaite garde l'information user.dn et body.password qq part. // TODO: essayer de garder ces informations plus proprement... - , function (req, res) { + function (req, res) { req.session.dn = req.user.dn; req.session.password = req.body.password; @@ -43,7 +42,7 @@ router.post('/loginAttempt' ); -router.get('/logout', function (req, res) { +router.post('/logout', function (req, res) { req.logout(); res.redirect('/'); }); diff --git a/src/css/style.css b/src/css/style.css index 6d221f40c5dbfc53357d8384995e700f2ca55023..4d2b77afeb7530103ce6a5cb6b2996e77a502644 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -9,6 +9,7 @@ body { form { margin-bottom: 1em; + margin-top: 1em; } .form-group { diff --git a/src/graphql/schema.js b/src/graphql/schema.js new file mode 100644 index 0000000000000000000000000000000000000000..4313cee559267ccab32af55fa118d67e7bd126ef --- /dev/null +++ b/src/graphql/schema.js @@ -0,0 +1,30 @@ +import knex from '../../db/knex_router'; +import { makeExecutableSchema } from 'graphql-tools'; + +const typeDefs = ` + type Query { + groups: [Group] + } + + type Group { + name: String! + id: ID! + website: String + updatedAt: String! + description: String + school: String! + } +`; + +const resolvers = { + Query: { + groups: () => knex.select().from('groups') + } +}; + +const schema = makeExecutableSchema({ + typeDefs, + resolvers +}); + +export default schema; \ No newline at end of file diff --git a/src/index.js b/src/index.js index f61366f733ae28a66cabdaf699d6024c1f41244b..6529c167e3009cf051fe99f7ae313d45351a4591 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,10 @@ /** * @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'; diff --git a/src/ldap/ldap_auth.js b/src/ldap/ldap_auth.js index 81d0d89a1b17b10042a4e09e6104e4265ce864f2..08dffbc74239bdedadecbe8fe6a3b3ba371b0e53 100644 --- a/src/ldap/ldap_auth.js +++ b/src/ldap/ldap_auth.js @@ -2,23 +2,24 @@ * @file Ce fichier gère les authentifications avec le LDAP précisé dans config.json à l'aide de passport-ldapauth. * @author Wangounet */ - import passport from 'passport'; import LdapStrategy from 'passport-ldapauth'; import session from 'express-session'; import fs from 'fs'; +let config = JSON.parse(fs.readFileSync('config.json', 'utf8')); + +passport.use(new LdapStrategy({ + server: { + url: config.ldap.server, + searchBase: config.ldap.searchBase, + searchFilter: config.ldap.searchFilter + } +})); + function setupLdapAuth(server) { - var config = JSON.parse(fs.readFileSync('config.json', 'utf8')); - passport.use(new LdapStrategy({ - server: { - url: config.ldap.server, - searchBase: config.ldap.searchBase, - searchFilter: config.ldap.searchFilter - } - })); - + // Define new login strategy server.use(session({ secret: config.sessionSecret, //store: a modifier avant de lancer en prod diff --git a/src/server.js b/src/server.js index ebcce17253347f981dda36dde9703b1181d00f22..1a1e3718b869c5b47f059c6465bfa778fe473b05 100644 --- a/src/server.js +++ b/src/server.js @@ -2,11 +2,10 @@ import express from 'express'; import bodyParser from 'body-parser'; import favicon from 'serve-favicon'; import morgan from 'morgan'; -import knex from '../db/knex_router'; import path from 'path'; import ldap_auth from './ldap_auth/ldap_auth'; +import schema from './graphql/schema'; import { graphqlExpress, graphiqlExpress } from 'graphql-server-express'; -import { makeExecutableSchema } from 'graphql-tools'; /** * @file Cree le serveur express avec tous les middleware qui vont bien @@ -35,33 +34,10 @@ 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 -}); - +// Charge le middleware express pour GraphQL server.use('/graphql', bodyParser.json(), graphqlExpress({schema})); +// GraphiQL est une console interactive pour faire des requêtes au schéma GraphQL server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql'})); diff --git a/src/views/home.pug b/src/views/home.pug index e0b402e12dbbe063f98bb2ea06a5116453b8b2e3..1f7ed3bc18f37bbb854c17736228cabab8188267 100644 --- a/src/views/home.pug +++ b/src/views/home.pug @@ -2,8 +2,9 @@ extends layout.pug block content h1 Welcome to API server + h2 Query the database p Hello, world! This is server talking to you live on port #{port}! - p "Interface BDD" du back + p You can use the REST API to query the database using the form below. form(action="/db", method="get") div.form-group label(for="table") Table @@ -13,7 +14,11 @@ block content input.form-control(type="search", name="columns") button.form-control(type="submit") Search | - a(href="/graphql") Check GraphQL + h2 GraphiQL + p + | GraphiQL is an interactive environment to make GraphQL + | requests to the database. + a(href="/graphiql") Check it out. | form(action="/logout", method="post") - button.form-control(type="submit") Se deconnecter + button.form-control(type="submit") Logout diff --git a/src/views/login.pug b/src/views/login.pug index 18abbff1ba0bd8030f074582611646d221c91001..22111792aa11bbd64ebc8341ea5e27bf770b60f0 100644 --- a/src/views/login.pug +++ b/src/views/login.pug @@ -1,10 +1,10 @@ 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") + h1 Sigma backend API + p Veuillez vous connecter. + p Please log in. + form(action="/login", method="post") div.form-group label(for="username") Frankiz ID input.form-control(type="text", placeholder="User", name="username")