You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.7 KiB

/*
Ecrire une API en node, tournant sur le port 8088,
permettant de vérifier qu'un utilisateur est existant dans une
base de donnée "sécurisée" dans laquelle le mot de passe est
stocké en MD5.
Les informations de connexion seront stockées en json.
Votre réponse sera sous forme d'un zip.
Elle contiendra au minimum :
- un fichier SQL pour la création de la base avec un utilisateur dédié
- un deuxième fichier SQL pour la création de la table et ajoutant un au moins un utilisateur à la table
- un fichier README indiquant comment installer votre projet et les routes disponibles
- un fichier package.json
- un fichier api.js contenant votre code Node
*/
// testing :
// https://mariadb.com/kb/en/nodejs-connector/
const http = require ('http'); // to create server
const url = require('url'); // to parse url
const fs = require('fs'); // to load config
const BASIC_API_PORT = 8088;
var config=null;
if(fs.existsSync(process.cwd() + '/config.json')){
config = require(process.cwd() + '/config.json');
}
else {
console.log('no config');
}
const mariadb = require('mariadb');
const { exit } = require('process');
const pool = mariadb.createPool({
host: config.DB_HOST,
port: config.DB_PORT,
user: config.DB_USR,
password:config.DB_PWD,
database: config.DB_NAME,
connectionLimit: 5,
});
//const server = http.createServer(function (req, resp) {
const app = http.createServer
(
async (req, res) =>
{
const parsedURL = url.parse(req.url, true);
var response_json = JSON.stringify({"up":false});
if(req.method === 'GET' && parsedURL.pathname.startsWith('/up'))
{
var cnx = null;
try
{
cnx=await pool.getConnection();
const tables_res = await cnx.query("SHOW TABLES");
if(tables_res.length > 0)
{
response_json = JSON.stringify({'up':true});
}
}
catch(err)
{
console.log(err);
res.statusCode = 400;
res.end(response_json);
if(cnx)
{
return cnx.end();
}
throw(err);
}
finally
{
res.statusCode = 200;
res.end(response_json);
if(cnx)
{
return cnx.end();
}
}
}
else if(req.method === 'POST' && parsedURL.pathname.startsWith('/check'))
{
console.log("checking :");
responseString = "?";
req.on('data', function (varposted) {
responseString += varposted;
}).on('end', async function () {
parsedData = url.parse(responseString, true);
console.log("ParsedData", parsedData);
let response_content = {'up':false,'emailtocheck':''};
if(parsedData.query['email']) {
response_content.emailtocheck = parsedData.query['email'];
cnx=await pool.getConnection();
let query="SELECT * FROM users WHERE courriel = '"+ response_content.emailtocheck +"'";
console.log(query);
const email_res = await cnx.query(query);
if(email_res.length > 0)
{
response_content.up=true;
response_content.emailValid=true;
}
else
{
response_content.up=true;
response_content.emailValid=false;
}
res.statusCode = 200;
res.end(JSON.stringify(response_content));
if(cnx)
{
return cnx.end();
}
}
});
}
else
{
res.statusCode = 400;
res.end("API Endpoint Not Supported");
}
}
);
app.listen(BASIC_API_PORT);
console.log('mariadb test api started');