103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
const express = require('express');
|
|
const bodyParser = require('body-parser');
|
|
const app = express();
|
|
|
|
const sessions = {};
|
|
let sessionCounter = 0;
|
|
|
|
// On utilise le middleware "body-parser"
|
|
// pour désérialiser automatiquement
|
|
// les objets JSON potentiellement
|
|
// fournis par les requêtes
|
|
app.use(bodyParser.json());
|
|
|
|
// GET /sessions
|
|
// Permet de récupérer la liste des sessions en cours
|
|
app.get('/sessions', (req, res) => {
|
|
res.json(sessions);
|
|
});
|
|
|
|
|
|
// GET /sessions/:id
|
|
// Permet de récupérer une session via son identifiant
|
|
app.get('/sessions/:id', (req, res) => {
|
|
|
|
// On récupère l'identifiant de session
|
|
// depuis l'URL
|
|
const sessionId = req.params.id;
|
|
|
|
// On vérifie que la session existe.
|
|
// Si ce n'est pas le cas, on retourne un code
|
|
// HTTP 404 pour indiquer que la ressource
|
|
// n'existe pas
|
|
if (!sessions.hasOwnProperty(sessionId)) {
|
|
return res.status(404).end('Not found.');
|
|
}
|
|
|
|
// On retourne la session sérialisée en JSON
|
|
return res.json(sessions[sessionId]);
|
|
|
|
})
|
|
|
|
// POST /sessions
|
|
// Body: {"user": <user_id> }
|
|
// Permet de créer une nouvelle session pour l'utilisateur donné
|
|
app.post('/sessions', (req, res) => {
|
|
|
|
const payload = req.body;
|
|
|
|
// On valide la présence de l'attribut "user"
|
|
// sur les données fournies.
|
|
// Si il n'est pas présent, on retourne un code HTTP
|
|
// 400 pour indiquer que la requête est invalide.
|
|
if (!payload.user) {
|
|
return res.status(400).end('Bad request.');
|
|
}
|
|
|
|
// On créait une nouvelle session
|
|
const sess = {
|
|
user: payload.user,
|
|
id: getSessionId(),
|
|
};
|
|
|
|
// On la "stocke" dans notre registre
|
|
sessions[session.id] = sess;
|
|
|
|
// On retourne la session
|
|
// nouvellement créée
|
|
res.json(sess);
|
|
|
|
})
|
|
|
|
|
|
// DELETE /sessions/:id
|
|
// Permet de supprimer une session dans le registre via son identifiant
|
|
app.delete('/sessions/:id', (req, res) => {
|
|
|
|
// On récupère l'identifiant de session
|
|
// depuis l'URL
|
|
const sessionId = req.params.id;
|
|
|
|
// On vérifie que la session existe.
|
|
// Si ce n'est pas le cas, on retourne un code
|
|
// HTTP 404 pour indiquer que la ressource
|
|
// n'existe pas
|
|
if (!sessions.hasOwnProperty(sessionId)) {
|
|
return res.status(404).end('Not found.');
|
|
}
|
|
|
|
delete sessions[sessionId];
|
|
|
|
// On retourne un code HTTP 204 pour indiquer que l'opération
|
|
// s'est déroulée correctement mais qu'aucun "contenu" n'est disponible
|
|
return res.status(204);
|
|
|
|
});
|
|
|
|
|
|
app.listen(8080, () => console.log('listening on port 8080'));
|
|
|
|
function getSessionId() {
|
|
return `${Date.now()}-${sessionCounter++}`;
|
|
}
|