Source: src/admin_view/admin_router.js

/**
 * @file
 */
import express from 'express';
import knex from '../../db/knex_router';
import passport from 'passport';
import { ensureLoggedIn } from 'connect-ensure-login';

const router = express.Router();

let port = process.env.PORT || 3000;

router.get('/', function (req, res) {
    console.log('Connecting to ' + req.url);
    req.flash('failureFlash', 'Invalid username or password.');
    res.render('login', { title: 'Login', port: port, 
        errorMessage: req.flash('error') });
});

router.get('/admin',
    // ensureLoggedIn('/'),
    function (req, res) {
        console.log('Connecting to ' + req.url);
        res.render('home', { title: 'Home', port: port });
    });

router.post('/login', 
    passport.authenticate('ldapauth', {
        successRedirect: '/admin',
        failureRedirect: '/',
        failureFlash: true
    // 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...
    // EDIT: en fait apparemment on a pas besoin de ces informations du tout
    /*
    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.post('/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;