rewrite to a module
This commit is contained in:
+56
-50
@@ -1,51 +1,57 @@
|
||||
const fs = require('fs');
|
||||
const SHA = require("../../extra_modules/SHA.js")
|
||||
const unsign = require("../../extra_modules/unsign.js")
|
||||
const config = JSON.parse(fs.readFileSync("server_config.json"))
|
||||
const HASHES_DB = config.cookies.server_hashes
|
||||
const HASHES_COOKIE = config.cookies.client_hashes
|
||||
const HASHES_DIFF = HASHES_DB - HASHES_COOKIE
|
||||
|
||||
module.exports = {
|
||||
"setup": function(router,con,server) {
|
||||
router.use("/api/*",async function(req,res,next) {
|
||||
res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
if(config["allow_getotheruser_without_cookie"] && req.originalUrl.split("\?")[0] == "/api/getotheruser") {
|
||||
next()
|
||||
return
|
||||
}
|
||||
if(!server.increaseAPICall(req,res))return;
|
||||
let unsigned;
|
||||
if(req.body.user == undefined || req.body.pass == undefined) {
|
||||
unsigned = unsign.getunsigned(req,res)
|
||||
if(!unsigned)return
|
||||
} else {
|
||||
unsigned = `${req.body.user} ${SHA.SHA256(req.body.pass,req.body.user,HASHES_COOKIE)}`
|
||||
//basically we generate the unsigned cookie
|
||||
res.locals.isbot = true //only bots use user+pass
|
||||
}
|
||||
let sql = `select User_Name,User_Bio,User_Avatar,User_Settings from ipost.users where User_Name=? and User_PW=?;`
|
||||
let values = unsigned.split(" ")
|
||||
values[1] = SHA.SHA256(values[1],values[0],HASHES_DIFF)
|
||||
res.locals.bio = ""
|
||||
res.locals.avatar = ""
|
||||
res.locals.settings = {}
|
||||
con.query(sql, values, function (err, result) {
|
||||
if (err) throw err;
|
||||
if(result[0] && result[0].User_Name && result[0].User_Name == values[0]) {
|
||||
res.locals.username = values[0];
|
||||
res.locals.bio = result[0].User_Bio || ""
|
||||
res.locals.avatar = result[0].User_Avatar || ""
|
||||
res.locals.settings = JSON.parse(result[0].User_Settings)
|
||||
if(res.locals.settings == "null")res.locals.settings = {}
|
||||
if(res.locals.settings == null)res.locals.settings = {}
|
||||
|
||||
next()
|
||||
} else {
|
||||
res.status(400)
|
||||
res.json({"error":"you cannot access the api without being logged in"})
|
||||
import fs from "fs";
|
||||
import SHA from "../../extra_modules/SHA.js";
|
||||
import unsign from "../../extra_modules/unsign.js";
|
||||
const config = JSON.parse(fs.readFileSync("server_config.json"));
|
||||
const HASHES_DB = config.cookies.server_hashes;
|
||||
const HASHES_COOKIE = config.cookies.client_hashes;
|
||||
const HASHES_DIFF = HASHES_DB - HASHES_COOKIE;
|
||||
export const setup = function (router, con, server) {
|
||||
router.use("/api/*", async function (req, res, next) {
|
||||
res.set("Access-Control-Allow-Origin", "*"); //we'll allow it for now
|
||||
if (config["allow_getotheruser_without_cookie"] && req.originalUrl.split("\?")[0] == "/api/getotheruser") {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
if (!server.increaseAPICall(req, res))
|
||||
return;
|
||||
let unsigned;
|
||||
if (req.body.user == undefined || req.body.pass == undefined) {
|
||||
unsigned = unsign.getunsigned(req, res);
|
||||
if (!unsigned)
|
||||
return;
|
||||
}
|
||||
else {
|
||||
unsigned = `${req.body.user} ${SHA.SHA256(req.body.pass, req.body.user, HASHES_COOKIE)}`;
|
||||
//basically we generate the unsigned cookie
|
||||
res.locals.isbot = true; //only bots use user+pass
|
||||
}
|
||||
let sql = `select User_Name,User_Bio,User_Avatar,User_Settings from ipost.users where User_Name=? and User_PW=?;`;
|
||||
let values = unsigned.split(" ");
|
||||
values[1] = SHA.SHA256(values[1], values[0], HASHES_DIFF);
|
||||
res.locals.bio = "";
|
||||
res.locals.avatar = "";
|
||||
res.locals.settings = {};
|
||||
con.query(sql, values, function (err, result) {
|
||||
if (err)
|
||||
throw err;
|
||||
if (result[0] && result[0].User_Name && result[0].User_Name == values[0]) {
|
||||
res.locals.username = values[0];
|
||||
res.locals.bio = result[0].User_Bio || "";
|
||||
res.locals.avatar = result[0].User_Avatar || "";
|
||||
res.locals.settings = JSON.parse(result[0].User_Settings);
|
||||
if (res.locals.settings == "null")
|
||||
res.locals.settings = {};
|
||||
if (res.locals.settings == null)
|
||||
res.locals.settings = {};
|
||||
next();
|
||||
}
|
||||
else {
|
||||
res.status(400);
|
||||
res.json({ "error": "you cannot access the api without being logged in" });
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
export default {
|
||||
setup
|
||||
};
|
||||
|
||||
@@ -1,66 +1,62 @@
|
||||
import {web_version} from "unsafe_encrypt"
|
||||
|
||||
module.exports = {
|
||||
"setup": function(router,con,server) {
|
||||
router.get("/api/getPersonalPosts", async function(req,res) {
|
||||
res.set("Access-Control-Allow-Origin","")
|
||||
|
||||
let otherperson = encodeURIComponent(req.query.otherperson||"")
|
||||
|
||||
if(typeof otherperson != "string" || otherperson.length > 100 || otherperson=="") {
|
||||
res.status(400).json({"error": "invalid otherperson given"})
|
||||
return
|
||||
}
|
||||
|
||||
const columns = [
|
||||
"dms_user_name","dms_text","dms_time","dms_special_text","dms_id","dms_from_bot","dms_reply_id"
|
||||
]
|
||||
//dms_user_name = sender
|
||||
//dms_receiver = receiver
|
||||
//if (sender == current and receiver == other) or (receiver == current and sender == other)
|
||||
let sql = `select ${columns.join(",")} from ipost.dms where ((dms_receiver = ? and dms_user_name = ?) or (dms_receiver = ? and dms_user_name = ?)) order by dms_id desc;`
|
||||
con.query(sql, [otherperson,encodeURIComponent(res.locals.username),encodeURIComponent(res.locals.username),otherperson], function (err, result) {
|
||||
if (err) throw err;
|
||||
res.json(result)
|
||||
});
|
||||
})
|
||||
|
||||
router.get("/api/dms/conversations", async function(req,res) {
|
||||
res.set("Access-Control-Allow-Origin","*")
|
||||
|
||||
const columns = [
|
||||
"dms_user_name","dms_receiver"
|
||||
]
|
||||
|
||||
let uriencusername = encodeURIComponent(res.locals.username)
|
||||
|
||||
let sql = `select ${columns.join(",")} from ipost.dms where ((dms_receiver = ?) or (dms_user_name = ?)) group by dms_receiver,dms_user_name;`
|
||||
con.query(sql, [uriencusername,uriencusername], function (err, result) {
|
||||
if (err) throw err;
|
||||
res.json(result)
|
||||
});
|
||||
})
|
||||
|
||||
router.get("/api/dms/encrypt.js", async function(req,res) {
|
||||
res.set("Access-Control-Allow-Origin","*")
|
||||
res.send(web_version())
|
||||
})
|
||||
|
||||
//
|
||||
router.get("/api/dms/getDM", async function(req,res) {
|
||||
res.set("Access-Control-Allow-Origin","*")
|
||||
let arg = req.query.id
|
||||
let uriencusername = encodeURIComponent(res.locals.username)
|
||||
let sql = `select dms_user_name,dms_text,dms_time,dms_special_text,dms_id,dms_from_bot,dms_reply_id,dms_receiver from ipost.dms where dms_id=? and (dms_user_name=? or dms_receiver=?);`
|
||||
con.query(sql, [arg,uriencusername,uriencusername], function (err, result) {
|
||||
if (err) throw err;
|
||||
if(result[0]) {
|
||||
//const web_version = require("unsafe_encrypt").web_version
|
||||
import { web_version } from "unsafe_encrypt";
|
||||
export const setup = function (router, con, server) {
|
||||
router.get("/api/getPersonalPosts", async function (req, res) {
|
||||
res.set("Access-Control-Allow-Origin", "");
|
||||
let otherperson = encodeURIComponent(req.query.otherperson || "");
|
||||
if (typeof otherperson != "string" || otherperson.length > 100 || otherperson == "") {
|
||||
res.status(400).json({ "error": "invalid otherperson given" });
|
||||
return;
|
||||
}
|
||||
const columns = [
|
||||
"dms_user_name", "dms_text", "dms_time", "dms_special_text", "dms_id", "dms_from_bot", "dms_reply_id"
|
||||
];
|
||||
//dms_user_name = sender
|
||||
//dms_receiver = receiver
|
||||
//if (sender == current and receiver == other) or (receiver == current and sender == other)
|
||||
let sql = `select ${columns.join(",")} from ipost.dms where ((dms_receiver = ? and dms_user_name = ?) or (dms_receiver = ? and dms_user_name = ?)) order by dms_id desc;`;
|
||||
con.query(sql, [otherperson, encodeURIComponent(res.locals.username), encodeURIComponent(res.locals.username), otherperson], function (err, result) {
|
||||
if (err)
|
||||
throw err;
|
||||
res.json(result);
|
||||
});
|
||||
});
|
||||
router.get("/api/dms/conversations", async function (req, res) {
|
||||
res.set("Access-Control-Allow-Origin", "*");
|
||||
const columns = [
|
||||
"dms_user_name", "dms_receiver"
|
||||
];
|
||||
let uriencusername = encodeURIComponent(res.locals.username);
|
||||
let sql = `select ${columns.join(",")} from ipost.dms where ((dms_receiver = ?) or (dms_user_name = ?)) group by dms_receiver,dms_user_name;`;
|
||||
con.query(sql, [uriencusername, uriencusername], function (err, result) {
|
||||
if (err)
|
||||
throw err;
|
||||
res.json(result);
|
||||
});
|
||||
});
|
||||
router.get("/api/dms/encrypt.js", async function (req, res) {
|
||||
res.set("Access-Control-Allow-Origin", "*");
|
||||
res.send(web_version());
|
||||
});
|
||||
//
|
||||
router.get("/api/dms/getDM", async function (req, res) {
|
||||
res.set("Access-Control-Allow-Origin", "*");
|
||||
let arg = req.query.id;
|
||||
let uriencusername = encodeURIComponent(res.locals.username);
|
||||
let sql = `select dms_user_name,dms_text,dms_time,dms_special_text,dms_id,dms_from_bot,dms_reply_id,dms_receiver from ipost.dms where dms_id=? and (dms_user_name=? or dms_receiver=?);`;
|
||||
con.query(sql, [arg, uriencusername, uriencusername], function (err, result) {
|
||||
if (err)
|
||||
throw err;
|
||||
if (result[0]) {
|
||||
res.set('Cache-Control', 'public, max-age=2592000'); //cache it for one month-ish
|
||||
res.json(result[0])
|
||||
} else {
|
||||
res.json({"error":"there is no such dm!"})
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
res.json(result[0]);
|
||||
}
|
||||
else {
|
||||
res.json({ "error": "there is no such dm!" });
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
export default {
|
||||
setup
|
||||
};
|
||||
|
||||
+96
-106
@@ -1,106 +1,96 @@
|
||||
const xor = require("../../../extra_modules/xor.js")
|
||||
|
||||
module.exports = {
|
||||
"setup": function(router,con,server) {
|
||||
|
||||
const PIDS = {} //[pid]: true/"already_used"
|
||||
|
||||
router.get("/api/dms/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/dms/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 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())
|
||||
|
||||
if(req.body.message.length > 3000) {
|
||||
res.json({"error":"message too long"}) //check again after URI encoding it
|
||||
return
|
||||
}
|
||||
|
||||
req.body.receiver = encodeURIComponent(req.body.receiver||"")
|
||||
if(req.body.receiver == "" || req.body.receiver == encodeURIComponent(res.locals.username) || req.body.receiver.length > 100) {
|
||||
res.status(400).json({"error": "invalid receiver given"})
|
||||
return
|
||||
}
|
||||
let otherperson = req.body.receiver
|
||||
|
||||
if(!req.body.message) {
|
||||
res.json({"error":"no message to post"})
|
||||
return
|
||||
}
|
||||
|
||||
let sql = `insert into ipost.dms (dms_user_name,dms_text,dms_time,dms_receiver,dms_from_bot,dms_reply_id) values (?,?,?,?,?,?);`
|
||||
let values = [encodeURIComponent(res.locals.username),req.body.message,Date.now(),otherperson,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 == decodeURIComponent(req.body.receiver)) {
|
||||
// ws.send(messagestr)
|
||||
// }
|
||||
// });
|
||||
res.json({"success":"successfully posted dm"})
|
||||
console.log(5,`posted new dm by ${res.locals.username} to ${otherperson} : ${xor(encodeURIComponent(res.locals.username),otherperson)}`);
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
import xor from "../../../extra_modules/xor.js";
|
||||
export const setup = function (router, con, server) {
|
||||
const PIDS = {}; //[pid]: true/"already_used"
|
||||
router.get("/api/dms/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/dms/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 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());
|
||||
if (req.body.message.length > 3000) {
|
||||
res.json({ "error": "message too long" }); //check again after URI encoding it
|
||||
return;
|
||||
}
|
||||
req.body.receiver = encodeURIComponent(req.body.receiver || "");
|
||||
if (req.body.receiver == "" || req.body.receiver == encodeURIComponent(res.locals.username) || req.body.receiver.length > 100) {
|
||||
res.status(400).json({ "error": "invalid receiver given" });
|
||||
return;
|
||||
}
|
||||
let otherperson = req.body.receiver;
|
||||
if (!req.body.message) {
|
||||
res.json({ "error": "no message to post" });
|
||||
return;
|
||||
}
|
||||
let sql = `insert into ipost.dms (dms_user_name,dms_text,dms_time,dms_receiver,dms_from_bot,dms_reply_id) values (?,?,?,?,?,?);`;
|
||||
let values = [encodeURIComponent(res.locals.username), req.body.message, Date.now(), otherperson, 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 == decodeURIComponent(req.body.receiver)) {
|
||||
// ws.send(messagestr)
|
||||
// }
|
||||
// });
|
||||
res.json({ "success": "successfully posted dm" });
|
||||
console.log(5, `posted new dm by ${res.locals.username} to ${otherperson} : ${xor(encodeURIComponent(res.locals.username), otherperson)}`);
|
||||
});
|
||||
});
|
||||
};
|
||||
export default {
|
||||
setup
|
||||
};
|
||||
|
||||
+17
-56
@@ -1,57 +1,18 @@
|
||||
function allowAllTraffic(router,str,type) {
|
||||
router.options(str,async function(req,res,next) {
|
||||
res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
res.set("Access-Control-Allow-Methods",type || "GET")
|
||||
res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
res.status(200).send("")
|
||||
})
|
||||
function allowAllTraffic(router, str, type) {
|
||||
router.options(str, async function (req, res, next) {
|
||||
res.set("Access-Control-Allow-Origin", "*"); //we'll allow it for now
|
||||
res.set("Access-Control-Allow-Methods", type || "GET");
|
||||
res.set("Access-Control-Allow-Headers", "Content-Type");
|
||||
res.status(200).send("");
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
"setup": function(router,con,server) {
|
||||
// router.options("/api/pid",async function(req,res,next) {
|
||||
// res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
// res.set("Access-Control-Allow-Methods","GET")
|
||||
// res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
// res.status(200).send("")
|
||||
// })
|
||||
|
||||
// router.options("/api/post",async function(req,res,next) {
|
||||
// res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
// res.set("Access-Control-Allow-Methods","POST")
|
||||
// res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
// res.status(200).send("")
|
||||
// })
|
||||
|
||||
// router.options("/api/getotheruser",async function(req,res,next) {
|
||||
// res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
// res.set("Access-Control-Allow-Methods","GET")
|
||||
// res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
// res.status(200).send("")
|
||||
// })
|
||||
|
||||
// router.options("/api/getPost",async function(req,res,next) {
|
||||
// res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
// res.set("Access-Control-Allow-Methods","GET")
|
||||
// res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
// res.status(200).send("")
|
||||
// })
|
||||
//
|
||||
// router.options("/api/getPostsLowerThan",async function(req,res,next) {
|
||||
// res.set("Access-Control-Allow-Origin","*") //we'll allow it for now
|
||||
// res.set("Access-Control-Allow-Methods","GET")
|
||||
// res.set("Access-Control-Allow-Headers","Content-Type")
|
||||
// res.status(200).send("")
|
||||
// })
|
||||
|
||||
allowAllTraffic(router,"/api/pid")
|
||||
allowAllTraffic(router,"/api/post","POST")
|
||||
allowAllTraffic(router,"/api/getotheruser")
|
||||
allowAllTraffic(router,"/api/getPost")
|
||||
allowAllTraffic(router,"/api/getPostsLowerThan")
|
||||
allowAllTraffic(router,"/api/settings")
|
||||
allowAllTraffic(router,"/api/settings","POST")
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
function setup(router, con, server) {
|
||||
allowAllTraffic(router, "/api/pid");
|
||||
allowAllTraffic(router, "/api/post", "POST");
|
||||
allowAllTraffic(router, "/api/getotheruser");
|
||||
allowAllTraffic(router, "/api/getPost");
|
||||
allowAllTraffic(router, "/api/getPostsLowerThan");
|
||||
allowAllTraffic(router, "/api/settings");
|
||||
allowAllTraffic(router, "/api/settings", "POST");
|
||||
}
|
||||
export { setup };
|
||||
|
||||
+91
-99
@@ -1,101 +1,93 @@
|
||||
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())
|
||||
|
||||
if(req.body.message.length > 3000) {
|
||||
res.json({"error":"message too long"}) //check again after URI encoding it
|
||||
return
|
||||
}
|
||||
|
||||
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
|
||||
export const 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());
|
||||
if (req.body.message.length > 3000) {
|
||||
res.json({ "error": "message too long" }); //check again after URI encoding it
|
||||
return;
|
||||
}
|
||||
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);
|
||||
let channel = decodeURIComponent(req.body.receiver);
|
||||
server.wss.clients.forEach(async function (ws) {
|
||||
if (ws.channel == channel) {
|
||||
ws.send(messagestr);
|
||||
}
|
||||
|
||||
let message = {
|
||||
message: "new_post",
|
||||
data: post_obj
|
||||
}
|
||||
let messagestr = JSON.stringify(message)
|
||||
let channel = decodeURIComponent(req.body.receiver)
|
||||
server.wss.clients.forEach(async function(ws) {
|
||||
if(ws.channel == channel) {
|
||||
ws.send(messagestr)
|
||||
}
|
||||
});
|
||||
res.json({"success":"successfully posted message"})
|
||||
console.log(5,`posted new message by ${res.locals.username} : ${req.body.message}`);
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
res.json({ "success": "successfully posted message" });
|
||||
console.log(5, `posted new message by ${res.locals.username} : ${req.body.message}`);
|
||||
});
|
||||
});
|
||||
};
|
||||
export default {
|
||||
setup
|
||||
};
|
||||
|
||||
@@ -1,55 +1,48 @@
|
||||
const allowed_settings = { //"settingname":["validtypes"]
|
||||
const allowed_settings = {
|
||||
"ACCR": ["boolean"]
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
"setup": function(router,con,server) {
|
||||
router.get("/api/settings",function(req,res) {
|
||||
res.json(res.locals.settings)
|
||||
})
|
||||
|
||||
router.post("/api/settings",function(req,res) {
|
||||
|
||||
if(!req.body.setting) {
|
||||
res.json({"error":"no setting to change"})
|
||||
return
|
||||
};
|
||||
export const setup = function (router, con, server) {
|
||||
router.get("/api/settings", function (req, res) {
|
||||
res.json(res.locals.settings);
|
||||
});
|
||||
router.post("/api/settings", function (req, res) {
|
||||
if (!req.body.setting) {
|
||||
res.json({ "error": "no setting to change" });
|
||||
return;
|
||||
}
|
||||
if ((typeof req.body.setting) != "string") {
|
||||
res.json({ "error": "no setting to change" });
|
||||
return;
|
||||
}
|
||||
let types = allowed_settings[req.body.setting];
|
||||
let allowed = false;
|
||||
let got = typeof req.body.value;
|
||||
for (let index = 0; index < types.length; index++) {
|
||||
if (types[index] == got) {
|
||||
allowed = true;
|
||||
break;
|
||||
}
|
||||
if((typeof req.body.setting) != "string") {
|
||||
res.json({"error":"no setting to change"})
|
||||
return
|
||||
}
|
||||
if (!allowed) {
|
||||
console.log(5, "incorrect type given, received, expected", typeof req.body.value, allowed_settings[req.body.setting]);
|
||||
res.json({ "error": "no new setting value given" });
|
||||
return;
|
||||
}
|
||||
let setting_to_change = req.body.setting;
|
||||
let setting_new_value = req.body.value;
|
||||
res.locals.settings[setting_to_change] = setting_new_value;
|
||||
console.log(5, "changing settings", setting_to_change, setting_new_value, res.locals.settings);
|
||||
let sql = "update ipost.users set User_Settings=? where User_Name=?";
|
||||
let values = [JSON.stringify(res.locals.settings), res.locals.username];
|
||||
con.query(sql, values, function (err, result) {
|
||||
if (err) {
|
||||
res.json({ "status": "error", "code": err });
|
||||
return;
|
||||
}
|
||||
|
||||
let types = allowed_settings[req.body.setting]
|
||||
let allowed = false
|
||||
let got = typeof req.body.value
|
||||
for (let index = 0; index < types.length; index++) {
|
||||
if(types[index] == got) {
|
||||
allowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!allowed) {
|
||||
console.log(5,"incorrect type given, received, expected", typeof req.body.value, allowed_settings[req.body.setting])
|
||||
res.json({"error":"no new setting value given"})
|
||||
return
|
||||
}
|
||||
|
||||
let setting_to_change = req.body.setting
|
||||
let setting_new_value = req.body.value
|
||||
|
||||
res.locals.settings[setting_to_change] = setting_new_value
|
||||
|
||||
console.log(5,"changing settings", setting_to_change, setting_new_value, res.locals.settings)
|
||||
|
||||
let sql = "update ipost.users set User_Settings=? where User_Name=?"
|
||||
let values = [JSON.stringify(res.locals.settings),res.locals.username]
|
||||
con.query(sql, values, function (err, result) {
|
||||
if(err) {
|
||||
res.json({"status":"error","code":err})
|
||||
return
|
||||
}
|
||||
res.json({"status":"success"})
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
res.json({ "status": "success" });
|
||||
});
|
||||
});
|
||||
};
|
||||
export default {
|
||||
setup
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user