/**
* @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;