add beta file uploads
This commit is contained in:
parent
5e3c8c508f
commit
8564ba4022
138
js/posts.js
138
js/posts.js
@ -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;
|
||||
}
|
||||
|
@ -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,14 +191,22 @@ 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",
|
||||
data: post_obj
|
||||
};
|
||||
let messagestr = JSON.stringify(message);
|
||||
server.wss.clients.forEach( function (ws) {
|
||||
server.wss.clients.forEach(function(ws) {
|
||||
ws.send(messagestr);
|
||||
});
|
||||
res.json({ "success": "successfully posted message" });
|
||||
|
28
server.js
28
server.js
@ -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
1
user_uploads/test_upload
Normal file
@ -0,0 +1 @@
|
||||
this is a test upload
|
Loading…
x
Reference in New Issue
Block a user