From fe5ef0dc835458bea5d91338bef14ce00a526439 Mon Sep 17 00:00:00 2001
From: Guillaume WANG <guillaume.wang@polytechnique.edu>
Date: Mon, 7 May 2018 14:23:08 +0200
Subject: [PATCH] minor changes (mostly logs)

---
 src/admin_view/admin_router.js | 14 +++++------
 src/server.js                  | 44 ++++++++++++++++++++++++++--------
 2 files changed, 41 insertions(+), 17 deletions(-)

diff --git a/src/admin_view/admin_router.js b/src/admin_view/admin_router.js
index 9248f12..7b0f3d9 100644
--- a/src/admin_view/admin_router.js
+++ b/src/admin_view/admin_router.js
@@ -23,14 +23,14 @@ let port = process.env.PORT || 3000;
  */
 
 router.get('/', function (req, res) {
-    console.log("GET handler for /adminview route");
-    console.log('Connecting to ' + req.url);
-    console.log('Trying to go to admin page...');
+    console.log("adminview: GET handler for /adminview route");
+    console.log('adminview: Connecting to ' + req.url);
+    console.log('adminview: Trying to go to admin page...');
     res.redirect('/adminview/admin');
 });
 
 router.get('/avlogin', function (req, res) {
-    console.log('Connecting to ' + req.url);
+    console.log('adminview: Connecting to ' + req.url);
     res.render('login', {
         title: 'Login', port: port,
         errorMessage: req.flash('error')
@@ -40,7 +40,7 @@ router.get('/avlogin', function (req, res) {
 router.get('/admin',
     ensureLoggedIn('/adminview/avlogin'),
     function (req, res) {
-        console.log('Connecting to ' + req.url);
+        console.log('adminview: Connecting to ' + req.url);
         let userName;
         // Une erreur a ce stade peut etre triggered si req.user n'existe pas
         // mais pour autant on est assures que la personne est bien authentifiee
@@ -48,7 +48,7 @@ router.get('/admin',
         try {
             let user = req.user;
             //let user = req.user;
-            console.log('Welcome,', user.uid);
+            console.log('adminview: Welcome,', user.uid);
             userName = user.uid;
         } catch (err) {
             console.log("Warning: in admin_router router.get('/admin')");
@@ -152,7 +152,7 @@ router.use((req, res, next) => {
  * @summary Gère les erreurs 404
  */
 router.use((err, req, res, next) => {
-    console.log("Entering error handler");
+    console.log("adminview: Entering error handler");
     res.locals.message = err.message;
     console.log(err.message);
 
diff --git a/src/server.js b/src/server.js
index 61a71ed..259e649 100644
--- a/src/server.js
+++ b/src/server.js
@@ -41,6 +41,12 @@ app.use(bodyParser.json()); //parses bodies of media type "application/json"
 app.use(bodyParser.urlencoded({ //parses bodies of media type "application/x-www-form-urlencoded"
     extended: true //use qs library (quoi que ca veuille dire o.O)
 }));
+app.use(cookieParser()); //parses Cookie header and populate req.cookies with an object keyed by the cookie names. was necessary for express-session before its v1.5.0. on peut probablement l'enlever desormais.
+
+//GHETTO
+// Config de passport pour l'authentification ldap. 
+// Ne fait que *configurer* passport pour la strategie 'ldap' (pas d'incidence sur la strategie 'session' normalement)
+import './config_passport.js';
 
 
 
@@ -74,8 +80,6 @@ const configPath = path.resolve('./', 'ldap_config.json');
 const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
 // WTF??? why is sessionSecret in ldap_config.json? it has nothing to do with ldap. TODO
 
-//app.use(cookieParser()); //parses Cookie header and populate req.cookies with an object keyed by the cookie names. was necessary for express-session before its v1.5.0. on peut probablement l'enlever desormais.
-
 // defines parameters for *session store*. (adds field req.session and do some magic stuff)
 // basically, searches for a session matching the received cookie and, if found, adds field req.blasomethingbla containing serialized object representing user (i.e. similar to what passport.serializeUser() could produce)
 // TODO: it is important to configure this right!!! please check out https://www.npmjs.com/package/express-session and make sure you understand the way session is stored. (en vrai c'est vraiment important...)
@@ -86,9 +90,23 @@ app.use(session({
     //store: // TODO: change this. express-session doc warns that default value is ok to use for development only
 }));
 app.use(passport.initialize()); //initialize Passport. (adds hidden field req._passport and do some magic stuff)
-app.use(passport.session()); //this is equivalent to app.use(passport.authenticate('session'))
+//GHETTO
+//app.use(passport.session()); //this is equivalent to app.use(passport.authenticate('session'))
+app.use(passport.session(), (req, res, next)=>{
+    console.log("Used passport.session()");
+    console.log(`passport.session() found user: ${req.user ? req.user.uid : "none"}`);
+    console.log("passport.session() user is authenticated:", req.isAuthenticated());
+    next();
+}); //this is equivalent to app.use(passport.authenticate('session'))
 // *aucun* effet sur les requetes n'ayant pas ete reconnues par app.use(session(...)) (e.g. les requetes sans cookie ou les requetes avec cookie expired). source: lecture directe du code passport/lib/strategies/session.js sur github... :/
 
+/*
+app.use((req, res, next) => {
+    console.log("Finished trying to authentify request as an existing session");
+    console.log("req.user: "+req.user);
+});
+*/
+
 /**
  * FIN AUTHENTIFICATION POUR LES REQUETES POSSEDANT UN COOKIE ET PROVENANT D'UN UTILISATEUR DEJA AUTHENTIFIE
  */
@@ -114,7 +132,8 @@ const corsOptions = {
     credentials: true // Configures the Access-Control-Allow-Credentials CORS header. i.e. allows cookies to be included on cross-origin requests
 };
 app.use(cors(corsOptions));
-
+ 
+//GHETTO
 // Config de passport pour l'authentification ldap. Ne fait que *configurer* passport (aucun passport.authenticate() n'est appele, par exemple)
 import './config_passport.js';
 
@@ -123,9 +142,12 @@ import './config_passport.js';
 //http://www.passportjs.org/docs/authenticate/#custom-callback
 // http://toon.io/understanding-passportjs-authentication-flow/
 app.post('/login', (req, res, next) => {
+    console.log("Received an authentication request to /login");
     passport.authenticate('ldapauth', (err, user, info) => {
+        console.log("| Entering passport.authenticate('ldapauth', - ) callback");
         // If an exception occurred
         if (err) {
+            console.log("| Error when trying to passport.authenticate with ldapauth");
             console.log(err);
             return res.status(err.status).json({
                 message: "Exception raised in backend process during authentication: " + err,
@@ -135,6 +157,7 @@ app.post('/login', (req, res, next) => {
         }
         // If authentication failed, user will be set to false
         if (!user) {
+            console.log("| Authentication failed, passport.authenticate did not return a user. ");
             return res.status(401).json({
                 message: "Authentication failed: " + info.message,
                 authSucceeded: false
@@ -144,6 +167,7 @@ app.post('/login', (req, res, next) => {
         req.login(user, (err) => {
             // If an exception occurred at login
             if (err) {
+                console.log("| Error when trying to req.login in callback in passport.authenticate('ldapauth', - )");
                 console.log(err);
                 return res.status(err.status).json({
                     message: "Exception raised in backend process during login: " + err,
@@ -152,7 +176,9 @@ app.post('/login', (req, res, next) => {
                 // return next(err); // handle error? or drop request and answer with res.json()?
             }
             // If all went well
-            res.json({
+            console.log("| Authentication succeeded! :-)");
+            // passport.authenticate automatically includes a Set-Cookie HTTP header in the response. The JSON body is just to signal the frontend that all went well
+            return res.status(200).json({
                 message: 'Authentication succeeded',
                 authSucceeded: true
             });
@@ -192,17 +218,17 @@ app.post('/login',
 import { dn, passwd } from "../ldap_connexion_config.json"; // default user
 
 app.use('/graphql', 
-    bodyParser.json(), // parse incoming HTTP request (req) as a JSON
     graphqlHTTP(async (req, res, params) => {
         // vary the options *on a per-request basis*
         let uid;
         let password;
 
         console.log("Responding to graphql request...");
-        console.log(`User ${req.user ? req.user.uid : "none"}`);
-        console.log("User is authenticated:",req.isAuthenticated());
+        console.log(`| User: ${req.user ? req.user.uid : "none"}`);
+        console.log("| User is authenticated:",req.isAuthenticated());
         
         if(req.isAuthenticated()) {
+            console.log("graphql API is receiving a request from an authenticated user! \\o/");
             try {
                 uid = req.user.uid;
                 password = "mythe";
@@ -216,8 +242,6 @@ app.use('/graphql',
             password = passwd;
         }
 
-        console.log("Cookies:",req.cookies);
-
         return {
             schema,
             graphiql: true, // gives access to graphiql if request is detected to be from browser (je crois)
-- 
GitLab