|
@@ -1,58 +1,72 @@
|
|
|
-var express = require('express');
|
|
|
|
|
-var bodyParser = require('body-parser');
|
|
|
|
|
-var slug = require('slug');
|
|
|
|
|
-var beautify = require("json-beautify");
|
|
|
|
|
-var _ = require('lodash');
|
|
|
|
|
-var fs = require('fs');
|
|
|
|
|
-var app = express();
|
|
|
|
|
-var examplesJSON = __dirname + '/exemples/liste.json';
|
|
|
|
|
-var examples = require(examplesJSON);
|
|
|
|
|
-
|
|
|
|
|
-app.use(express.static(__dirname));
|
|
|
|
|
-app.use(bodyParser.json());
|
|
|
|
|
-
|
|
|
|
|
-function addExample(slug, title) {
|
|
|
|
|
- examples.push({ slug: slug, title: title });
|
|
|
|
|
- fs.writeFileSync(examplesJSON, beautify(examples, null, 2, 100));
|
|
|
|
|
|
|
+var app = require('./sandboxApp');
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Création d'un tableau vide où on va stocker les utilisateurs
|
|
|
|
|
+ */
|
|
|
|
|
+var userList = [];
|
|
|
|
|
+var userId = 1;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Création d'un utilisateur : on le stocke dans le tableau userList
|
|
|
|
|
+ * ATTENTION ! Dans la "vraie vie", on utiliserait une base de données !
|
|
|
|
|
+ */
|
|
|
|
|
+function createNewUser(user) {
|
|
|
|
|
+
|
|
|
|
|
+ // On vérifie que les données de l'utilisateur sont renseignées
|
|
|
|
|
+ // Si non, on renvoie false
|
|
|
|
|
+ if(! user || ! user.username || ! user.email || ! user.password) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // L'étape de vérification a réussi, on insère l'utilisateur dans le tableau
|
|
|
|
|
+ // On crée un faux "id" pour simuler une insertion SQL. En SQL les "id" sont
|
|
|
|
|
+ // incrémentés à chaque insertion. On simule cela en incrémentant un compteur
|
|
|
|
|
+ // "userId" à chaque insertion
|
|
|
|
|
+ userList.push({
|
|
|
|
|
+ id: userId++,
|
|
|
|
|
+ username: user.username,
|
|
|
|
|
+ email: user.email,
|
|
|
|
|
+ password: user.password
|
|
|
|
|
+ });
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-app.post('/examples', function(req, res) {
|
|
|
|
|
- var title = req.body.title;
|
|
|
|
|
- if(! req.body.title) {
|
|
|
|
|
- res.status(400).send('Le titre ne peut pas être vide !');
|
|
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * Ce code va gérer la requête POST vers l'URL /register de notre micro-serveur
|
|
|
|
|
+ */
|
|
|
|
|
+app.post('/register', function(req, res) {
|
|
|
|
|
+
|
|
|
|
|
+ // Les données envoyées par le client (navigateur) sont dans la propriété "body"
|
|
|
|
|
+ // de l'objet req (pour request)
|
|
|
|
|
+ var user = req.body;
|
|
|
|
|
+
|
|
|
|
|
+ // createNewUser() va nous renvoyer true ou false
|
|
|
|
|
+ var success = createNewUser(user);
|
|
|
|
|
+
|
|
|
|
|
+ if(success) {
|
|
|
|
|
+ // Envoyer un message sur la console du serveur
|
|
|
|
|
+ console.log('Utilisateur enregistré: ', user, '\nListe des utilisateurs', userList);
|
|
|
|
|
+ res.json({ user: user });
|
|
|
}
|
|
}
|
|
|
- var existingTitle = _.find(examples, { title: title });
|
|
|
|
|
- if(existingTitle) {
|
|
|
|
|
- res.status(400).send("L'exemple '" + title + "' existe déjà !");
|
|
|
|
|
|
|
+ else {
|
|
|
|
|
+ res.status(400).json({ error: 'Champs manquants dans la requête' });
|
|
|
}
|
|
}
|
|
|
- var exampleSlug = slug(req.body.title.toLowerCase());
|
|
|
|
|
- var targetDir = __dirname + '/exemples/' + exampleSlug;
|
|
|
|
|
-
|
|
|
|
|
- fs.mkdirSync(targetDir);
|
|
|
|
|
- fs.writeFileSync(targetDir + '/contenu.html', '');
|
|
|
|
|
- fs.writeFileSync(targetDir + '/script.js', '');
|
|
|
|
|
- addExample(exampleSlug, title);
|
|
|
|
|
- res.json({ slug: exampleSlug, title: title });
|
|
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-app.put('/examples/:slug', function(req, res) {
|
|
|
|
|
- var slug = req.params.slug;
|
|
|
|
|
- var existing = _.find(examples, { slug: slug });
|
|
|
|
|
- if(! existing) {
|
|
|
|
|
- res.status(404).send("L'exemple avec l'identifiant '" + slug + "' est introuvable !");
|
|
|
|
|
- }
|
|
|
|
|
- var targetDir = __dirname + '/exemples/' + slug;
|
|
|
|
|
- if(req.body.html) {
|
|
|
|
|
- fs.writeFileSync(targetDir + '/contenu.html', req.body.html);
|
|
|
|
|
|
|
+app.get('/username-check', function(req, res) {
|
|
|
|
|
+ var username = req.query.username;
|
|
|
|
|
+ for(u = 0 ; u < userList.length ; u++) {
|
|
|
|
|
+ if(username === userList[u].username) {
|
|
|
|
|
+ return res.json({ success: false });
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- if(req.body.javascript) {
|
|
|
|
|
- fs.writeFileSync(targetDir + '/script.js', req.body.javascript);
|
|
|
|
|
- }
|
|
|
|
|
- var theDate = new Date();
|
|
|
|
|
- console.log(theDate.getHours() + ':' + theDate.getMinutes() + " - Sauvegarde de l'exemple '" + existing.title + " effectuée'");
|
|
|
|
|
res.json({ success: true });
|
|
res.json({ success: true });
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
console.log('Le serveur écoute sur le port 3000. Laissez cette console ouverte !')
|
|
console.log('Le serveur écoute sur le port 3000. Laissez cette console ouverte !')
|
|
|
app.listen(3000);
|
|
app.listen(3000);
|