Skip to content
Snippets Groups Projects
Commit a597148e authored by Wilson JALLET's avatar Wilson JALLET :money_with_wings:
Browse files

added conditional behavior to /login route depending on Accept header

parent 5adbf972
No related branches found
No related tags found
No related merge requests found
......@@ -156,3 +156,12 @@ qui fait appel au script `eslint src/` défini dans le [`package.json`](../packa
Sinon, si vous utilisez Atom ou Visual Studio Code pour éditer votre code, il existe des plugins qui font tourner ESLint en _live_ sur le code et vérifient que tout est en ordre.
Pour mieux comprendre ESLint, référez-vous à la [doc](https://eslint.org/docs/user-guide/getting-started).
### API/panneau d'administration
#### Authentification
L'authentification se fait contre le LDAP en envoyant un requête HTTP POST à '/login'. En fonction de la valeur du header `Accept` inclus dans la requête, on a deux comportements possibles
| `application/json` | autre |
| ------------------------------------ | ---------------------- |
| Renvoie un message de succès/d'échec | Redirige vers `/admin` |
......@@ -61,6 +61,7 @@ passport.use(new LdapStrategy({
//toujours bon a savoir pour faire des tests:
//The result of the serializeUser method is attached to the session as req.session.passport.user
passport.serializeUser(function (user, done) {
console.log(`serializing user ${user.uid}`); // DEBUG
done(null, user.uid);
});
......
......@@ -102,13 +102,29 @@ router.get('/db/:table_name?', function (req, res) {
);
});
router.post('/login',
passport.authenticate('ldapauth', {
successRedirect: '/admin',
failureRedirect: '/login',
failureFlash: true
})
);
router.post('/login', (req, res, next) => {
passport.authenticate('ldapauth', (err, user, info) => {
if (err) return next(err); // handle error
else if (!user) {
return res.json(403, {message: "Not authenticated."});
}
console.log(req.headers); // return 'Origin' header, useful later
req.login(user, (err) => {
if (err) {
console.log(err);
return err;
}
// if request asks for a json, reply with a token
// else redirect to admin panel
(req.header('accept') == 'application/json')
? res.json({ message: 'Authentication succeeded.' })
: res.redirect('/admin');
});
})(req,res,next);
});
/**
* @function Error 404 catcher
......
......@@ -81,9 +81,7 @@ server.use('/graphql',
// vary the options *on a per-request basis*
let uid;
let password;
console.log(`User authenticated: ${req.isAuthenticated()}`);
if(req.isAuthenticated()) {
try {
uid = req.user.uid;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment