Skip to content

Commit

Permalink
refactored into router & multiple files
Browse files Browse the repository at this point in the history
  • Loading branch information
lemony-cricket committed May 20, 2018
1 parent abda0a6 commit 1cd58cb
Show file tree
Hide file tree
Showing 4 changed files with 319 additions and 290 deletions.
179 changes: 179 additions & 0 deletions database.js
@@ -0,0 +1,179 @@
const {promisify} = require('util');

const config = require("./config.js");

const fn = promisify(config.db.query).bind(config.db);

function group_add(data)
{
return new Promise(async resolve => {
if (data['name'] && data['description'] && data['name'] !== "" && data['description'] !== "") {
if ((await fn("select 1 from _group where name = ?", [data['name']])).length > 0)
return resolve({error: "Group name already defined"});
else
await fn("INSERT INTO _group(id,name,description) VALUES(NULL,? ,?)", [data['name'], data['description']]).catch(function (err) {
return resolve({error: "Internal server error"});
});

return resolve({ok:"ok"})
}
else
return resolve({error: "invalid name or description"})
});
}

// TODO : Add a new parameter to edit the group name as well
function group_edit(data)
{
return new Promise(async resolve => {
if (data['name'] && data['description'] && data['name'] !== "" && data['description'] !== "") {
if ((await fn("select * from _group where name = ?", [data['name']])).length > 0) {
await fn("UPDATE _group set description = ? where name = ?", [data['description'], data['name']]).catch(function (err) {
return resolve({error: "Internal server error"});
});
return resolve({ok: "ok"});
}
else
return resolve({error: "group not found"})
}
else
return resolve({error: "invalid name or description"})
});
}

function group_delete(data)
{
return new Promise(async resolve => {
if (data['name'] && data['name'] !== "") {
if ((await fn("select * from _group where name = ?", [data['name']])).length > 0) {
await fn("DELETE FROM _group where name = ?", [data['name']]).catch(function (err) {
return resolve({error: "Internal server error"});
});
return resolve({ok: "ok"});
}
else
return resolve({error: "group not found"})
}
else
return resolve({error: "invalid name"})
});
}

function list_add(data)
{
return new Promise(async resolve => {
if (data['name'] && data['group'] && data['category'] && data['added_by'] && data['name'] !== "" && data['group'] !== "" && data['category'] !== "" && data['added_by'] !== "") {
const result = await fn("select id from _group where name = ?", [data['group']]);
if (result.length > 0) {
const id = result[0]['id'];

// TODO : Refactor to avoid the duplicate code
if (data['list'] === "blacklist")
if ((await fn("select 1 from low_quality where name = ?", [data['name']])).length > 0)
return resolve({error: "User is already in the low_quality list"});
else
{
await fn("insert into "+data['list']+" (name, _group, category, added_by) VALUES(?,?,?,?)", [data['name'], id, data['category'], data['added_by']]).catch(function (err) {
if (err.code === "ER_DUP_ENTRY")
return resolve({error: "User is already in the list"});
else
return resolve({error: "Internal error"});
});
return resolve({ok: "ok"});
}
else if (data['list'] === "low_quality")
if ((await fn("select 1 from blacklist where name = ?", [data['name']])).length > 0)
return resolve({error: "User is already in the blacklist list"});
else
{
await fn("insert into "+data['list']+" (name, _group, category, added_by) VALUES(?,?,?,?)", [data['name'], id, data['category'], data['added_by']]).catch(function (err) {
if (err.code === "ER_DUP_ENTRY")
return resolve({error: "User is already in the list"});
else
return resolve({error: "Internal error"});
});
return resolve({ok: "ok"});
}
}
else
return resolve({error: "Group name unknown"});
}
else
// TODO : Be more specific
return resolve({error: "invalid parameters."})
});
}

