From 18a1095cf09788b8f16df061366963aa8a2f3e4f Mon Sep 17 00:00:00 2001 From: Nikolai Petukhov Date: Thu, 10 Oct 2024 12:02:52 +0300 Subject: [PATCH] enterfront --- .../epja-2024-1/enterfront/auth/index.js | 77 ++ .../epja-2024-1/enterfront/auth/users.json | 52 ++ .../epja-2024-1/enterfront/change/index.js | 69 ++ .../epja-2024-1/enterfront/chat/chats.json | 662 ++++++++++++++++++ .../epja-2024-1/enterfront/chat/index.js | 91 +++ server/routers/epja-2024-1/enterfront/db.js | 74 ++ .../routers/epja-2024-1/enterfront/index.js | 17 + .../enterfront/middlewares/delay.js | 5 + .../enterfront/middlewares/verify.js | 23 + server/routers/epja-2024-1/example/index.js | 26 + server/routers/epja-2024-1/example/news.json | 25 + server/routers/epja-2024-1/index.js | 9 + 12 files changed, 1130 insertions(+) create mode 100644 server/routers/epja-2024-1/enterfront/auth/index.js create mode 100644 server/routers/epja-2024-1/enterfront/auth/users.json create mode 100644 server/routers/epja-2024-1/enterfront/change/index.js create mode 100644 server/routers/epja-2024-1/enterfront/chat/chats.json create mode 100644 server/routers/epja-2024-1/enterfront/chat/index.js create mode 100644 server/routers/epja-2024-1/enterfront/db.js create mode 100644 server/routers/epja-2024-1/enterfront/index.js create mode 100644 server/routers/epja-2024-1/enterfront/middlewares/delay.js create mode 100644 server/routers/epja-2024-1/enterfront/middlewares/verify.js create mode 100644 server/routers/epja-2024-1/example/index.js create mode 100644 server/routers/epja-2024-1/example/news.json create mode 100644 server/routers/epja-2024-1/index.js diff --git a/server/routers/epja-2024-1/enterfront/auth/index.js b/server/routers/epja-2024-1/enterfront/auth/index.js new file mode 100644 index 0000000..ea32017 --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/auth/index.js @@ -0,0 +1,77 @@ +const authRouter = require('express').Router(); + +// For creating tokens +const jwt = require('jsonwebtoken'); + +require('dotenv').config(); +const TOKEN_KEY = process.env.TOKEN_KEY; + + +module.exports = authRouter; + +const { addUserToDB, getUserFromDB } = require('../db'); + + +// Get a user by its id +authRouter.get('/:id', (req, res) => { + const user = getUserFromDB(req.params.id); + console.log("Request get in /auth:", req.params.id); + + if (user) { + res.status(200).send({user}); + } else { + res.status(404).send({message: 'User was not found'}); + } +}) + +// For login (authorization) +authRouter.post('/login', (req, res) => { + const { name, password } = req.body; + console.log("Request login in /auth:", name); + + const user = getUserFromDB(name); + + // Invalid identification + if (!user) { + res.status(401).send({message: 'Invalid credentials (id)'}); + return; + } + + // Invalid authentication + if (!password || password !== user.password) { + res.status(401).send({message: 'Invalid credentials (password)'}); + return; + } + + // Now, authorization + const token = jwt.sign({id: name}, TOKEN_KEY, { + expiresIn: '1h' + }) + + res.status(200).send({token}); +}) + + +authRouter.post('/reg', (req, res) => { + const { name, password, nickname } = req.body; + console.log("Request reg in /auth:", name); + + const user = getUserFromDB(name); + + // Invalid identification + if (user) { + res.status(409).send({message: 'Such id already exists'}); + return; + } + + if (!name || !password || !nickname) { + res.status(401).send({message: 'Empty or invalid fields'}); + return; + } + + // Add to 'DB' + const newUser = {id: name, password: password, nickname: nickname}; + addUserToDB(newUser) + + res.status(200).send({user: newUser}); +}) diff --git a/server/routers/epja-2024-1/enterfront/auth/users.json b/server/routers/epja-2024-1/enterfront/auth/users.json new file mode 100644 index 0000000..7e8c98e --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/auth/users.json @@ -0,0 +1,52 @@ +[ + { + "nickname": "Alice Johnson", + "password": "1234", + "id": "alice" + }, + { + "nickname": "Bob Smith", + "password": "1234", + "id": "bobsm" + }, + { + "nickname": "Charlie Brown", + "password": "1234", + "id": "charl" + }, + { + "nickname": "David Clark", + "password": "1234", + "id": "david" + }, + { + "nickname": "Eve Adams", + "password": "1234", + "id": "evead" + }, + { + "nickname": "Frank Wright", + "password": "1234", + "id": "frank" + }, + { + "nickname": "Grace Lee", + "password": "1234", + "id": "grace" + }, + { + "nickname": "Hannah Scott", + "password": "1234", + "id": "hanna" + }, + { + "nickname": "Ian Davis", + "password": "1234", + "id": "ianda" + }, + { + "nickname": "Jill Thompson", + "password": "1234", + "id": "jillt" + } +] diff --git a/server/routers/epja-2024-1/enterfront/change/index.js b/server/routers/epja-2024-1/enterfront/change/index.js new file mode 100644 index 0000000..c5e0837 --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/change/index.js @@ -0,0 +1,69 @@ +const changeRouter = require('express').Router(); + +module.exports = changeRouter; + +const { users, getUserFromDB, deleteUserFromDB, addUserToDB } = require('../db'); + +const jwt = require("jsonwebtoken"); + + +changeRouter.post('/nickname', (req, res) => { + const { id, newNickname } = req.body; + console.log("Request nickname in /change:", id); + + const user = getUserFromDB(id); + + // Invalid identification + if (!user) { + res.status(401).send({message: 'Invalid credentials (id)'}); + return; + } + + const updatedUser = { + "nickname": newNickname, + "password": user.password, + "id": user.id + }; + + // Delete the old one + deleteUserFromDB(id) + + // Insert updated + addUserToDB(updatedUser); + + res.status(200).send({}); +}); + +changeRouter.post('/password', (req, res) => { + const { id, newPassword } = req.body; + console.log("Request password in /change:", id); + + const user = getUserFromDB(id); + + // Invalid identification + if (!user) { + res.status(401).send({message: 'Invalid credentials (id)'}); + return; + } + + // Delete the old one + deleteUserFromDB(id) + + // Insert updated + const updatedUser = { + "nickname": user.nickname, + "password": newPassword, + "id": user.id + }; + addUserToDB(updatedUser); + + res.status(200).send({}); +}); + +changeRouter.delete('/:id', (req, res) => { + const { id } = req.params; + console.log("Request delete in /change:", id); + + deleteUserFromDB(id); +}); + diff --git a/server/routers/epja-2024-1/enterfront/chat/chats.json b/server/routers/epja-2024-1/enterfront/chat/chats.json new file mode 100644 index 0000000..4e9d173 --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/chat/chats.json @@ -0,0 +1,662 @@ +[ + { + "id1": "alice", + "id2": "bobsm", + "messages": [ + { + "data": "Hello Bob!", + "senderId": "alice", + "recipientId": "bobsm", + "timestamp": "09.10.2024 07:00:00" + }, + { + "data": "Hey Alice, how are you?", + "senderId": "bobsm", + "recipientId": "alice", + "timestamp": "09.10.2024 07:05:00" + }, + { + "data": "I'm good, thanks for asking.", + "senderId": "alice", + "recipientId": "bobsm", + "timestamp": "09.10.2024 07:10:00" + }, + { + "data": "Glad to hear!", + "senderId": "bobsm", + "recipientId": "alice", + "timestamp": "09.10.2024 07:15:00" + } + ] + }, + { + "id1": "alice", + "id2": "charl", + "messages": [ + { + "data": "How's the project going?", + "senderId": "alice", + "recipientId": "charl", + "timestamp": "09.10.2024 07:20:00" + }, + { + "data": "It's coming along, almost done!", + "senderId": "charl", + "recipientId": "alice", + "timestamp": "09.10.2024 07:25:00" + }, + { + "data": "That's great to hear!", + "senderId": "alice", + "recipientId": "charl", + "timestamp": "09.10.2024 07:30:00" + }, + { + "data": "Thanks for checking in.", + "senderId": "charl", + "recipientId": "alice", + "timestamp": "09.10.2024 07:35:00" + } + ] + }, + { + "id1": "alice", + "id2": "david", + "messages": [ + { + "data": "Did you get the files?", + "senderId": "david", + "recipientId": "alice", + "timestamp": "09.10.2024 07:40:00" + }, + { + "data": "Yes, I did. Thank you!", + "senderId": "alice", + "recipientId": "david", + "timestamp": "09.10.2024 07:45:00" + }, + { + "data": "You're welcome.", + "senderId": "david", + "recipientId": "alice", + "timestamp": "09.10.2024 07:50:00" + }, + { + "data": "Let me know if you need anything else.", + "senderId": "alice", + "recipientId": "david", + "timestamp": "09.10.2024 07:55:00" + } + ] + }, + { + "id1": "alice", + "id2": "frank", + "messages": [ + { + "data": "Can you review this document for me?", + "senderId": "alice", + "recipientId": "frank", + "timestamp": "09.10.2024 08:20:00" + }, + { + "data": "Sure, I'll take a look.", + "senderId": "frank", + "recipientId": "alice", + "timestamp": "09.10.2024 08:25:00" + }, + { + "data": "Thanks, much appreciated!", + "senderId": "alice", + "recipientId": "frank", + "timestamp": "09.10.2024 08:30:00" + }, + { + "data": "No problem.", + "senderId": "frank", + "recipientId": "alice", + "timestamp": "09.10.2024 08:35:00" + } + ] + }, + { + "id1": "alice", + "id2": "grace", + "messages": [ + { + "data": "Hey Grace, let's meet up for coffee!", + "senderId": "alice", + "recipientId": "grace", + "timestamp": "09.10.2024 08:40:00" + }, + { + "data": "Sounds good, when are you free?", + "senderId": "grace", + "recipientId": "alice", + "timestamp": "09.10.2024 08:45:00" + }, + { + "data": "How about tomorrow afternoon?", + "senderId": "alice", + "recipientId": "grace", + "timestamp": "09.10.2024 08:50:00" + }, + { + "data": "Works for me!", + "senderId": "grace", + "recipientId": "alice", + "timestamp": "09.10.2024 08:55:00" + } + ] + }, + { + "id1": "alice", + "id2": "hanna", + "messages": [ + { + "data": "Hannah, do you have a moment?", + "senderId": "alice", + "recipientId": "hanna", + "timestamp": "09.10.2024 09:00:00" + }, + { + "data": "Sure, what's up?", + "senderId": "hanna", + "recipientId": "alice", + "timestamp": "09.10.2024 09:05:00" + }, + { + "data": "Just wanted to check on the report.", + "senderId": "alice", + "recipientId": "hanna", + "timestamp": "09.10.2024 09:10:00" + }, + { + "data": "I'll send it soon.", + "senderId": "hanna", + "recipientId": "alice", + "timestamp": "09.10.2024 09:15:00" + } + ] + }, + { + "id1": "alice", + "id2": "ianda", + "messages": [ + { + "data": "Ian, have you completed the review?", + "senderId": "alice", + "recipientId": "ianda", + "timestamp": "09.10.2024 09:20:00" + }, + { + "data": "Yes, I sent my feedback.", + "senderId": "ianda", + "recipientId": "alice", + "timestamp": "09.10.2024 09:25:00" + }, + { + "data": "Thanks for that.", + "senderId": "alice", + "recipientId": "ianda", + "timestamp": "09.10.2024 09:30:00" + }, + { + "data": "Anytime!", + "senderId": "ianda", + "recipientId": "alice", + "timestamp": "09.10.2024 09:35:00" + } + ] + }, + { + "id1": "alice", + "id2": "jillt", + "messages": [ + { + "data": "Jill, let's schedule a catch-up meeting.", + "senderId": "alice", + "recipientId": "jillt", + "timestamp": "09.10.2024 09:40:00" + }, + { + "data": "Sounds good, when works for you?", + "senderId": "jillt", + "recipientId": "alice", + "timestamp": "09.10.2024 09:45:00" + }, + { + "data": "Tomorrow afternoon?", + "senderId": "alice", + "recipientId": "jillt", + "timestamp": "09.10.2024 09:50:00" + }, + { + "data": "That works for me!", + "senderId": "jillt", + "recipientId": "alice", + "timestamp": "09.10.2024 09:55:00" + } + ] + }, + { + "id1": "alice", + "id2": "evead", + "messages": [ + { + "data": "Eve, did you send the schedule?", + "senderId": "alice", + "recipientId": "evead", + "timestamp": "09.10.2024 10:00:00" + }, + { + "data": "Yes, just sent it.", + "senderId": "evead", + "recipientId": "alice", + "timestamp": "09.10.2024 10:05:00" + }, + { + "data": "Thanks, much appreciated!", + "senderId": "alice", + "recipientId": "evead", + "timestamp": "09.10.2024 10:10:00" + }, + { + "data": "No problem!", + "senderId": "evead", + "recipientId": "alice", + "timestamp": "09.10.2024 10:15:00" + } + ] + }, + { + "id1": "bobsm", + "id2": "charl", + "messages": [ + { + "data": "How's everything going?", + "senderId": "bobsm", + "recipientId": "charl", + "timestamp": "09.10.2024 10:20:00" + }, + { + "data": "Pretty good, how about you?", + "senderId": "charl", + "recipientId": "bobsm", + "timestamp": "09.10.2024 10:25:00" + }, + { + "data": "Can't complain!", + "senderId": "bobsm", + "recipientId": "charl", + "timestamp": "09.10.2024 10:30:00" + }, + { + "data": "Glad to hear that.", + "senderId": "charl", + "recipientId": "bobsm", + "timestamp": "09.10.2024 10:35:00" + } + ] + }, + { + "id1": "bobsm", + "id2": "david", + "messages": [ + { + "data": "Can you send the report?", + "senderId": "bobsm", + "recipientId": "david", + "timestamp": "09.10.2024 10:40:00" + }, + { + "data": "I'll send it in an hour.", + "senderId": "david", + "recipientId": "bobsm", + "timestamp": "09.10.2024 10:45:00" + }, + { + "data": "Perfect, thanks.", + "senderId": "bobsm", + "recipientId": "david", + "timestamp": "09.10.2024 10:50:00" + }, + { + "data": "No problem.", + "senderId": "david", + "recipientId": "bobsm", + "timestamp": "09.10.2024 10:55:00" + } + ] + }, + { + "id1": "charl", + "id2": "evead", + "messages": [ + { + "data": "Hey Eve, how's it going?", + "senderId": "charl", + "recipientId": "evead", + "timestamp": "09.10.2024 11:00:00" + }, + { + "data": "Good, how about you?", + "senderId": "evead", + "recipientId": "charl", + "timestamp": "09.10.2024 11:05:00" + }, + { + "data": "Can't complain!", + "senderId": "charl", + "recipientId": "evead", + "timestamp": "09.10.2024 11:10:00" + }, + { + "data": "Glad to hear.", + "senderId": "evead", + "recipientId": "charl", + "timestamp": "09.10.2024 11:15:00" + } + ] + }, + { + "id1": "charl", + "id2": "frank", + "messages": [ + { + "data": "Do you have time to talk today?", + "senderId": "charl", + "recipientId": "frank", + "timestamp": "09.10.2024 11:20:00" + }, + { + "data": "I have a meeting, but I can chat afterward.", + "senderId": "frank", + "recipientId": "charl", + "timestamp": "09.10.2024 11:25:00" + }, + { + "data": "Sounds good.", + "senderId": "charl", + "recipientId": "frank", + "timestamp": "09.10.2024 11:30:00" + }, + { + "data": "I'll message you after.", + "senderId": "frank", + "recipientId": "charl", + "timestamp": "09.10.2024 11:35:00" + } + ] + }, + { + "id1": "david", + "id2": "frank", + "messages": [ + { + "data": "Did you review the document?", + "senderId": "david", + "recipientId": "frank", + "timestamp": "09.10.2024 11:40:00" + }, + { + "data": "Yes, it's all good.", + "senderId": "frank", + "recipientId": "david", + "timestamp": "09.10.2024 11:45:00" + }, + { + "data": "Great, thanks for the quick turnaround!", + "senderId": "david", + "recipientId": "frank", + "timestamp": "09.10.2024 11:50:00" + }, + { + "data": "No worries!", + "senderId": "frank", + "recipientId": "david", + "timestamp": "09.10.2024 11:55:00" + } + ] + }, + { + "id1": "david", + "id2": "grace", + "messages": [ + { + "data": "Grace, can you send the updated schedule?", + "senderId": "david", + "recipientId": "grace", + "timestamp": "09.10.2024 12:00:00" + }, + { + "data": "Yes, I'll send it in a few minutes.", + "senderId": "grace", + "recipientId": "david", + "timestamp": "09.10.2024 12:05:00" + }, + { + "data": "Thanks, much appreciated!", + "senderId": "david", + "recipientId": "grace", + "timestamp": "09.10.2024 12:10:00" + }, + { + "data": "You're welcome!", + "senderId": "grace", + "recipientId": "david", + "timestamp": "09.10.2024 12:15:00" + } + ] + }, + { + "id1": "frank", + "id2": "grace", + "messages": [ + { + "data": "How are you today?", + "senderId": "frank", + "recipientId": "grace", + "timestamp": "09.10.2024 12:20:00" + }, + { + "data": "I'm doing well, thanks for asking.", + "senderId": "grace", + "recipientId": "frank", + "timestamp": "09.10.2024 12:25:00" + }, + { + "data": "Glad to hear that.", + "senderId": "frank", + "recipientId": "grace", + "timestamp": "09.10.2024 12:30:00" + }, + { + "data": "How about you?", + "senderId": "grace", + "recipientId": "frank", + "timestamp": "09.10.2024 12:35:00" + } + ] + }, + { + "id1": "frank", + "id2": "hanna", + "messages": [ + { + "data": "Did you attend the meeting?", + "senderId": "frank", + "recipientId": "hanna", + "timestamp": "09.10.2024 12:40:00" + }, + { + "data": "Yes, it was productive.", + "senderId": "hanna", + "recipientId": "frank", + "timestamp": "09.10.2024 12:45:00" + }, + { + "data": "Good to hear!", + "senderId": "frank", + "recipientId": "hanna", + "timestamp": "09.10.2024 12:50:00" + }, + { + "data": "Indeed, lots to follow up on.", + "senderId": "hanna", + "recipientId": "frank", + "timestamp": "09.10.2024 12:55:00" + } + ] + }, + { + "id1": "grace", + "id2": "hanna", + "messages": [ + { + "data": "Can we meet later today?", + "senderId": "grace", + "recipientId": "hanna", + "timestamp": "09.10.2024 01:00:00" + }, + { + "data": "Sure, what's a good time?", + "senderId": "hanna", + "recipientId": "grace", + "timestamp": "09.10.2024 01:05:00" + }, + { + "data": "How about 3?", + "senderId": "grace", + "recipientId": "hanna", + "timestamp": "09.10.2024 01:10:00" + }, + { + "data": "Works for me.", + "senderId": "hanna", + "recipientId": "grace", + "timestamp": "09.10.2024 01:15:00" + } + ] + }, + { + "id1": "grace", + "id2": "ianda", + "messages": [ + { + "data": "Ian, did you get the message I sent?", + "senderId": "grace", + "recipientId": "ianda", + "timestamp": "09.10.2024 01:20:00" + }, + { + "data": "Yes, I'll respond soon.", + "senderId": "ianda", + "recipientId": "grace", + "timestamp": "09.10.2024 01:25:00" + }, + { + "data": "Thanks, appreciate it!", + "senderId": "grace", + "recipientId": "ianda", + "timestamp": "09.10.2024 01:30:00" + }, + { + "data": "You're welcome!", + "senderId": "ianda", + "recipientId": "grace", + "timestamp": "09.10.2024 01:35:00" + } + ] + }, + { + "id1": "hanna", + "id2": "ianda", + "messages": [ + { + "data": "Ian, do you have a minute?", + "senderId": "hanna", + "recipientId": "ianda", + "timestamp": "09.10.2024 01:40:00" + }, + { + "data": "Yes, what do you need?", + "senderId": "ianda", + "recipientId": "hanna", + "timestamp": "09.10.2024 01:45:00" + }, + { + "data": "Just a quick update on the project.", + "senderId": "hanna", + "recipientId": "ianda", + "timestamp": "09.10.2024 01:50:00" + }, + { + "data": "I'll email you the details.", + "senderId": "ianda", + "recipientId": "hanna", + "timestamp": "09.10.2024 01:55:00" + } + ] + }, + { + "id1": "hanna", + "id2": "jillt", + "messages": [ + { + "data": "Jill, can we talk tomorrow?", + "senderId": "hanna", + "recipientId": "jillt", + "timestamp": "09.10.2024 02:00:00" + }, + { + "data": "Yes, I'm free after 2.", + "senderId": "jillt", + "recipientId": "hanna", + "timestamp": "09.10.2024 02:05:00" + }, + { + "data": "Perfect, see you then.", + "senderId": "hanna", + "recipientId": "jillt", + "timestamp": "09.10.2024 02:10:00" + }, + { + "data": "Looking forward to it.", + "senderId": "jillt", + "recipientId": "hanna", + "timestamp": "09.10.2024 02:15:00" + } + ] + }, + { + "id1": "ianda", + "id2": "jillt", + "messages": [ + { + "data": "Jill, I have the files you requested.", + "senderId": "ianda", + "recipientId": "jillt", + "timestamp": "09.10.2024 02:20:00" + }, + { + "data": "Thanks, please send them over.", + "senderId": "jillt", + "recipientId": "ianda", + "timestamp": "09.10.2024 02:25:00" + }, + { + "data": "I'll send them right now.", + "senderId": "ianda", + "recipientId": "jillt", + "timestamp": "09.10.2024 02:30:00" + }, + { + "data": "Great, thanks again!", + "senderId": "jillt", + "recipientId": "ianda", + "timestamp": "09.10.2024 02:35:00" + } + ] + } +] diff --git a/server/routers/epja-2024-1/enterfront/chat/index.js b/server/routers/epja-2024-1/enterfront/chat/index.js new file mode 100644 index 0000000..fd1d5cf --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/chat/index.js @@ -0,0 +1,91 @@ +const chatRouter = require('express').Router(); + +module.exports = chatRouter; + +const { getChatFromDB, getUsersChats, addChatToDB, getUserFromDB, + addMessageToChat} = require('../db'); + +chatRouter.get('/item/:id1/:id2', (req, res) => { + const { id1, id2 } = req.params; + console.log("Request get in /chat:", id1, id2); + + if (id1 === id2) { + res.status(400).send({message: 'Ids should be different'}); + return; + } + + const chat = getChatFromDB(id1, id2); + + if (chat) { + res.status(200).send({chat}); + } else { + res.status(404).send({message: 'Chat was not found'}); + } +}) + +chatRouter.post('/item/:id1/:id2', (req, res) => { + const { id1, id2 } = req.params; + console.log("Request post in /chat:", id1, id2); + + if (id1 === id2) { + res.status(400).send({message: 'Ids should be different'}); + return; + } + + const chat = getChatFromDB(id1, id2); + + if (chat) { + // Chat already exists + res.status(200).send({chat}); + } else { + if (!getUserFromDB(id1) || !getUserFromDB(id2)) { + res.status(404).send({message: 'Such interlocutor does not exist'}); + } else { + // Creating new chat + const newChat = { + id1: id1, + id2: id2, + messages: [] + } + + addChatToDB(newChat); + + res.status(200).send({newChat}); + } + } +}) + +chatRouter.get('/list/:id', (req, res) => { + const { id } = req.params; + + console.log("Request get /list in /chat:", id); + + const userChats = getUsersChats(id); + + if (!userChats) { + res.status(404).send({message: 'Error with retrieving chats'}); + } else { + res.status(200).send({chats: userChats}); + } +}) + +chatRouter.post('/message/:sender/:receiver', (req, res) => { + const { sender, receiver } = req.params; + const { message } = req.body; + console.log("Request post /message in /chat:", sender, receiver, message); + + const chat = getChatFromDB(sender, receiver); + + if (!chat) { + // Chat already exists + res.status(400).send({message: "Such chat does not exist"}); + } else { + if (!getUserFromDB(sender) || !getUserFromDB(receiver)) { + res.status(404).send({message: 'Such people do not exist'}); + } else { + // Add new message + addMessageToChat(chat, message); + res.status(200).send({}); + } + } +}) diff --git a/server/routers/epja-2024-1/enterfront/db.js b/server/routers/epja-2024-1/enterfront/db.js new file mode 100644 index 0000000..1a573d0 --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/db.js @@ -0,0 +1,74 @@ +// Read already defined users (pseudo-DB) +const users = require('./auth/users.json'); +const chats = require('./chat/chats.json'); + +const getUserFromDB = (userID) => { + if (!userID) {return false;} + + // Accessing 'DB' + const user = users.find((user) => user.id === userID); + + if (user) { + return user; + } else { + return false; + } +} + +const deleteUserFromDB = (userID) => { + const index = users.findIndex(item => item.id === userID); + if (index !== -1) { + users.splice(index, 1); + } +} + +const addUserToDB = (user) => { + users.push(user); +} + +const getChatFromDB = (firstID, secondID) => { + if (!firstID || !secondID) {return false;} + + // Accessing 'DB' + const chat = chats.find((item) => + (item.id1 === firstID && item.id2 === secondID) || (item.id1 === secondID && item.id2 === firstID)); + + if (chat) { + return chat; + } else { + return false; + } +} + +const getUsersChats = (userID) => { + if (!userID) {return false;} + + const userChats = chats.filter((chat) => (chat.id1 === userID || chat.id2 === userID)); + + if (userChats) { + return userChats; + } else { + return false; + } +} + +const addMessageToChat = (chat, msg) => { + chat.messages.push(msg); +} + +const deleteChatFromDB = (firstID, secondID) => { + const index = chats.findIndex(item => + (item.id1 === firstID && item.id2 === secondID) || (item.id1 === secondID && item.id2 === firstID)); + + if (index !== -1) { + chats.splice(index, 1); + } +} + +const addChatToDB = (chat) => { + chats.push(chat); +} + + +module.exports = {users, chats, getUserFromDB, getChatFromDB, addUserToDB, + deleteUserFromDB, addChatToDB, deleteChatFromDB, getUsersChats, addMessageToChat} diff --git a/server/routers/epja-2024-1/enterfront/index.js b/server/routers/epja-2024-1/enterfront/index.js new file mode 100644 index 0000000..17f1ced --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/index.js @@ -0,0 +1,17 @@ +const changeRouter = require("./change"); +const authRouter = require("./auth"); +const chatRouter = require("./chat"); + +const router = require('express').Router(); + +const delay = require('./middlewares/delay'); +const verify = require('./middlewares/verify'); + +module.exports = router; + +// router.use(delay(300)); +// router.use('/books', delay, booksRouter); + +router.use('/auth', authRouter); +router.use('/change', verify, changeRouter); +router.use('/chat', verify, chatRouter) diff --git a/server/routers/epja-2024-1/enterfront/middlewares/delay.js b/server/routers/epja-2024-1/enterfront/middlewares/delay.js new file mode 100644 index 0000000..789a7b6 --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/middlewares/delay.js @@ -0,0 +1,5 @@ +const delay = (ms = 1000) => (req, res, next) => { + setTimeout(next, ms) +} + +module.exports = delay diff --git a/server/routers/epja-2024-1/enterfront/middlewares/verify.js b/server/routers/epja-2024-1/enterfront/middlewares/verify.js new file mode 100644 index 0000000..bcc653d --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/middlewares/verify.js @@ -0,0 +1,23 @@ +const jwt = require('jsonwebtoken'); + +require('dotenv').config(); +const TOKEN_KEY = process.env.TOKEN_KEY; + +function verifyToken(req, res, next) { + const token = req.headers['authorization']?.split(' ')[1]; + + if (!token) { + return res.status(403).send({ message: 'No token provided' }); + } + + // Verify token + jwt.verify(token, TOKEN_KEY, (err, decoded) => { + if (err) { + return res.status(401).send({ message: 'Unauthorized' }); + } + + next(); // Proceed to the next middleware or route + }); +} + +module.exports = verifyToken; diff --git a/server/routers/epja-2024-1/example/index.js b/server/routers/epja-2024-1/example/index.js new file mode 100644 index 0000000..68094b4 --- /dev/null +++ b/server/routers/epja-2024-1/example/index.js @@ -0,0 +1,26 @@ +const express = require("express"); +const router = express.Router() + +const waitMiddleware = (req, res, next) => { + setTimeout(() => { + next() + }, 3000) +} + +const listActivated = true +router.get('/list', waitMiddleware, (req, res) => { + req.user + + if (listActivated) { + res.status(200).send(require('./news.json')) + } else { + res.status(500).send() + } +}) + +router.get('/list-activate-toggle', (req, res) => { + listActivated = !listActivated + res.send(listActivated ? 'Activated' : 'Deactivated') +}) + +module.exports = router diff --git a/server/routers/epja-2024-1/example/news.json b/server/routers/epja-2024-1/example/news.json new file mode 100644 index 0000000..18e0fb1 --- /dev/null +++ b/server/routers/epja-2024-1/example/news.json @@ -0,0 +1,25 @@ +{ + "ok": true, + "data": [ + { + "id": "1", + "name": "Some name 1", + "description": "Some long long long long description" + }, + { + "id": "2", + "name": "Some name 2", + "description": "Some long long long long description" + }, + { + "id": "3", + "name": "Some name 3", + "description": "Some long long long long description" + }, + { + "id": "4", + "name": "Some name 4", + "description": "Some long long long long description" + } + ] +} diff --git a/server/routers/epja-2024-1/index.js b/server/routers/epja-2024-1/index.js new file mode 100644 index 0000000..da4ff89 --- /dev/null +++ b/server/routers/epja-2024-1/index.js @@ -0,0 +1,9 @@ +const express = require('express') +const router = express.Router() + + +router.use('/example', require('./example/index')) +router.use('/enterfront', require('./enterfront/index')) + + +module.exports = router