const mysql = require('mysql'); const fetch = require('node-fetch'); var secrets = require('../secrets.js'); var dbhost = secrets.dbhost; var dbuser = secrets.dbuser; var dbpassword = secrets.dbpassword; var dbdatabase = secrets.dbdatabase; const dbConfig = { host: dbhost, user: dbuser, password: dbpassword, database: dbdatabase }; function getAdministrateurs(req, res) { var con = mysql.createConnection(dbConfig); var query = "SELECT id,login FROM Admin WHERE deleted = 0 ORDER BY login ASC;" con.connect(); con.query(query, (err, result) => { if (err) { console.log(err) return res.send({ success: false }) } return res.send(result) }); con.end(); } function addNewAdministrateur(req, res) { var con = mysql.createConnection(dbConfig); var query = "INSERT INTO `Admin` (`login`) VALUES (?);"; var inserts = [req.body.login]; con.connect(); con.query(query, inserts, (err, result) => { if (err) { console.log(err) return res.send({ success: false }) } return res.send(result) }); con.end(); } function updateAdministrateur(req, res) { var con = mysql.createConnection(dbConfig); var query = "UPDATE Admin SET login = ? WHERE id=?;" var inserts = [req.body.login, req.body.id]; con.connect(); con.query(query, inserts, (err, result) => { if (err) { console.log(err) return res.send({ success: false }) } return res.send(result) }); con.end(); } function deleteAdministrateur(req, res) { var con = mysql.createConnection(dbConfig); var query = "UPDATE Admin SET deleted = 1 WHERE id=?;" var inserts = [req.body.id]; con.connect(); con.query(query, inserts, (err, result) => { if (err) { console.log(err) return res.send({ success: false }) } return res.send(result) }); con.end(); } function getAdminsLogins(req, res) { var con = mysql.createConnection(dbConfig); var query = "SELECT login FROM Admin WHERE deleted = 0;" con.connect(); con.query(query, (err, result) => { if (err) { console.log(err) return res.send({ success: false }) } var data = result.map((item) => { return item.login }); return res.send(data) }); con.end(); } async function getUsers(req, res) { if (!req.session || !req.session.ids || !req.query.userString || req.query.userString.length < 3) { res.json([]); } else { let result; const request = `query{searchUsers(name:"${req.query.userString}",limit:10){user{firstName,lastName,login}}}`; const query = `https://api.linkcs.fr/v1/graphql/?query=${encodeURIComponent(request)}`; console.log(query) await fetch(query, { method: 'GET', headers: { 'Authorization': `Bearer ${req.session.ids.token.access_token}` } }).then(async (resp) => { if (resp.status != 200) { res.status(500); res.json({ error: "Didn't work" }); } else { result = await resp.json(); } }).catch(err => { res.status(500); res.send(err) }) if (result) { console.log(result) return res.json(result.data.searchUsers.map(el => el.user)) } else { res.status(500); res.json({ error: "Didn't work" }); } } } async function getUsersPerformance(req, res) { if (!req.session || !req.session.ids || !req.query.userString) { res.json([]); } else { let result; const request = `query{searchUsers(name:"${req.query.userString}",limit:10){user{firstName,lastName,login}}}`; const query = `https://api.linkcs.fr/v1/graphql/?query=${encodeURIComponent(request)}`; console.log(query) await fetch(query, { method: 'GET', headers: { 'Authorization': `Bearer ${req.session.ids.token.access_token}` } }).then(async (resp) => { if (resp.status != 200) { res.status(500); res.json({ error: "Didn't work" }); } else { result = await resp.json(); } }).catch(err => { res.status(500); res.send(err) }) if (result) { console.log(result) return res.json(result.data.searchUsers.map(el => el.user)) } else { res.status(500); res.json({ error: "Didn't work" }); } } } function simple_query(query, args) { var connection = mysql.createConnection(dbConfig); connection.connect(); return new Promise((resolve, reject) => { var sql = mysql.format(query, args); connection.query(sql, function (error, results) { if (error) { console.log('SQL ERROR') console.log(error) reject(error) } else { resolve(JSON.parse(JSON.stringify(results))) } }); connection.end(); }) } async function isAdminMiddleware(req, res, next) { const login = req.session.ids.login || ''; var query = "SELECT login FROM Admin WHERE deleted = 0;" const admins = await simple_query(query, []); const adminsList = admins.map((item) => item.login); if (adminsList.includes(login)) { return next(); } res.status(403); } module.exports = { getAdministrateurs, addNewAdministrateur, updateAdministrateur, deleteAdministrateur, getAdminsLogins, getUsers, isAdminMiddleware }