function list_edit(data)
{
return new Promise(async resolve => {
if (data['name'] && data['group'] && data['category'] && data['added_by'] && data['name'] !== "" && data['group'] !== "" && data['category'] !== "" && data['added_by'] !== "") {
const result = await fn("select id from _group where name = ?", [data['group']]);

if (result.length > 0) {
const id = result[0]['id'];
const exists = await fn("select 1 from "+data['list']+" where name = ?", [data['name']]);
if (exists.length > 0) {

await fn("update " + data['list'] + " set _group = ?, category = ?, added_by = ? where name = ?", [id, data['category'], data['added_by'], data['name']]).catch(function (err) {
return resolve({error: "Internal error"});
});
return resolve({ok: "ok"});
} else
return resolve({error: "username not in the list"});
}
else
return resolve({error: "Group name unknown"});
}
else
// TODO : Be more specific
return resolve({error: "invalid parameters."})
});
}

function list_delete(data)
{
return new Promise(async resolve => {
if (data['name'] && data['name'] !== "") {
const exists = await fn("select 1 from "+data['list']+" where name = ?", [data['name']]);
if (exists.length > 0) {
await fn("delete from " + data['list'] + " where name = ?", [data['name']]).catch(function (err) {
return resolve({error: "Internal error"});
});
return resolve({ok: "ok"});
} else
return resolve({error: "username not in the list"});
}
else
// TODO : Be more specific
return resolve({error: "invalid parameters."})
});
}

function list_get(data)
{
return new Promise(async resolve => {
if (data['name'] && data['name'] !== "") {
const blacklist = await fn("select 1 from blacklist where name = ?", [data['name']]);
if (blacklist.length > 0)
return resolve({list:"blacklist"});

const low_quality = await fn("select 1 from low_quality where name = ?", [data['name']]);
if (low_quality.length > 0)
return resolve({list:"low_quality"});

return resolve({list:"none"});
}
else
// TODO : Be more specific
return resolve({error: "invalid parameters."})
});
}

module.exports = {group_add,
group_edit,
group_delete,
list_add,
list_edit,
list_delete,
list_get};
70 changes: 70 additions & 0 deletions router-legacy.js
@@ -0,0 +1,70 @@
const sanitize = require('xss');
const bodyParser = require('body-parser');
const urlencodedParser = bodyParser.urlencoded({extended: false});
const express = require('express')

const {login} = require("./steem-auth.js");
const {group_add,
group_edit,
group_delete,
list_add,
list_edit,
list_delete,
list_get} = require("./database.js");

const root = express.Router();

// TODO : Rework all that as a proper REST api ?
root.post('/', urlencodedParser, async function (req, res) {
let data = sanitize(req.body.data);

try
{
data = JSON.parse(data)['data'];
} catch (e)
{
return res.send({error:"Invalid json"})
}


if (data['action'] === "get")
return res.send((await list_get(data)));

// TODO : Proprely separate the json with one data object which handles data and one login object with login infos
const login_details = await login(data);

if (login_details['ok'] === true)
{
if (data['list'] !== "blacklist" && data['list'] !== "low_quality" && data['list'] !== "group")
return res.send({error: "Unknown list"});

if (data['action'] === "add") {
if (data['list'] === "group")
res.send((await group_add(data)));
else if (data['list'] === "blacklist" || data['list'] === "low_quality")
res.send((await list_add(data)));
}
else if (data['action'] === "edit") {
if (data['list'] === "group")
res.send((await group_edit(data)));
else if (data['list'] === "blacklist" || data['list'] === "low_quality")
res.send((await list_edit(data)));
}
else if (data['action'] === "delete") {
if (data['list'] === "group")
res.send((await group_delete(data)));
else if (data['list'] === "blacklist" || data['list'] === "low_quality")
res.send((await list_delete(data)));
}
else
return res.send({error: "Unknown action"})
} else
{
return res.send({error: login_details['error']})
}

return res.send({error: "Unknown action"})

});

module.exports = {router: root};

0 comments on commit 1cd58cb

Please sign in to comment.