diff --git a/back/api/auth.js b/back/api/auth.js index 59bb84b..d1fd1eb 100644 --- a/back/api/auth.js +++ b/back/api/auth.js @@ -50,6 +50,12 @@ router.post('/register', async (req, res) => { const hash = sha256(password); await addUser(connection, username, hash); connection.end(); + + req.sockets.emit({ + type: 'new_user', + username: username, + }); + res.send({ message: 'User added' }); }); diff --git a/back/api/users.js b/back/api/users.js index 6d6450a..8711040 100644 --- a/back/api/users.js +++ b/back/api/users.js @@ -1,8 +1,16 @@ const express = require('express'); -const { getConnection, getUserByUsername, getUserLastMessages, getMentions } = require('../libs/mysql'); +const { getConnection, getUsers, getUserByUsername, getUserLastMessages, getMentions, deleteUser, deleteUserMessages, deleteUserMentions } = require('../libs/mysql'); +const { checkAuth } = require("../libs/middlewares") const router = express.Router(); +router.get('/', async (req, res) => { + const connection = await getConnection(); + const users = await getUsers(connection); + connection.end(); + res.send(users); +}); + router.get('/:username', async (req, res) => { const username = req.params.username; const connection = await getConnection(); @@ -33,4 +41,37 @@ router.get('/:username/lastmessages', async (req, res) => { res.send(messages); }); +router.use("/:username/delete", checkAuth); +router.post('/:username/delete', async (req, res) => { + const username = req.params.username; + const user = req.user; + + const connection = await getConnection(); + + const userToDelete = await getUserByUsername(connection, username); + + if (!userToDelete[0]) { + connection.end(); + return res.status(400).send({ error: 'No user found' }); + } + + if (user.admin !== 1) { + connection.end(); + return res.status(401).send({ error: 'Unauthorized' }); + } + + await deleteUserMentions(connection, userToDelete[0].id); + await deleteUserMessages(connection, userToDelete[0].id); + await deleteUser(connection, userToDelete[0].id); + + connection.end(); + + req.sockets.emit({ + type: 'delete_user', + user_id: userToDelete[0].id, + }); + + res.send({ message: 'User deleted' }); +}); + module.exports = router; \ No newline at end of file diff --git a/back/libs/mysql.js b/back/libs/mysql.js index 7f8a29d..d46d458 100644 --- a/back/libs/mysql.js +++ b/back/libs/mysql.js @@ -9,6 +9,20 @@ function getConnection() { }); } +function getUsers(connection) { + return new Promise((resolve, reject) => { + connection.query( + `SELECT id, username, admin FROM users`, + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + function getUser(connection, id) { return new Promise((resolve, reject) => { connection.query( @@ -89,6 +103,21 @@ function getUserLastMessages(connection, username) { }); } +function deleteUser(connection, id) { + return new Promise((resolve, reject) => { + connection.query( + `DELETE FROM users WHERE id = ?`, + [id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +}; + function getChannels(connection) { return new Promise((resolve, reject) => { connection.query( @@ -310,6 +339,21 @@ function deleteChannelMessages(connection, channel_id) { }); } +function deleteUserMessages(connection, user_id) { + return new Promise((resolve, reject) => { + connection.query( + `DELETE FROM messages WHERE user_id = ?`, + [user_id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + function addMention(connection, message_id, user_id) { return new Promise((resolve, reject) => { connection.query( @@ -373,12 +417,29 @@ function deleteChannelMentions(connection, channel_id) { }); } +function deleteUserMentions(connection, user_id) { + return new Promise((resolve, reject) => { + connection.query( + `DELETE FROM mentions WHERE user_id = ?`, + [user_id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + module.exports = { + getUsers, getConnection, getUser, searchUser, getUserByUsername, addUser, + deleteUser, getUserLastMessages, getChannels, getActiveChannels, @@ -393,8 +454,10 @@ module.exports = { addMessage, deleteMessage, deleteChannelMessages, + deleteUserMessages, addMention, getMentions, deleMentions, + deleteUserMentions, deleteChannelMentions, }; diff --git a/front/src/components/TopBar.tsx b/front/src/components/TopBar.tsx index 9255162..ac57e1a 100644 --- a/front/src/components/TopBar.tsx +++ b/front/src/components/TopBar.tsx @@ -9,6 +9,7 @@ export default function TopBar({ user }: { user: User | undefined }) {
Loading...
+