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
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');
|