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