add beta file uploads

This commit is contained in:
Mystikfluu 2022-09-18 13:28:26 +02:00
parent 5e3c8c508f
commit 8564ba4022
4 changed files with 259 additions and 20 deletions

View File

@ -19,7 +19,22 @@ socket.addEventListener("message", async function (event) {
let item = ds.data
let username = decURIComp(item.post_user_name)
if(message == "new_post" && decURIComp(item.post_receiver_name) == currentChannel) {
await createPost(username,decURIComp(item.post_text),item.post_time,item.post_special_text,highest_id+1,item.post_from_bot,item.post_reply_id,true)
await createPost(
username,
decURIComp(item.post_text),
item.post_time,
item.post_special_text,
highest_id+1,
item.post_from_bot,
item.post_reply_id,
true,
item.user_avatar,
item.files[0],
item.files[1],
item.files[2],
item.files[3],
item.files[4]
)
if(user["username"]!=username)mainNoti(username)
let highest_known_posts = await (await fetch(`/api/getPostsLowerThan?id=${highest_id+28}&channel=${currentChannel}`)).json()
@ -34,11 +49,19 @@ socket.addEventListener("message", async function (event) {
}
})
socket.addEventListener("open",()=> {
switchChannel(currentChannel)
})
var cd = true //inversed "cooldown"
function postMessage() {
let msg = getById("post-text").value
let len = msg.length
if(len==0){
alert("you have to enter a message!")
return;
};
if(len > 1000) {
alert(`Your message cant contain more than 1000 characters! (${len})`)
return
@ -62,6 +85,7 @@ var cd = true //inversed "cooldown"
formdata.append("file_"+i,files[i])
}
files = []
getById("filesDiv").innerHTML=""
fetch("/api/post", {
method: "POST", body: formdata
@ -117,7 +141,26 @@ async function reply_link_clicked(reply_channel,reply_id) {
}
}
async function createPost(username,text,time,specialtext,postid,isbot,reply_id,add_on_top,avatar_src) {
const image_types = {
"png":true,
"jpg":true,
"jpeg":true
}
function iconLink(name) {
if(!name){
//if(typeof name === 'undefined' || typeof name === "null"){
return undefined;
}
console.log(name,name.lastIndexOf("\."),name.substring(name.lastIndexOf("\.")+1));
let extension = name.substring(name.lastIndexOf("\.")+1)
if(extension in image_types) {
return "/user_uploads/"+name;
}
return "/api/getFileIcon/"+extension
}
async function createPost(username,text,time,specialtext,postid,isbot,reply_id,add_on_top,avatar_src,file0,file1,file2,file3,file4) {
if(!specialtext)specialtext=""
const newDiv = createElement("div");
const newP = createElement("p");
@ -198,13 +241,6 @@ async function createPost(username,text,time,specialtext,postid,isbot,reply_id,a
replyA.appendChild(replyBr)
replyA.classList.add("no-link-style")
// async function onclick(event) {
// event.preventDefault()
// }
// replyDiv.onclick = function() {
// reply_link_clicked(reply_channel, reply_id)
// }
replyDiv.appendChild(replyA)
@ -219,6 +255,72 @@ async function createPost(username,text,time,specialtext,postid,isbot,reply_id,a
newDiv.appendChild(newP)
newDiv.innerHTML += filterPost(text)
newDiv.id = postid
/*
FILES
*/
const filesP = createElement("p")
const file0_img = createElement("img")
const file1_img = createElement("img")
const file2_img = createElement("img")
const file3_img = createElement("img")
const file4_img = createElement("img")
file0_img.src = iconLink(file0)
file1_img.src = iconLink(file1)
file2_img.src = iconLink(file2)
file3_img.src = iconLink(file3)
file4_img.src = iconLink(file4)
file0_img.width = 50
file1_img.width = 50
file2_img.width = 50
file3_img.width = 50
file4_img.width = 50
if(file0){
filesP.appendChild(file0_img)
file0_img.onclick = function(event) {
console.warn("TODO: Create Modal");
}
}
if(file1){
filesP.appendChild(file1_img)
file1_img.onclick = function(event) {
console.warn("TODO: Create Modal");
}
}
if(file2){
filesP.appendChild(file2_img)
file2_img.onclick = function(event) {
console.warn("TODO: Create Modal");
}
}
if(file3){
filesP.appendChild(file3_img)
file3_img.onclick = function(event) {
console.warn("TODO: Create Modal");
}
}
if(file4){
filesP.appendChild(file4_img)
file4_img.onclick = function(event) {
console.warn("TODO: Create Modal");
}
}
newDiv.appendChild(filesP)
/*
Adding the post to the posts list
*/
let posts_div = getById("posts")
if(add_on_top) {
posts_div.insertBefore(newDiv, posts_div.children[0]);
@ -253,7 +355,22 @@ async function main(){
let post_promises = []
for(i in all_posts) {
let item = all_posts[i]
let created = createPost(decURIComp(item.post_user_name),decURIComp(item.post_text),item.post_time,item.post_special_text,item.post_id,item.post_from_bot,item.post_reply_id,false,item.User_Avatar)
let created = createPost(
decURIComp(item.post_user_name),
decURIComp(item.post_text),
item.post_time,
item.post_special_text,
item.post_id,
item.post_from_bot,
item.post_reply_id,
false,
item.User_Avatar,
item.file_0,
item.file_1,
item.file_2,
item.file_3,
item.file_4
)
post_promises.push(created)
}
@ -376,6 +493,7 @@ var files = []
function addFile(file) {
if(file.size > 100000) {
alert("that file is too large, max size: 100KiB")
console.log("file is too big: ", file.name, file.type, file.size);
return;
}

View File

@ -79,8 +79,104 @@ export const setup = function (router, con, server) {
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];
console.log(req.body);
let __dirname = server.dirname
let file0_name="",file1_name="",file2_name="",file3_name="",file4_name = ""
if(req.files["file_0"] !== undefined) {
let file = req.files["file_0"]
const file0_id = server.genstring(20)
console.log(file.name);
file0_name = file0_id+"/"+(file.name.substring(0,25))
server.ensureExists(__dirname + "/user_uploads/"+file0_id,undefined,(err)=>{
if(err) {
console.error(err)
return;
}
file.mv(__dirname + "/user_uploads/"+file0_name,(err2) => {
if(err2) {
console.error(err2)
return;
}
})
})
}
if(req.files["file_1"] !== undefined) {
let file = req.files["file_1"]
const file1_id = server.genstring(20)
console.log(file.name);
file1_name = file1_id+"/"+(file.name.substring(0,25))
server.ensureExists(__dirname + "/user_uploads/"+file1_id,undefined,(err)=>{
if(err) {
console.error(err)
return;
}
file.mv(__dirname + "/user_uploads/"+file1_name,(err2) => {
if(err2) {
console.error(err2)
return;
}
})
})
}
if(req.files["file_2"] !== undefined) {
let file = req.files["file_2"]
const file2_id = server.genstring(20)
console.log(file.name);
file2_name = file2_id+"/"+(file.name.substring(0,25))
server.ensureExists(__dirname + "/user_uploads/"+file2_id,undefined,(err)=>{
if(err) {
console.error(err)
return;
}
file.mv(__dirname + "/user_uploads/"+file2_name,(err2) => {
if(err2) {
console.error(err2)
return;
}
})
})
}
if(req.files["file_3"] !== undefined) {
let file = req.files["file_3"]
const file3_id = server.genstring(20)
console.log(file.name);
file3_name = file3_id+"/"+(file.name.substring(0,25))
server.ensureExists(__dirname + "/user_uploads/"+file3_id,undefined,(err)=>{
if(err) {
console.error(err)
return;
}
file.mv(__dirname + "/user_uploads/"+file3_name,(err2) => {
if(err2) {
console.error(err2)
return;
}
})
})
}
if(req.files["file_4"] !== undefined) {
let file = req.files["file_0"]
const file4_id = server.genstring(20)
console.log(file.name);
file4_name = file4_id+"/"+(file.name.substring(0,25))
server.ensureExists(__dirname + "/user_uploads/"+file4_id,undefined,(err)=>{
if(err) {
console.error(err)
return;
}
file.mv(__dirname + "/user_uploads/"+file4_name,(err2) => {
if(err2) {
console.error(err2)
return;
}
})
})
}
let sql = `insert into ipost.posts (post_user_name,post_text,post_time,post_receiver_name,post_from_bot,post_reply_id,file_0,file_1,file_2,file_3,file_4) values (?,?,?,?,?,?,?,?,?,?,?);`;
let values = [encodeURIComponent(res.locals.username), req.body.message, Date.now(), req.body.receiver, res.locals.isbot, reply_id,file0_name,file1_name,file2_name,file3_name,file4_name];
con.query(sql, values, function (err, result) {
if (err){
res.status(500)
@ -95,7 +191,15 @@ export const setup = function (router, con, server) {
post_special_text: "",
post_receiver_name: req.body.receiver,
post_from_bot: res.locals.isbot,
post_reply_id: reply_id
post_reply_id: reply_id,
user_avatar: res.locals.avatar,
files: [
file0_name,
file1_name,
file2_name,
file3_name,
file4_name
]
};
let message = {
message: "new_post",

View File

@ -453,7 +453,9 @@ var commonfunctions = {
increaseAccountAPICall,
increaseIndividualCall,
wss,
genstring
genstring,
ensureExists,
"dirname": __dirname
};
optionssetup(router, con, commonfunctions);
allsetup(router, con, commonfunctions);
@ -600,7 +602,7 @@ router.get("/api/getPosts/*", function (req, res) {
router.get("/api/getPosts", function (req, res) {
res.set("Access-Control-Allow-Origin", "*");
if (req.query.channel != undefined) {
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,User_Avatar from ipost.posts inner join ipost.users on (User_Name = post_user_name) where post_receiver_name = ? group by post_id order by post_id desc limit 30;`;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,User_Avatar,file_0,file_1,file_2,file_3,file_4 from ipost.posts inner join ipost.users on (User_Name = post_user_name) where post_receiver_name = ? group by post_id order by post_id desc limit 30;`;
con.query(sql, [encodeURIComponent(req.query.channel)], function (err, result) {
if (err)
throw err;
@ -608,7 +610,7 @@ router.get("/api/getPosts", function (req, res) {
});
}
else { //fallback
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id from ipost.posts where (post_receiver_name is null or post_receiver_name = 'everyone') group by post_id order by post_id desc limit 30;`;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,file_0,file_1,file_2,file_3,file_4 from ipost.posts where (post_receiver_name is null or post_receiver_name = 'everyone') group by post_id order by post_id desc limit 30;`;
con.query(sql, [], function (err, result) {
if (err)
throw err;
@ -619,7 +621,7 @@ router.get("/api/getPosts", function (req, res) {
router.get("/api/getPostsLowerThan", function (req, res) {
res.set("Access-Control-Allow-Origin", "*");
if (req.query.channel != undefined) {
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id from ipost.posts where ((post_receiver_name = ?) and (post_id < ?)) group by post_id order by post_id desc limit 30;`;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,file_0,file_1,file_2,file_3,file_4 from ipost.posts where ((post_receiver_name = ?) and (post_id < ?)) group by post_id order by post_id desc limit 30;`;
con.query(sql, [encodeURIComponent(req.query.channel), req.query.id], function (err, result) {
if (err)
throw err;
@ -627,7 +629,7 @@ router.get("/api/getPostsLowerThan", function (req, res) {
});
}
else { //fallback
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id from ipost.posts where ((post_receiver_name is null or post_receiver_name = 'everyone') and (post_id < ?)) group by post_id order by post_id desc limit 30;`;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,file_0,file_1,file_2,file_3,file_4 from ipost.posts where ((post_receiver_name is null or post_receiver_name = 'everyone') and (post_id < ?)) group by post_id order by post_id desc limit 30;`;
con.query(sql, [req.query.id], function (err, result) {
if (err)
throw err;
@ -638,7 +640,7 @@ router.get("/api/getPostsLowerThan", function (req, res) {
router.get("/api/getPost", function (req, res) {
res.set("Access-Control-Allow-Origin", "*");
let arg = req.query.id;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,post_receiver_name,User_Avatar from ipost.posts inner join ipost.users on (User_Name = post_user_name) where post_id=?;`;
let sql = `select post_user_name,post_text,post_time,post_special_text,post_id,post_from_bot,post_reply_id,post_receiver_name,User_Avatar,file_0,file_1,file_2,file_3,file_4 from ipost.posts inner join ipost.users on (User_Name = post_user_name) where post_id=?;`;
con.query(sql, [arg], function (err, result) {
if (err)
throw err;
@ -836,6 +838,20 @@ router.get("/images/*", (request, response) => {
}
return;
});
router.get("/user_uploads/*", (request, response) => {
if (!increaseUSERCall(request, response))
return;
if (existsSync(__dirname + request.originalUrl)) {
response.set('Cache-Control', 'public, max-age=2592000'); //cache it for one month-ish
response.sendFile(__dirname + request.originalUrl);
}
else {
response.status(404).send("no file with that name found");
}
return;
});
router.get("/avatars/*", (request, response, next) => {
if (!increaseUSERCall(request, response))
return;

1
user_uploads/test_upload Normal file
View File

@ -0,0 +1 @@
this is a test upload