backend: Première route /functions/:functionName + Gestion des erreurs 404 et 500
This commit is contained in:
		@@ -8,7 +8,5 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Le projet est disponible sur [function.divlo.fr](https://function.divlo.fr/).
 | 
					Le projet est disponible sur [function.divlo.fr](https://function.divlo.fr/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://function.divlo.fr/)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Licence 
 | 
					## Licence 
 | 
				
			||||||
Ce projet est sous licence MIT - voir le fichier [LICENSE](./LICENSE) pour plus de détails.
 | 
					Ce projet est sous licence MIT - voir le fichier [LICENSE](./LICENSE) pour plus de détails.
 | 
				
			||||||
@@ -1,19 +1,27 @@
 | 
				
			|||||||
/* Modules */
 | 
					/* Modules */
 | 
				
			||||||
const express  = require('express');
 | 
					const express = require('express');
 | 
				
			||||||
const cors     = require('cors');
 | 
					const helmet  = require('helmet');
 | 
				
			||||||
const morgan   = require('morgan');
 | 
					const cors    = require('cors');
 | 
				
			||||||
 | 
					const morgan  = require('morgan');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Files Imports & Variables */
 | 
					/* Files Imports & Variables */
 | 
				
			||||||
const { PORT } = require('./assets/config/config');
 | 
					const { PORT }        = require('./assets/config/config');
 | 
				
			||||||
const app      = express();
 | 
					const { serverError } = require('./assets/config/errors');
 | 
				
			||||||
 | 
					const sendResponse    = require('./assets/utils/sendResponse');
 | 
				
			||||||
 | 
					const app             = express();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Middlewares */
 | 
					/* Middlewares */
 | 
				
			||||||
 | 
					app.use(helmet());
 | 
				
			||||||
app.use(cors());
 | 
					app.use(cors());
 | 
				
			||||||
app.use(morgan('dev'));
 | 
					app.use(morgan('dev'));
 | 
				
			||||||
app.use(express.json());
 | 
					app.use(express.json());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Routes */ 
 | 
					/* Routes */ 
 | 
				
			||||||
app.get('/', (_req, res) => res.send('Hello world!'));
 | 
					app.use('/functions', require('./routes/functions'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Errors Handling */
 | 
				
			||||||
 | 
					app.use((_req, res, _next) => sendResponse(res, { result: "La route n'existe pas!", httpStatus: 404 })); // 404
 | 
				
			||||||
 | 
					app.use((error, _req, res, _next) => { console.log(error); return sendResponse(res, serverError); }); // 500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Server */
 | 
					/* Server */
 | 
				
			||||||
app.listen(PORT, () => console.log('\x1b[36m%s\x1b[0m', `Started on port ${PORT}.`));
 | 
					app.listen(PORT, () => console.log('\x1b[36m%s\x1b[0m', `Started on port ${PORT}.`));
 | 
				
			||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
module.exports = {
 | 
					const config = {
 | 
				
			||||||
    PORT: process.env.PORT || 8080
 | 
					    PORT: process.env.PORT || 8080
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = config;
 | 
				
			||||||
							
								
								
									
										18
									
								
								backend/assets/config/errors.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								backend/assets/config/errors.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					const errors = {
 | 
				
			||||||
 | 
					    generalError: {
 | 
				
			||||||
 | 
					        result: "Vous n'avez pas rentré de valeur valide.",
 | 
				
			||||||
 | 
					        httpStatus: 400
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    serverError: {
 | 
				
			||||||
 | 
					        result: "Le serveur n'a pas pu traiter votre requête.",
 | 
				
			||||||
 | 
					        httpStatus: 500
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    requiredFields: {
 | 
				
			||||||
 | 
					        result: "Vous devez remplir tous les champs...",
 | 
				
			||||||
 | 
					        httpStatus: 400
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = errors;
 | 
				
			||||||
							
								
								
									
										24
									
								
								backend/assets/functions/functionObject.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								backend/assets/functions/functionObject.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					const { randomNumberOutput }                                     = require('./main/randomNumber');
 | 
				
			||||||
 | 
					const { convertArabicToRomanOutput, convertRomanToArabicOutput } = require('./main/convertRomanArabicNumbers');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const functionObject = {
 | 
				
			||||||
 | 
					    randomNumber: {
 | 
				
			||||||
 | 
					        functionOutput: randomNumberOutput,
 | 
				
			||||||
 | 
					        args:  ["min", "max"]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    convertArabicToRoman: {
 | 
				
			||||||
 | 
					        functionOutput: convertArabicToRomanOutput,
 | 
				
			||||||
 | 
					        args: ["number"]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    convertRomanToArabic: {
 | 
				
			||||||
 | 
					        functionOutput: convertRomanToArabicOutput,
 | 
				
			||||||
 | 
					        args: ["romanNumber"]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Choisi la fonction à exécuter
 | 
				
			||||||
 | 
					function functionToExecute(option) {
 | 
				
			||||||
 | 
					    return functionObject[option];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = functionToExecute;
 | 
				
			||||||
							
								
								
									
										109
									
								
								backend/assets/functions/main/convertRomanArabicNumbers.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								backend/assets/functions/main/convertRomanArabicNumbers.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
				
			|||||||
 | 
					const sendResponse                     = require('../../utils/sendResponse');
 | 
				
			||||||
 | 
					const { requiredFields, generalError } = require('../../config/errors');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Variable pour convertRomanArabicNumbers */
 | 
				
			||||||
 | 
					const correspondancesRomainArabe = [
 | 
				
			||||||
 | 
					    [1000, "M"],
 | 
				
			||||||
 | 
					    [900, "CM"],
 | 
				
			||||||
 | 
					    [500, "D"],
 | 
				
			||||||
 | 
					    [400, "CD"],
 | 
				
			||||||
 | 
					    [100, "C"],
 | 
				
			||||||
 | 
					    [90, "XC"],
 | 
				
			||||||
 | 
					    [50, "L"],
 | 
				
			||||||
 | 
					    [40, "XL"],
 | 
				
			||||||
 | 
					    [10, "X"],
 | 
				
			||||||
 | 
					    [9, "IX"],
 | 
				
			||||||
 | 
					    [5, "V"],
 | 
				
			||||||
 | 
					    [4, "IV"],
 | 
				
			||||||
 | 
					    [1, "I"],
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 
 | 
				
			||||||
 | 
					 * @description Convertis un nombre arabe en nombre romain.
 | 
				
			||||||
 | 
					 * @requires {@link correspondancesRomainArabe}
 | 
				
			||||||
 | 
					 * @param {Number} nombre - Le nombre arabe à convertir
 | 
				
			||||||
 | 
					 * @returns {String}
 | 
				
			||||||
 | 
					 * @examples convertArabicToRoman(24) → 'XXIV'
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function convertArabicToRoman(nombre) {
 | 
				
			||||||
 | 
					    // Initialisation de la variable qui va contenir le résultat de la conversion
 | 
				
			||||||
 | 
					    let chiffresRomains = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function extraireChiffreRomain(valeurLettre, lettres) {
 | 
				
			||||||
 | 
					        while (nombre >= valeurLettre) {
 | 
				
			||||||
 | 
					            chiffresRomains = chiffresRomains + lettres;
 | 
				
			||||||
 | 
					            nombre = nombre - valeurLettre;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    correspondancesRomainArabe.forEach(correspondance => {
 | 
				
			||||||
 | 
					        extraireChiffreRomain(correspondance[0], correspondance[1]);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return chiffresRomains;
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 
 | 
				
			||||||
 | 
					 * @description Convertis un nombre romain en nombre arabe.
 | 
				
			||||||
 | 
					 * @requires {@link correspondancesRomainArabe}
 | 
				
			||||||
 | 
					 * @param {String} str - Le nombre romain à convertir
 | 
				
			||||||
 | 
					 * @returns {Number}
 | 
				
			||||||
 | 
					 * @examples convertRomanToArabic('XXIV') → 24
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function convertRomanToArabic(str) {
 | 
				
			||||||
 | 
					    let result = 0;
 | 
				
			||||||
 | 
					    for (let i = 0;i < correspondancesRomainArabe.length; i++) {
 | 
				
			||||||
 | 
					        while (str.indexOf(correspondancesRomainArabe[i][1]) === 0) {
 | 
				
			||||||
 | 
					            // Ajout de la valeur décimale au résultat
 | 
				
			||||||
 | 
					            result += correspondancesRomainArabe[i][0];
 | 
				
			||||||
 | 
					            // Supprimer la lettre romaine correspondante du début
 | 
				
			||||||
 | 
					            str = str.replace(correspondancesRomainArabe[i][1],'');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (str != '') {
 | 
				
			||||||
 | 
					        result = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* OUTPUTS */
 | 
				
			||||||
 | 
					exports.convertRomanToArabicOutput = (res, argsObject) => {
 | 
				
			||||||
 | 
					    let { romanNumber } = argsObject;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // S'il n'y a pas les champs obligatoire
 | 
				
			||||||
 | 
					    if (!(romanNumber)) {
 | 
				
			||||||
 | 
					        return sendResponse(res, requiredFields);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Formate le paramètre
 | 
				
			||||||
 | 
					    try { 
 | 
				
			||||||
 | 
					        romanNumber = romanNumber.toUpperCase(); 
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					    catch { 
 | 
				
			||||||
 | 
					        return sendResponse(res, generalError); 
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const result = convertRomanToArabic(romanNumber);
 | 
				
			||||||
 | 
					    if (result === 0) {
 | 
				
			||||||
 | 
					        return sendResponse(res, generalError);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    return sendResponse(res, { result, httpStatus: 200 }, true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports.convertArabicToRomanOutput = (res, argsObject) => {
 | 
				
			||||||
 | 
					    let { number } = argsObject;
 | 
				
			||||||
 | 
					    number = parseInt(number);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // S'il n'y a pas les champs obligatoire
 | 
				
			||||||
 | 
					    if (!(number)) {
 | 
				
			||||||
 | 
					        return sendResponse(res, requiredFields);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Si ce n'est pas un nombre
 | 
				
			||||||
 | 
					    if (isNaN(number)) {
 | 
				
			||||||
 | 
					        return sendResponse(res, { result: "Veuillez rentré un nombre valide.", httpStatus: 400 });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return sendResponse(res, { result: convertArabicToRoman(number) }, true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								backend/assets/functions/main/randomNumber.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								backend/assets/functions/main/randomNumber.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					const sendResponse       = require('../../utils/sendResponse');
 | 
				
			||||||
 | 
					const { requiredFields } = require('../../config/errors');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 
 | 
				
			||||||
 | 
					 * @description Génère un nombre aléatoire entre un minimum inclus et un maximum inclus. 
 | 
				
			||||||
 | 
					 * @param {Number} min Nombre Minimum 
 | 
				
			||||||
 | 
					 * @param {Number} max Nombre Maximum 
 | 
				
			||||||
 | 
					 * @returns {Number} Nombre aléatoire 
 | 
				
			||||||
 | 
					 * @examples randomNumber(1, 2) → retourne soit 1 ou 2
 | 
				
			||||||
 | 
					 */ 
 | 
				
			||||||
 | 
					function randomNumber(min, max) {
 | 
				
			||||||
 | 
					    return Math.floor(Math.random() * (max - min +1)) + min;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* OUTPUTS */
 | 
				
			||||||
 | 
					exports.randomNumberOutput = (res, argsObject) => {
 | 
				
			||||||
 | 
					    let { min, max } = argsObject;
 | 
				
			||||||
 | 
					    min = parseInt(min);
 | 
				
			||||||
 | 
					    max = parseInt(max);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // S'il n'y a pas les champs obligatoire
 | 
				
			||||||
 | 
					    if (!(min && max)) {
 | 
				
			||||||
 | 
					        return sendResponse(res, requiredFields);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Si ce n'est pas des nombres
 | 
				
			||||||
 | 
					    if (isNaN(min) || isNaN(max)) {
 | 
				
			||||||
 | 
					        return sendResponse(res, { result: "Les paramètres min et max doivent être des nombres...", httpStatus: 400 });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return sendResponse(res, { result: randomNumber(min, max) }, true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @description Envoie la réponse au client
 | 
					 * @description Envoie la réponse au client
 | 
				
			||||||
 * @param {Response} res Objet réponse d'une réponse http/express
 | 
					 * @param {Response} res Objet réponse d'une réponse http/express
 | 
				
			||||||
 * @param {Object} object { httpStatus, customProperties{Object}, result }
 | 
					 * @param {Object} object { httpStatus, customProperties{Object}, result }
 | 
				
			||||||
 * @param {Boolean} isSuccess
 | 
					 * @param {Boolean} isSuccess (false par defaut)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function sendResponse (res, object, isSuccess = false) {
 | 
					function sendResponse (res, object, isSuccess = false) {
 | 
				
			||||||
    res.status(object.httpStatus || 200).send({ isSuccess, ...object.customProperties, result: object.result }); 
 | 
					    res.status(object.httpStatus || 200).send({ isSuccess, ...object.customProperties, result: object.result }); 
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								backend/controllers/functions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								backend/controllers/functions.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					const functionToExecute = require('../assets/functions/functionObject');
 | 
				
			||||||
 | 
					const sendResponse      = require('../assets/utils/sendResponse');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports.executeFunctionName = (req, res, _next) => {
 | 
				
			||||||
 | 
					    const functionObject = functionToExecute(req.params.functionName);
 | 
				
			||||||
 | 
					    if (functionObject !== undefined) {
 | 
				
			||||||
 | 
					        return functionObject.functionOutput(res, req.body);
 | 
				
			||||||
 | 
					    }  
 | 
				
			||||||
 | 
					    return sendResponse(res, { result: "La fonction n'existe pas.", httpStatus: 404 });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										135
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										135
									
								
								backend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -96,6 +96,11 @@
 | 
				
			|||||||
        "type-is": "~1.6.17"
 | 
					        "type-is": "~1.6.17"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "bowser": {
 | 
				
			||||||
 | 
					      "version": "2.9.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.9.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "boxen": {
 | 
					    "boxen": {
 | 
				
			||||||
      "version": "1.3.0",
 | 
					      "version": "1.3.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
 | 
				
			||||||
@@ -141,6 +146,11 @@
 | 
				
			|||||||
      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
 | 
					      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "camelize": {
 | 
				
			||||||
 | 
					      "version": "1.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "capture-stack-trace": {
 | 
					    "capture-stack-trace": {
 | 
				
			||||||
      "version": "1.0.1",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
 | 
				
			||||||
@@ -229,6 +239,11 @@
 | 
				
			|||||||
        "safe-buffer": "5.1.2"
 | 
					        "safe-buffer": "5.1.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "content-security-policy-builder": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "content-type": {
 | 
					    "content-type": {
 | 
				
			||||||
      "version": "1.0.4",
 | 
					      "version": "1.0.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
 | 
				
			||||||
@@ -279,6 +294,11 @@
 | 
				
			|||||||
      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
 | 
					      "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "dasherize": {
 | 
				
			||||||
 | 
					      "version": "2.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "debug": {
 | 
					    "debug": {
 | 
				
			||||||
      "version": "2.6.9",
 | 
					      "version": "2.6.9",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
				
			||||||
@@ -303,6 +323,16 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
 | 
				
			||||||
      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
 | 
					      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "dns-prefetch-control": {
 | 
				
			||||||
 | 
					      "version": "0.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-hvSnros73+qyZXhHFjx2CMLwoj3Fe7eR9EJsFsqmcI1bB2OBWL/+0YzaEaKssCHnj/6crawNnUyw74Gm2EKe+Q=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "dont-sniff-mimetype": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "dot-prop": {
 | 
					    "dot-prop": {
 | 
				
			||||||
      "version": "4.2.0",
 | 
					      "version": "4.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
 | 
				
			||||||
@@ -359,6 +389,11 @@
 | 
				
			|||||||
        "strip-eof": "^1.0.0"
 | 
					        "strip-eof": "^1.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "expect-ct": {
 | 
				
			||||||
 | 
					      "version": "0.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-6SK3MG/Bbhm8MsgyJAylg+ucIOU71/FzyFalcfu5nY19dH8y/z0tBJU0wrNBXD4B27EoQtqPF/9wqH0iYAd04g=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "express": {
 | 
					    "express": {
 | 
				
			||||||
      "version": "4.17.1",
 | 
					      "version": "4.17.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
 | 
				
			||||||
@@ -396,6 +431,11 @@
 | 
				
			|||||||
        "vary": "~1.1.2"
 | 
					        "vary": "~1.1.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "feature-policy": {
 | 
				
			||||||
 | 
					      "version": "0.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "fill-range": {
 | 
					    "fill-range": {
 | 
				
			||||||
      "version": "7.0.1",
 | 
					      "version": "7.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
 | 
				
			||||||
@@ -424,6 +464,11 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
 | 
					      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "frameguard": {
 | 
				
			||||||
 | 
					      "version": "3.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-TxgSKM+7LTA6sidjOiSZK9wxY0ffMPY3Wta//MqwmX0nZuEHc8QrkV8Fh3ZhMJeiH+Uyh/tcaarImRy8u77O7g=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "fresh": {
 | 
					    "fresh": {
 | 
				
			||||||
      "version": "0.5.2",
 | 
					      "version": "0.5.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
				
			||||||
@@ -491,6 +536,76 @@
 | 
				
			|||||||
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
 | 
					      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "helmet": {
 | 
				
			||||||
 | 
					      "version": "3.21.3",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.21.3.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-8OjGNdpG3WQhPO71fSy2fT4X3FSNutU1LDeAf+YS+Vil6r+fE7w8per5mNed6egGYbZl3QhKXgFzMYSwys+YQw==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "depd": "2.0.0",
 | 
				
			||||||
 | 
					        "dns-prefetch-control": "0.2.0",
 | 
				
			||||||
 | 
					        "dont-sniff-mimetype": "1.1.0",
 | 
				
			||||||
 | 
					        "expect-ct": "0.2.0",
 | 
				
			||||||
 | 
					        "feature-policy": "0.3.0",
 | 
				
			||||||
 | 
					        "frameguard": "3.1.0",
 | 
				
			||||||
 | 
					        "helmet-crossdomain": "0.4.0",
 | 
				
			||||||
 | 
					        "helmet-csp": "2.9.5",
 | 
				
			||||||
 | 
					        "hide-powered-by": "1.1.0",
 | 
				
			||||||
 | 
					        "hpkp": "2.0.0",
 | 
				
			||||||
 | 
					        "hsts": "2.2.0",
 | 
				
			||||||
 | 
					        "ienoopen": "1.1.0",
 | 
				
			||||||
 | 
					        "nocache": "2.1.0",
 | 
				
			||||||
 | 
					        "referrer-policy": "1.2.0",
 | 
				
			||||||
 | 
					        "x-xss-protection": "1.3.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "depd": {
 | 
				
			||||||
 | 
					          "version": "2.0.0",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "helmet-crossdomain": {
 | 
				
			||||||
 | 
					      "version": "0.4.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "helmet-csp": {
 | 
				
			||||||
 | 
					      "version": "2.9.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.9.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-w9nps5adqFQwgktVPDbXkARmZot/nr8aegzQas9AXdBSwBFBBefPpDSTV0wtgHlAUdDwY6MZo7qAl9yts3ppJg==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "bowser": "2.9.0",
 | 
				
			||||||
 | 
					        "camelize": "1.0.0",
 | 
				
			||||||
 | 
					        "content-security-policy-builder": "2.1.0",
 | 
				
			||||||
 | 
					        "dasherize": "2.0.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "hide-powered-by": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "hpkp": {
 | 
				
			||||||
 | 
					      "version": "2.0.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "hsts": {
 | 
				
			||||||
 | 
					      "version": "2.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==",
 | 
				
			||||||
 | 
					      "requires": {
 | 
				
			||||||
 | 
					        "depd": "2.0.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "depd": {
 | 
				
			||||||
 | 
					          "version": "2.0.0",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "http-errors": {
 | 
					    "http-errors": {
 | 
				
			||||||
      "version": "1.7.2",
 | 
					      "version": "1.7.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
 | 
				
			||||||
@@ -511,6 +626,11 @@
 | 
				
			|||||||
        "safer-buffer": ">= 2.1.2 < 3"
 | 
					        "safer-buffer": ">= 2.1.2 < 3"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "ienoopen": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-MFs36e/ca6ohEKtinTJ5VvAJ6oDRAYFdYXweUnGY9L9vcoqFOU4n2ZhmJ0C4z/cwGZ3YIQRSB3XZ1+ghZkY5NQ=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "ignore-by-default": {
 | 
					    "ignore-by-default": {
 | 
				
			||||||
      "version": "1.0.1",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
 | 
				
			||||||
@@ -750,6 +870,11 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
 | 
					      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "nocache": {
 | 
				
			||||||
 | 
					      "version": "2.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "nodemon": {
 | 
					    "nodemon": {
 | 
				
			||||||
      "version": "2.0.2",
 | 
					      "version": "2.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz",
 | 
				
			||||||
@@ -949,6 +1074,11 @@
 | 
				
			|||||||
        "picomatch": "^2.0.7"
 | 
					        "picomatch": "^2.0.7"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "referrer-policy": {
 | 
				
			||||||
 | 
					      "version": "1.2.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "registry-auth-token": {
 | 
					    "registry-auth-token": {
 | 
				
			||||||
      "version": "3.4.0",
 | 
					      "version": "3.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
 | 
				
			||||||
@@ -1244,6 +1374,11 @@
 | 
				
			|||||||
        "signal-exit": "^3.0.2"
 | 
					        "signal-exit": "^3.0.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "x-xss-protection": {
 | 
				
			||||||
 | 
					      "version": "1.3.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "xdg-basedir": {
 | 
					    "xdg-basedir": {
 | 
				
			||||||
      "version": "3.0.0",
 | 
					      "version": "3.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,8 @@
 | 
				
			|||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "cors": "^2.8.5",
 | 
					    "cors": "^2.8.5",
 | 
				
			||||||
    "express": "^4.17.1"
 | 
					    "express": "^4.17.1",
 | 
				
			||||||
 | 
					    "helmet": "^3.21.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "morgan": "^1.9.1",
 | 
					    "morgan": "^1.9.1",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								backend/routes/functions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								backend/routes/functions.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					const { Router } = require('express');
 | 
				
			||||||
 | 
					const { executeFunctionName } = require('../controllers/functions');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const FunctionsRouter = Router();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FunctionsRouter.route('/:functionName')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Exécute la fonction demandée en paramètre
 | 
				
			||||||
 | 
					    .post(executeFunctionName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = FunctionsRouter;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user