From 6dc496732d83e200312b4fd7e52bd523d62c8495 Mon Sep 17 00:00:00 2001 From: Guillaume WANG <guillaume.wang@polytechnique.edu> Date: Wed, 28 Feb 2018 08:39:02 +0100 Subject: [PATCH] essai d'implementation de login a l'interface admin (marche pas) --- .../{admin_view.js => admin_router.js} | 42 +++++++++++++++++-- src/index.js | 26 +++++++----- src/ldap_auth/ldap_auth.js | 29 +++++-------- src/views/home.pug | 8 +++- src/views/login.pug | 14 +++++++ 5 files changed, 85 insertions(+), 34 deletions(-) rename src/admin_view/{admin_view.js => admin_router.js} (60%) create mode 100644 src/views/login.pug diff --git a/src/admin_view/admin_view.js b/src/admin_view/admin_router.js similarity index 60% rename from src/admin_view/admin_view.js rename to src/admin_view/admin_router.js index 72641e7..487574f 100644 --- a/src/admin_view/admin_view.js +++ b/src/admin_view/admin_router.js @@ -1,20 +1,54 @@ /** - * @file admin_view + * @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 = 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; @@ -79,4 +113,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 f9c12e2..2ddffb8 100644 --- a/src/index.js +++ b/src/index.js @@ -1,20 +1,26 @@ +/** + * @file index + * @summary Entry point de webpack. Finit de setup le server avec ./ldap_auth et ./admin_view + */ + import server from './server'; -import router from './admin_view/admin_view'; import colors from 'colors'; +import path from 'path'; + import { graphqlExpress, graphiqlExpress } from 'graphql-server-express'; import makeExecutableSchema from 'graphql-tools'; -import knex from '../db/knex_router'; -import path from 'path'; -/** - * @file index - * @summary Entry point de webpack - * - */ -server.use(router); +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 5ad52f9..6ce6eb8 100644 --- a/src/ldap_auth/ldap_auth.js +++ b/src/ldap_auth/ldap_auth.js @@ -1,13 +1,14 @@ -//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'; -function SetupLdap(app) { +function setupLdapAuth(server) { var config = JSON.parse(fs.readFileSync('config.json', 'utf8')); passport.use(new LdapStrategy({ @@ -18,9 +19,9 @@ function SetupLdap(app) { } })); - app.use(session({ secret: config.sessionSecret})); - app.use(passport.initialize()); - app.use(passport.session()); + server.use(session({ secret: config.sessionSecret})); + server.use(passport.initialize()); + server.use(passport.session()); passport.serializeUser(function(user, done) { done(null, user); @@ -31,15 +32,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/views/home.pug b/src/views/home.pug index 7835d6b..e0b402e 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="/graphql") 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 0000000..9fdad44 --- /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") Identifiant Frankiz + input.form-control(type="text", placeholder="Identifiant Frankiz", 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 -- GitLab