From 0c9499a6242e5bd4358125143972f3c78ec030f5 Mon Sep 17 00:00:00 2001 From: Mystikfluu Date: Wed, 27 Jul 2022 19:18:48 +0200 Subject: [PATCH] move post api endpoint to its own file --- routes/api/post.js | 94 ++++++++++++++++++++++++++++++++++++ server.js | 118 ++++++++------------------------------------- 2 files changed, 114 insertions(+), 98 deletions(-) create mode 100644 routes/api/post.js diff --git a/routes/api/post.js b/routes/api/post.js new file mode 100644 index 0000000..2c463ab --- /dev/null +++ b/routes/api/post.js @@ -0,0 +1,94 @@ +module.exports = { + "setup": function(router,con,server) { + + const PIDS = {} //[pid]: true/"already_used" + + router.get("/api/pid", async function(req,res) { + res.set("Access-Control-Allow-Origin","*") + let pid = server.genstring(10) //collision chance is low enough, but we'll check anyways + while (PIDS[pid] != undefined){ + pid = server.genstring(10) + console.log(5,"pid collision"); + } + PIDS[pid] = true + setTimeout(function() { + PIDS[pid]=undefined + },40000) + res.json({"pid":pid}) + }) + + router.post("/api/post", async function(req,res) { + if(!req.body.message) { + res.json({"error":"no message to post"}) + return + } + if((typeof req.body.message) != "string") { + res.json({"error":"no message to post"}) + return + } + if((typeof req.body.pid) != "string") { + res.json({"error":"no pid given"}) + return + } + if(req.body.pid.length != 10 || PIDS[req.body.pid] !== true) { + res.json({"error":"invalid pid given"}) + return + } + PIDS[req.body.pid] = "already_used" + + let reply_id + if(!req.body.reply_id || req.body.reply_id < 0) { + reply_id = 0 + } else { + reply_id = req.body.reply_id + } + + if((typeof req.body.reply_id) != "number") { + res.json({"error":"no valid reply id given"}) + return + } + + if(req.body.message.length > 1000) { + res.json({"error":"message too long"}) + return + } + + req.body.message = encodeURIComponent(req.body.message.trim()) + req.body.receiver = encodeURIComponent(req.body.receiver||"") + if(req.body.receiver == "")req.body.receiver="everyone" + + if(!req.body.message) { + res.json({"error":"no message to post"}) + return + } + + let sql = `insert into ipost.posts (post_user_name,post_text,post_time,post_receiver_name,post_from_bot,post_reply_id) values (?,?,?,?,?,?);` + let values = [encodeURIComponent(res.locals.username),req.body.message,Date.now(),req.body.receiver,res.locals.isbot,reply_id] + con.query(sql, values, function (err, result) { + if (err) throw err; + let post_obj = { + post_user_name: encodeURIComponent(res.locals.username), + post_text: req.body.message, + post_time: Date.now(), + post_special_text: "", + post_receiver_name: req.body.receiver, + post_from_bot: res.locals.isbot, + post_reply_id: reply_id + } + + let message = { + message: "new_post", + data: post_obj + } + let messagestr = JSON.stringify(message) + server.wss.clients.forEach(function(ws) { + if(ws.channel == req.body.receiver) { + ws.send(messagestr) + } + }); + res.json({"success":"successfully posted message"}) + console.log(5,`posted new message by ${res.locals.username} : ${req.body.message}`); + }); + }) + } +} \ No newline at end of file diff --git a/server.js b/server.js index a595723..4397e18 100644 --- a/server.js +++ b/server.js @@ -407,25 +407,35 @@ START /API/* */ +var wss; + const commonfunctions = { increaseAPICall, increaseUSERCall, increaseAccountAPICall, - increaseIndividualCall + increaseIndividualCall, + wss, + genstring } -let options = require("./routes/api/options.js") -options.setup(router,con,commonfunctions) +const toLoad = [ + "api/options.js", + "api/all.js", + "api/settingshandler.js" +] -let apiALL = require("./routes/api/all.js") -apiALL.setup(router,con,commonfunctions) +for (let i = 0; i < toLoad.length; i++) { + require("./routes/"+toLoad[i]).setup(router,con,commonfunctions) +} -let settingshandler = require("./routes/api/settingshandler.js") -settingshandler.setup(router,con,commonfunctions) +// let options = require("./routes/api/options.js") +// options.setup(router,con,commonfunctions) +// let apiALL = require("./routes/api/all.js") +// apiALL.setup(router,con,commonfunctions) - -//TODO: loop through all files and load them in +// let settingshandler = require("./routes/api/settingshandler.js") +// settingshandler.setup(router,con,commonfunctions) router.get("/api/search", async function(req,res) { res.set("Access-Control-Allow-Origin","") @@ -536,95 +546,7 @@ router.get("/api/getotheruser",async function(req,res) { }); }) -const PIDS = {} //[pid]: true/"already_used" -router.get("/api/pid", async function(req,res) { - res.set("Access-Control-Allow-Origin","*") - let pid = genstring(10) //collision chance is low enough, but we'll check anyways - while (PIDS[pid] != undefined){ - pid = genstring(10) - console.log(5,"pid collision"); - } - PIDS[pid] = true - setTimeout(function() { - PIDS[pid]=undefined - },40000) - res.json({"pid":pid}) -}) - -router.post("/api/post", async function(req,res) { - if(!req.body.message) { - res.json({"error":"no message to post"}) - return - } - if((typeof req.body.message) != "string") { - res.json({"error":"no message to post"}) - return - } - if((typeof req.body.pid) != "string") { - res.json({"error":"no pid given"}) - return - } - if(req.body.pid.length != 10 || PIDS[req.body.pid] !== true) { - res.json({"error":"invalid pid given"}) - return - } - PIDS[req.body.pid] = "already_used" - - let reply_id - if(!req.body.reply_id || req.body.reply_id < 0) { - reply_id = 0 - } else { - reply_id = req.body.reply_id - } - - if((typeof req.body.reply_id) != "number") { - res.json({"error":"no valid reply id given"}) - return - } - - if(req.body.message.length > 1000) { - res.json({"error":"message too long"}) - return - } - - req.body.message = encodeURIComponent(req.body.message.trim()) - req.body.receiver = encodeURIComponent(req.body.receiver||"") - if(req.body.receiver == "")req.body.receiver="everyone" - - if(!req.body.message) { - res.json({"error":"no message to post"}) - return - } - - let sql = `insert into ipost.posts (post_user_name,post_text,post_time,post_receiver_name,post_from_bot,post_reply_id) values (?,?,?,?,?,?);` - let values = [encodeURIComponent(res.locals.username),req.body.message,Date.now(),req.body.receiver,res.locals.isbot,reply_id] - con.query(sql, values, function (err, result) { - if (err) throw err; - let post_obj = { - post_user_name: encodeURIComponent(res.locals.username), - post_text: req.body.message, - post_time: Date.now(), - post_special_text: "", - post_receiver_name: req.body.receiver, - post_from_bot: res.locals.isbot, - post_reply_id: reply_id - } - - let message = { - message: "new_post", - data: post_obj - } - let messagestr = JSON.stringify(message) - wss.clients.forEach(function(ws) { - if(ws.channel == req.body.receiver) { - ws.send(messagestr) - } - }); - res.json({"success":"successfully posted message"}) - console.log(5,`posted new message by ${res.locals.username} : ${req.body.message}`); - }); -}) router.get("/api/getPosts/*", async function(req,res) { res.set("Access-Control-Allow-Origin","") @@ -1104,7 +1026,7 @@ if(DID_I_FINALLY_ADD_HTTPS) { } -const wss = new WebSocket({ +wss = new WebSocket({ server: httpsServer, perMessageDeflate: { zlibDeflateOptions: {