Compare commits

..

No commits in common. "d38c963babc50c088a4dff1604fc5755e8420ef7" and "bd3cbc528cd458f0ddbb8f89bbb840d306de604e" have entirely different histories.

5 changed files with 37 additions and 97 deletions

View file

@ -16,13 +16,6 @@ const {
const rateLimit = require("express-rate-limit"); const rateLimit = require("express-rate-limit");
const slowDown = require("express-slow-down"); const slowDown = require("express-slow-down");
const { checkAuth } = require('../libs/middlewares'); const { checkAuth } = require('../libs/middlewares');
const multer = require('multer');
const upload = multer({ dest: 'data/attachements/' })
upload.limits = {
fileSize: 1024 * 1024 * 5,
files: 1,
};
const limiter = rateLimit({ const limiter = rateLimit({
windowMs: 1 * 1000, windowMs: 1 * 1000,
@ -163,7 +156,7 @@ router.get('/:name/messages', async (req, res) => {
res.send(messages); res.send(messages);
}); });
router.post('/:name/messages/send', speedLimiter, limiter, upload.single("attachement"), checkAuth, async (req, res) => { router.post('/:name/messages/send', speedLimiter, limiter, checkAuth, async (req, res) => {
const { message } = req.body; const { message } = req.body;
const name = req.params.name; const name = req.params.name;
const user = req.user; const user = req.user;

View file

@ -7,6 +7,7 @@ const {
addMention, addMention,
getMentions, getMentions,
getUserByUsername, getUserByUsername,
setHasReplies,
addReply, addReply,
getMessageReplies getMessageReplies
} = require('../libs/mysql'); } = require('../libs/mysql');
@ -90,6 +91,7 @@ router.post('/:message_id/reply', speedLimiter, limiter, checkAuth, async (req,
const channel = await getChannel(connection, originalMessage[0].channel_name); const channel = await getChannel(connection, originalMessage[0].channel_name);
const sent_message = await addReply(connection, channel[0].id, user.id, message.replace("\"", "'"), message_id); const sent_message = await addReply(connection, channel[0].id, user.id, message.replace("\"", "'"), message_id);
await setHasReplies(connection, message_id, true);
const new_message_id = sent_message.insertId; const new_message_id = sent_message.insertId;
for (const word of message.split(' ')) { for (const word of message.split(' ')) {

View file

@ -338,15 +338,11 @@ function deleteChannelMessages(connection, channel_id) {
function getMessages(connection, channel_id, limit) { function getMessages(connection, channel_id, limit) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
connection.query( connection.query(
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
FROM messages FROM messages
JOIN users ON messages.user_id = users.id JOIN users ON messages.user_id = users.id
JOIN channels ON messages.channel_id = channels.id JOIN channels ON messages.channel_id = channels.id
LEFT JOIN mentions ON messages.id = mentions.message_id WHERE channel_id = ? AND reply_to_id IS NULL
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
LEFT JOIN attachments ON messages.id = attachments.message_id
WHERE messages.channel_id = ? AND messages.reply_to_id IS NULL
GROUP BY messages.id
ORDER BY date DESC ORDER BY date DESC
LIMIT ?`, LIMIT ?`,
[channel_id, limit], [channel_id, limit],
@ -363,15 +359,11 @@ function getMessages(connection, channel_id, limit) {
function getMessage(connection, message_id) { function getMessage(connection, message_id) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
connection.query( connection.query(
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
FROM messages FROM messages
JOIN users ON messages.user_id = users.id JOIN users ON messages.user_id = users.id
JOIN channels ON messages.channel_id = channels.id JOIN channels ON messages.channel_id = channels.id
LEFT JOIN mentions ON messages.id = mentions.message_id WHERE messages.id = ?`,
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
LEFT JOIN attachments ON messages.id = attachments.message_id
WHERE messages.id = ?
GROUP BY messages.id`,
[message_id], [message_id],
(error, result) => { (error, result) => {
if (error) { if (error) {
@ -386,16 +378,11 @@ function getMessage(connection, message_id) {
function getLastMessages(connection) { function getLastMessages(connection) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
connection.query( connection.query(
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
FROM messages FROM messages
JOIN users ON messages.user_id = users.id JOIN users ON messages.user_id = users.id
JOIN channels ON messages.channel_id = channels.id JOIN channels ON messages.channel_id = channels.id
LEFT JOIN mentions ON messages.id = mentions.message_id ORDER BY date DESC LIMIT 5`,
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
LEFT JOIN attachments ON messages.id = attachments.message_id
GROUP BY messages.id
ORDER BY date DESC
LIMIT 5`,
(error, result) => { (error, result) => {
if (error) { if (error) {
reject(new Error(error)); reject(new Error(error));
@ -409,17 +396,12 @@ function getLastMessages(connection) {
function getUserLastMessages(connection, username) { function getUserLastMessages(connection, username) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
connection.query( connection.query(
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
FROM messages FROM messages
JOIN users ON messages.user_id = users.id JOIN users ON messages.user_id = users.id
JOIN channels ON messages.channel_id = channels.id JOIN channels ON messages.channel_id = channels.id
LEFT JOIN mentions ON messages.id = mentions.message_id
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
LEFT JOIN attachments ON messages.id = attachments.message_id
WHERE username = ? WHERE username = ?
GROUP BY messages.id ORDER BY date DESC LIMIT 5`,
ORDER BY date DESC
LIMIT 5`,
[username], [username],
(error, result) => { (error, result) => {
if (error) { if (error) {
@ -434,16 +416,11 @@ function getUserLastMessages(connection, username) {
function getMessageReplies(connection, message_id) { function getMessageReplies(connection, message_id) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
connection.query( connection.query(
`SELECT messages.id, messages.user_id, username, messages.content, messages.date, channels.name AS channel_name, (mentions.id IS NOT NULL) as has_mentions, (reply.id IS NOT NULL) as has_replies, (attachments.id IS NOT NULL) as has_attachments `SELECT messages.id, user_id, username, content, date, channels.name AS channel_name, has_replies
FROM messages FROM messages
JOIN users ON messages.user_id = users.id JOIN users ON messages.user_id = users.id
JOIN channels ON messages.channel_id = channels.id JOIN channels ON messages.channel_id = channels.id
LEFT JOIN mentions ON messages.id = mentions.message_id WHERE reply_to_id = ?`,
LEFT JOIN messages as reply ON messages.id = reply.reply_to_id
LEFT JOIN attachments ON messages.id = attachments.message_id
WHERE messages.reply_to_id = ?
GROUP BY messages.id
ORDER BY date DESC`,
[message_id], [message_id],
(error, result) => { (error, result) => {
if (error) { if (error) {
@ -455,6 +432,21 @@ function getMessageReplies(connection, message_id) {
}); });
} }
function setHasReplies(connection, message_id, has_replies) {
return new Promise((resolve, reject) => {
connection.query(
`UPDATE messages SET has_replies = ? WHERE id = ?`,
[has_replies, message_id],
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
// +---------------------------+ // +---------------------------+
// | Mentions | // | Mentions |
// +---------------------------+ // +---------------------------+
@ -584,54 +576,6 @@ function searchEmojis(connection, search) {
}); });
} }
// +---------------------------+
// | Attachemnts |
// +---------------------------+
function addAttachment(connection, message_id, file_name) {
return new Promise((resolve, reject) => {
connection.query(
`INSERT INTO attachments (message_id, file_name) VALUES (?, ?)`,
[message_id, file_name],
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
function deleteUnusedAttachments(connection) {
return new Promise((resolve, reject) => {
connection.query(
`DELETE FROM attachments WHERE message_id IS NULL`,
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
function getMessageAttachments(connection, message_id) {
return new Promise((resolve, reject) => {
connection.query(
`SELECT * FROM attachments WHERE message_id = ?`,
[message_id],
(error, result) => {
if (error) {
reject(new Error(error));
}
resolve(result);
}
);
});
}
module.exports = { module.exports = {
getConnection, getConnection,
@ -662,6 +606,7 @@ module.exports = {
getUserLastMessages, getUserLastMessages,
getLastMessages, getLastMessages,
getMessageReplies, getMessageReplies,
setHasReplies,
addMention, addMention,
getMentions, getMentions,

View file

@ -64,7 +64,7 @@ export default function CreateEmoji() {
value={name} value={name}
onChange={(e) => setName(e.target.value)} onChange={(e) => setName(e.target.value)}
/> />
<input type="file" name="emoji" id="emoji" accept="image/*"/> <input type="file" name="emoji" id="emoji" />
<button type="submit" disabled={!/^[a-zA-Z0-9-_]+$/.test(name)}> <button type="submit" disabled={!/^[a-zA-Z0-9-_]+$/.test(name)}>
Create Create
</button> </button>

View file

@ -106,7 +106,7 @@ export default function EditProfile() {
<div className="forum-section"> <div className="forum-section">
<h2>Edit Profile Picture</h2> <h2>Edit Profile Picture</h2>
<form> <form>
<input type="file" name="pfp" id="pfp" accept="image/*" /> <input type="file" name="pfp" id="pfp" />
<button onClick={uploadPfp}>Save</button> <button onClick={uploadPfp}>Save</button>
<button onClick={deletePfp}>Delete</button> <button onClick={deletePfp}>Delete</button>
</form> </form>