92 lines
2.7 KiB
JavaScript
92 lines
2.7 KiB
JavaScript
const express = require('express');
|
|
const app = express();
|
|
const session = require('express-session');
|
|
const bodyParser = require('body-parser');
|
|
const request = require('request-promise-native');
|
|
|
|
app.set('view engine', 'ejs');
|
|
|
|
app.use(session({
|
|
secret: 'AbsolutlyNotSecret', // Ce secret doit être partagé par tous les microservices *_page
|
|
resave: false,
|
|
saveUninitialized: true,
|
|
}));
|
|
|
|
// On utilise le module "body-parser"
|
|
// pour faciliter la désérialisation des données
|
|
// du formulaire
|
|
app.use(bodyParser.urlencoded({extended: false}));
|
|
|
|
// GET /
|
|
// Affiche la page de login
|
|
app.get('/', (req, res) => {
|
|
res.render('index', { error: null });
|
|
});
|
|
|
|
|
|
// POST /
|
|
// Récupère les données du formulaire de login
|
|
app.post('/', (req, res) => {
|
|
|
|
const form = req.body;
|
|
|
|
// Si le formulaire ne contient pas les données attendues
|
|
// on renvoie un code HTTP 400 pour indiquer une requête invalide.
|
|
if(!form.username || !form.password) {
|
|
return res.render('index', { error: 'Identifiant ou mot de passe manquant.'});
|
|
}
|
|
|
|
// On interroge le microservices "users"
|
|
// pour récupérer l'utilisateur associé à l'identifiant
|
|
// fourni dans le formulaire
|
|
findUserByName(form.username)
|
|
.then(user => {
|
|
|
|
// Si l'utilisateur n'existe pas, on affiche un message d'erreur
|
|
if(!user) {
|
|
return res.render('index', { error: 'Identifiant invalide !'});
|
|
}
|
|
|
|
// Si le mot de passe de l'utilisateur correspond à celui enregistré sur le
|
|
// microservice "users", on attache l'identifiant de l'utilisateur à la session
|
|
// HTTP puis on le redirige sur la page d'accueil
|
|
if(user.password === form.password) {
|
|
req.session.user = user;
|
|
return res.redirect(302, '/');
|
|
} else {
|
|
// Sinon, on affiche un message d'erreur
|
|
return res.render('index', { error: 'Mot de passe invalide !'});
|
|
}
|
|
|
|
})
|
|
.catch(err => {
|
|
// Une erreur s'est produite en essayant de contacter le microservices "users"
|
|
// On affiche un message d'erreur à l'utilisateur
|
|
return res.render('index', {
|
|
error: 'Une erreur s\'est produite pendant le processus d\'authentification.'
|
|
});
|
|
})
|
|
;
|
|
|
|
});
|
|
|
|
app.listen(8080, () => console.log('listening on port 8080'));
|
|
|
|
// Récupère un utilisateur via son identifiant
|
|
// sur le microservice "users"
|
|
function findUserByName(username) {
|
|
return request({
|
|
uri: `http://users:8080/users/${username}`,
|
|
json: true
|
|
})
|
|
.catch(err => {
|
|
// Si le microservice "users" répond avec un code HTTP 404
|
|
// c'est que l'utilisateur n'existe pas
|
|
if (err.response.statusCode === 404) {
|
|
return null;
|
|
}
|
|
throw err;
|
|
})
|
|
;
|
|
}
|