From 7781e6b8a1af5bf5d47c8a46a9a6664a9991383b Mon Sep 17 00:00:00 2001 From: Lukian Date: Fri, 18 Apr 2025 15:42:55 +0200 Subject: [PATCH] add: added pfps and user profile modification --- back/.gitignore | 3 +- back/api/auth.js | 79 ++++++++++++- back/api/channels.js | 9 +- back/api/users.js | 23 +++- back/images/default-pfp.png | Bin 0 -> 96409 bytes back/libs/mysql.js | 48 ++++++++ back/package.json | 1 + docker-compose.yml | 2 + front/src/components/MessageComponent.tsx | 30 ++--- front/src/components/TopBar.tsx | 1 + front/src/main.tsx | 2 + front/src/pages/EditProfile.tsx | 134 ++++++++++++++++++++++ front/src/pages/UserPage.tsx | 10 +- front/src/pages/UsersPage.tsx | 2 +- front/src/styles/EditProfile.css | 44 +++++++ front/src/styles/MessageComponent.css | 17 +++ front/src/styles/TopBar.css | 6 + front/src/styles/UserPage.css | 12 ++ front/src/styles/UsersPage.css | 2 +- front/src/types.tsx | 15 +-- 20 files changed, 404 insertions(+), 36 deletions(-) create mode 100644 back/images/default-pfp.png create mode 100644 front/src/pages/EditProfile.tsx create mode 100644 front/src/styles/EditProfile.css diff --git a/back/.gitignore b/back/.gitignore index 9c90b3b..f88ca2a 100644 --- a/back/.gitignore +++ b/back/.gitignore @@ -1,3 +1,4 @@ /node_modules .env -package-lock.json \ No newline at end of file +package-lock.json +data \ No newline at end of file diff --git a/back/api/auth.js b/back/api/auth.js index d1fd1eb..04aae8a 100644 --- a/back/api/auth.js +++ b/back/api/auth.js @@ -1,8 +1,16 @@ const express = require('express'); const sha256 = require("sha256"); const jwt = require('jsonwebtoken'); -const { getConnection, getUserByUsername, addUser, getUser } = require('../libs/mysql'); +const { getConnection, getUserByUsername, addUser, setUserPfp, setUserUsername, setUserPassword } = require('../libs/mysql'); const { checkAuth } = require('../libs/middlewares'); +const multer = require('multer') +const fs = require('node:fs'); + +const upload = multer({ dest: 'data/pfps/' }) +upload.limits = { + fileSize: 1024 * 1024 * 5, + files: 1, +}; const router = express.Router(); @@ -59,10 +67,75 @@ router.post('/register', async (req, res) => { res.send({ message: 'User added' }); }); -router.use('/me', checkAuth); -router.post('/me', async (req, res) => { +router.post('/me', checkAuth, async (req, res) => { const user = req.user; res.send({ id: user.id, username: user.username, admin: user.admin }); }); +router.post('/me/uploadpfp', upload.single('pfp'), checkAuth, async (req, res) => { + const fileName = req.file.filename; + const user = req.user; + + if (user.pfp && fs.existsSync(`data/pfps/${user.pfp}`)) { + fs.unlinkSync(`data/pfps/${user.pfp}`); + } + + const connection = await getConnection(); + await setUserPfp(connection, user.id, fileName); + connection.end(); + res.send({ message: 'Profile picture uploaded.' }); +}); + +router.post('/me/deletepfp', checkAuth, async (req, res) => { + const user = req.user; + + if (user.pfp && fs.existsSync(`data/pfps/${user.pfp}`)) { + fs.unlinkSync(`data/pfps/${user.pfp}`); + } + + const connection = await getConnection(); + await setUserPfp(connection, user.id, null); + connection.end(); + res.send({ message: 'Profile picture deleted.' }); +}); + +router.post('/me/setusername', checkAuth, async (req, res) => { + const { username } = req.body; + const user = req.user; + + if (!username) { + return res.status(400).send({ error: 'Invalid username' }); + } + + if (!/^[a-zA-Z0-9-_]+$/.test(username)) { + return res.status(400).send({ error: 'Invalid username' }); + } + + const connection = await getConnection(); + const userExists = await getUserByUsername(connection, username); + if (userExists[0]) { + connection.end(); + return res.status(401).send({ error: 'Username already exists' }); + } + + await setUserUsername(connection, user.id, username); + connection.end(); + res.send({ message: 'Username changed.' }); +}); + + +router.post('/me/setpassword', checkAuth, async (req, res) => { + const { oldPassword, password } = req.body; + const user = req.user; + + if (!password || !oldPassword || sha256(oldPassword) !== user.password) { + return res.status(400).send({ error: 'Invalid password' }); + } + + const connection = await getConnection(); + await setUserPassword(connection, user.id, sha256(password)); + connection.end(); + res.send({ message: 'Password changed.' }); +}); + module.exports = router; \ No newline at end of file diff --git a/back/api/channels.js b/back/api/channels.js index 6d6189d..53d1393 100644 --- a/back/api/channels.js +++ b/back/api/channels.js @@ -123,8 +123,7 @@ router.get('/:name/messages', async (req, res) => { res.send(messages); }); -router.use('/:name/messages/send', checkAuth); -router.post('/:name/messages/send', async (req, res) => { +router.post('/:name/messages/send', checkAuth, async (req, res) => { const { message } = req.body; const name = req.params.name; const user = req.user; @@ -165,8 +164,7 @@ router.post('/:name/messages/send', async (req, res) => { res.send({ message: 'Message sent' }); }); -router.use('/:name/messages/delete', checkAuth); -router.post('/:name/messages/delete', async (req, res) => { +router.post('/:name/messages/delete', checkAuth, async (req, res) => { const { message_id } = req.body; const name = req.params.name; const user = req.user; @@ -207,8 +205,7 @@ router.post('/:name/messages/delete', async (req, res) => { res.send({ message: 'Message deleted' }); }); -router.use('/add', checkAuth); -router.post('/add', async (req, res) => { +router.post('/add', checkAuth, async (req, res) => { const { name, description } = req.body; const user = req.user; diff --git a/back/api/users.js b/back/api/users.js index 8711040..1dadcf8 100644 --- a/back/api/users.js +++ b/back/api/users.js @@ -1,6 +1,7 @@ const express = require('express'); const { getConnection, getUsers, getUserByUsername, getUserLastMessages, getMentions, deleteUser, deleteUserMessages, deleteUserMentions } = require('../libs/mysql'); const { checkAuth } = require("../libs/middlewares") +const path = require('path'); const router = express.Router(); @@ -41,8 +42,26 @@ router.get('/:username/lastmessages', async (req, res) => { res.send(messages); }); -router.use("/:username/delete", checkAuth); -router.post('/:username/delete', async (req, res) => { +router.get('/:username/pfp', async (req, res) => { + const username = req.params.username; + const connection = await getConnection(); + const user = await getUserByUsername(connection, username); + connection.end(); + + if (!user[0]) { + return res.status(400).send({ error: 'No user found' }); + } + + const pfp = user[0].pfp; + + if (!pfp) { + return res.sendFile(path.join(__dirname, `../images/default-pfp.png`), { headers: { 'Content-Type': 'image' } }); + } + + res.sendFile(path.join(__dirname, `../data/pfps/${pfp}`), { headers: { 'Content-Type': 'image' } }); +}); + +router.post('/:username/delete', checkAuth, async (req, res) => { const username = req.params.username; const user = req.user; diff --git a/back/images/default-pfp.png b/back/images/default-pfp.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c96e67a428136cce067fc1c7c5adec721534d2 GIT binary patch literal 96409 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≀NQFeL>!>zoRcSXIP{BykDCSKqu8zY2W8=(rG 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 { + connection.query( + `UPDATE users SET pfp = ? WHERE id = ?`, + [pfp, id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + +function setUserUsername(connection, id, username) { + return new Promise((resolve, reject) => { + connection.query( + `UPDATE users SET username = ? WHERE id = ?`, + [username, id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + +function setUserPassword(connection, id, password) { + return new Promise((resolve, reject) => { + connection.query( + `UPDATE users SET password = ? WHERE id = ?`, + [password, id], // Use parameterized query + (error, result) => { + if (error) { + reject(new Error(error)); + } + resolve(result); + } + ); + }); +} + function getChannels(connection) { return new Promise((resolve, reject) => { connection.query( @@ -440,6 +485,9 @@ module.exports = { getUserByUsername, addUser, deleteUser, + setUserPfp, + setUserUsername, + setUserPassword, getUserLastMessages, getChannels, getActiveChannels, diff --git a/back/package.json b/back/package.json index 9f40754..de04f80 100644 --- a/back/package.json +++ b/back/package.json @@ -20,6 +20,7 @@ "fs": "^0.0.1-security", "https": "^1.0.0", "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.2", "mysql": "^2.18.1", "sha256": "^0.2.0" } diff --git a/docker-compose.yml b/docker-compose.yml index efa7e27..c378db5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,8 @@ services: - "traefik.http.services.forum.loadbalancer.server.port=3000" networks: - traefik + volumes: + - ./data:/app/data networks: traefik: diff --git a/front/src/components/MessageComponent.tsx b/front/src/components/MessageComponent.tsx index bce2ee6..32ef3e4 100644 --- a/front/src/components/MessageComponent.tsx +++ b/front/src/components/MessageComponent.tsx @@ -13,20 +13,24 @@ export default function MessageComponent({ message, user, channel, deleteMessage return (
- {message.username}:{" "} - {message.content.split(" ").map((word, index) => { - if (word.startsWith("@")) { - const mention = message.mentions.find((mention) => `@${mention.username}` === word); - if (mention) { - return {word} ; - } - } else if (word.startsWith("https://") || word.startsWith("http://")) { - return {word} - } - return {word} ; - })} + +
+ {message.username} {new Date(message.date * 1000).toLocaleString()} +
+ {message.content.split(" ").map((word, index) => { + if (word.startsWith("@")) { + const mention = message.mentions.find((mention) => `@${mention.username}` === word); + if (mention) { + return {word} ; + } + } else if (word.startsWith("https://") || word.startsWith("http://")) { + return {word} + } + return {word} ; + })} +
+
-

{new Date(message.date * 1000).toLocaleString()}

{message.content.toLocaleLowerCase().includes("gros cochon") && ( Gros cochon diff --git a/front/src/components/TopBar.tsx b/front/src/components/TopBar.tsx index ac57e1a..6a1a4d7 100644 --- a/front/src/components/TopBar.tsx +++ b/front/src/components/TopBar.tsx @@ -27,6 +27,7 @@ export default function TopBar({ user }: { user: User | undefined }) { }}> Logout + pfp
) : (
diff --git a/front/src/main.tsx b/front/src/main.tsx index 360bf70..fa3ccba 100644 --- a/front/src/main.tsx +++ b/front/src/main.tsx @@ -10,6 +10,7 @@ import Register from './pages/Register' import CreateChannel from './pages/CreateChannel' import ChannelsPage from './pages/ChannelsPage' import UsersPage from './pages/UsersPage' +import EditProfile from './pages/EditProfile' const socket = new WebSocket("/api/ws"); @@ -33,6 +34,7 @@ createRoot(document.getElementById('root')!).render( } /> } /> } /> + } /> ) diff --git a/front/src/pages/EditProfile.tsx b/front/src/pages/EditProfile.tsx new file mode 100644 index 0000000..f5f123b --- /dev/null +++ b/front/src/pages/EditProfile.tsx @@ -0,0 +1,134 @@ +import { useState, useEffect } from "react" +import { User } from "../types" +import { Link } from "react-router-dom" +import axios from "axios" +import TopBar from "../components/TopBar" + +import "../styles/EditProfile.css" + +export default function EditProfile() { + const [token, setToken] = useState(""); + const [user, setUser] = useState(); + + useEffect(() => { + const localToken = localStorage.getItem("token"); + if (localToken) { + setToken(localToken) + + axios + .post("/api/auth/me", { token: localToken }) + .then((res) => { + setUser(res.data); + }); + } + }, []); + + function uploadPfp(e: React.FormEvent) { + e.preventDefault(); + + const formData = new FormData(); + const fileInput = document.getElementById("pfp") as HTMLInputElement; + if (fileInput.files) { + formData.append("pfp", fileInput.files[0]); + } + formData.append("token", token); + axios + .post("/api/auth/me/uploadpfp", formData, { + headers: { + "Content-Type": "multipart/form-data", + }, + }) + .then(() => { + window.location.reload(); + }) + .catch((err) => { + console.error(err.response.data); + }); + } + + function deletePfp(e: React.FormEvent) { + e.preventDefault(); + axios + .post("/api/auth/me/deletepfp", { token: token }) + .then(() => { + window.location.reload(); + }) + .catch((err) => { + console.error(err.response.data); + }); + } + + function editUsername(e: React.FormEvent) { + e.preventDefault(); + const newUsername = (document.getElementById("username") as HTMLInputElement).value; + axios + .post("/api/auth/me/setusername", { token: token, username: newUsername }) + .then(() => { + window.location.reload(); + }) + .catch((err) => { + console.error(err.response.data); + }); + } + + function editPassword(e: React.FormEvent) { + e.preventDefault(); + const oldPassword = (document.getElementById("old-password") as HTMLInputElement).value; + const newPassword = (document.getElementById("password") as HTMLInputElement).value; + const confirmPassword = (document.getElementById("confirm-password") as HTMLInputElement).value; + if (newPassword !== confirmPassword) { + alert("Passwords do not match"); + return; + } + axios + .post("/api/auth/me/setpassword", { token: token, oldPassword: oldPassword, password: newPassword }) + .then(() => { + window.location.reload(); + }) + .catch((err) => { + console.error(err.response.data); + }); + } + + if (!user) { + return ( +
+ +
+

Please log in to edit your profile

+ Login +
+
+ ) + } + + return ( +
+ +
+

Edit Profile Picture

+
+ + + +
+
+
+

Edit Username

+
+ + +
+
+
+

Edit Password

+
+ + + + +
+
+
+ ) +} \ No newline at end of file diff --git a/front/src/pages/UserPage.tsx b/front/src/pages/UserPage.tsx index e80b0a7..9720937 100644 --- a/front/src/pages/UserPage.tsx +++ b/front/src/pages/UserPage.tsx @@ -1,4 +1,4 @@ -import { useParams } from "react-router-dom"; +import { Link, useParams } from "react-router-dom"; import { useEffect, useState } from "react"; import { User, Messages } from "../types"; import TopBar from "../components/TopBar"; @@ -75,8 +75,14 @@ export default function UserPage({socket}: {socket: WebSocket}) {
-

{pageUser.username}

+
+ pfp +

{pageUser.username}

+
{pageUser.admin ?

Admin

:

User

} + {pageUser.id === user?.id && ( + Edit profile + )}

Last messages

diff --git a/front/src/pages/UsersPage.tsx b/front/src/pages/UsersPage.tsx index 9279357..1a3df99 100644 --- a/front/src/pages/UsersPage.tsx +++ b/front/src/pages/UsersPage.tsx @@ -74,7 +74,7 @@ export default function UsersPage({socket}: {socket: WebSocket}) { return (
-
+

Users