add: added image attachments to messages

This commit is contained in:
Lukian 2025-05-12 11:26:15 +02:00
parent 8f77a271e1
commit fb90f1ef4f
10 changed files with 169 additions and 10 deletions

View file

@ -11,14 +11,19 @@ const {
getUserByUsername,
deleteChannelMessages,
deleteChannel,
getMessageReplies
getMessageReplies,
addAttachment,
getMessageAttachments,
getUnusedAttachments,
deleteUnusedAttachments
} = require('../libs/mysql');
const rateLimit = require("express-rate-limit");
const slowDown = require("express-slow-down");
const { checkAuth } = require('../libs/middlewares');
const multer = require('multer');
const fs = require('node:fs');
const upload = multer({ dest: 'data/attachements/' })
const upload = multer({ dest: 'data/attachments/' })
upload.limits = {
fileSize: 1024 * 1024 * 5,
files: 1,
@ -104,6 +109,15 @@ router.post('/:name/delete', async (req, res) => {
}
await deleteChannel(connection, channel[0].id);
const attachments = await getUnusedAttachments(connection);
for (const attachment of attachments) {
if (fs.existsSync(`data/attachments/${attachment.file_name}`)) {
fs.unlinkSync(`data/attachments/${attachment.file_name}`);
}
}
await deleteUnusedAttachments(connection);
connection.end();
req.sockets.emit({
@ -143,7 +157,7 @@ router.get('/:name/messages', async (req, res) => {
const messages = await getMessages(connection, channel[0].id, limit);
for (const message of messages) {
if (message.content.includes('@')) {
if (message.has_mentions) {
const mentions = await getMentions(connection, message.id);
message.mentions = mentions;
} else {
@ -157,18 +171,28 @@ router.get('/:name/messages', async (req, res) => {
else {
message.replies = [];
}
if (message.has_attachments) {
const attachments = await getMessageAttachments(connection, message.id);
message.attachments = attachments;
}
else {
message.attachments = [];
}
}
connection.end();
res.send(messages);
});
router.post('/:name/messages/send', speedLimiter, limiter, upload.single("attachement"), checkAuth, async (req, res) => {
router.post('/:name/messages/send', speedLimiter, limiter, upload.single("attachment"), checkAuth, async (req, res) => {
const { message } = req.body;
const name = req.params.name;
const user = req.user;
const attachement = req.file;
if (!message) {
if (attachement) fs.unlinkSync(`data/attachements/${attachement.filename}`);
return res.status(400).send({ error: 'Missing parameters' });
}
@ -177,12 +201,17 @@ router.post('/:name/messages/send', speedLimiter, limiter, upload.single("attach
const channel = await getChannel(connection, name);
if (!channel[0]) {
connection.end();
if (attachement) fs.unlinkSync(`data/attachements/${attachement.filename}`);
return res.send('No channel found');
}
const sent_message = await addMessage(connection, channel[0].id, user.id, message.replace("\"", "'"));
const message_id = sent_message.insertId;
if (attachement) {
await addAttachment(connection, message_id, attachement.filename);
}
for (const word of message.split(' ')) {
if (word.startsWith('@')) {
const username = word.substring(1);