From 18a1095cf09788b8f16df061366963aa8a2f3e4f Mon Sep 17 00:00:00 2001 From: Nikolai Petukhov Date: Thu, 10 Oct 2024 12:02:52 +0300 Subject: [PATCH 1/4] 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 -- 2.45.2 From f13ae33cb45f5ddb4641d547248f27ac5dd12428 Mon Sep 17 00:00:00 2001 From: Nikolai Petukhov Date: Thu, 10 Oct 2024 13:06:58 +0300 Subject: [PATCH 2/4] added a route for epja-2024-1 --- server/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/index.js b/server/index.js index 13e77c7..962b52a 100644 --- a/server/index.js +++ b/server/index.js @@ -68,6 +68,7 @@ app.use('/kazan-explore', require('./routers/kazan-explore')) app.use('/epja-2023-2', require('./routers/epja-2023-2')) require('./routers/hub-video') app.use('/school-stage', require('./routers/school-stage')) +app.use('/epja-2024-1', require('/routers/epja-2024-1')) app.use(require('./error')) -- 2.45.2 From b215e22f53d07c39337ea74861284f938afa76d5 Mon Sep 17 00:00:00 2001 From: Nikolai Petukhov Date: Sat, 12 Oct 2024 11:17:21 +0300 Subject: [PATCH 3/4] fixed const key, logs, deleted example --- .vscode/launch.json | 26 ------------------- .../epja-2024-1/enterfront/auth/index.js | 6 +---- .../epja-2024-1/enterfront/change/index.js | 7 +---- .../epja-2024-1/enterfront/chat/index.js | 5 ---- server/routers/epja-2024-1/enterfront/key.js | 3 +++ .../enterfront/middlewares/verify.js | 3 +-- 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 | 2 -- 9 files changed, 6 insertions(+), 97 deletions(-) delete mode 100644 .vscode/launch.json create mode 100644 server/routers/epja-2024-1/enterfront/key.js delete mode 100644 server/routers/epja-2024-1/example/index.js delete mode 100644 server/routers/epja-2024-1/example/news.json diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 60cc5a1..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "pwa-node", - "request": "launch", - "name": "Launch Program", - "skipFiles": [ - "/**" - ], - "program": "${workspaceFolder}/server/index.js" - }, - { - "name": "attach", - "type": "pwa-node", - "request": "attach", - "skipFiles": [ - "/**" - ], - "processId": "${command:PickProcess}" - } - ] -} \ No newline at end of file diff --git a/server/routers/epja-2024-1/enterfront/auth/index.js b/server/routers/epja-2024-1/enterfront/auth/index.js index ea32017..abfd874 100644 --- a/server/routers/epja-2024-1/enterfront/auth/index.js +++ b/server/routers/epja-2024-1/enterfront/auth/index.js @@ -3,8 +3,7 @@ const authRouter = require('express').Router(); // For creating tokens const jwt = require('jsonwebtoken'); -require('dotenv').config(); -const TOKEN_KEY = process.env.TOKEN_KEY; +const { TOKEN_KEY } = require('../key') module.exports = authRouter; @@ -15,7 +14,6 @@ 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}); @@ -27,7 +25,6 @@ authRouter.get('/:id', (req, res) => { // For login (authorization) authRouter.post('/login', (req, res) => { const { name, password } = req.body; - console.log("Request login in /auth:", name); const user = getUserFromDB(name); @@ -54,7 +51,6 @@ authRouter.post('/login', (req, res) => { authRouter.post('/reg', (req, res) => { const { name, password, nickname } = req.body; - console.log("Request reg in /auth:", name); const user = getUserFromDB(name); diff --git a/server/routers/epja-2024-1/enterfront/change/index.js b/server/routers/epja-2024-1/enterfront/change/index.js index c5e0837..b5d2b7e 100644 --- a/server/routers/epja-2024-1/enterfront/change/index.js +++ b/server/routers/epja-2024-1/enterfront/change/index.js @@ -2,14 +2,11 @@ const changeRouter = require('express').Router(); module.exports = changeRouter; -const { users, getUserFromDB, deleteUserFromDB, addUserToDB } = require('../db'); - -const jwt = require("jsonwebtoken"); +const { getUserFromDB, deleteUserFromDB, addUserToDB } = require('../db'); changeRouter.post('/nickname', (req, res) => { const { id, newNickname } = req.body; - console.log("Request nickname in /change:", id); const user = getUserFromDB(id); @@ -36,7 +33,6 @@ changeRouter.post('/nickname', (req, res) => { changeRouter.post('/password', (req, res) => { const { id, newPassword } = req.body; - console.log("Request password in /change:", id); const user = getUserFromDB(id); @@ -62,7 +58,6 @@ changeRouter.post('/password', (req, res) => { 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/index.js b/server/routers/epja-2024-1/enterfront/chat/index.js index fd1d5cf..ce2f169 100644 --- a/server/routers/epja-2024-1/enterfront/chat/index.js +++ b/server/routers/epja-2024-1/enterfront/chat/index.js @@ -7,7 +7,6 @@ const { getChatFromDB, getUsersChats, addChatToDB, getUserFromDB, 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'}); @@ -25,7 +24,6 @@ chatRouter.get('/item/:id1/:id2', (req, res) => { 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'}); @@ -58,8 +56,6 @@ chatRouter.post('/item/:id1/:id2', (req, res) => { chatRouter.get('/list/:id', (req, res) => { const { id } = req.params; - console.log("Request get /list in /chat:", id); - const userChats = getUsersChats(id); if (!userChats) { @@ -72,7 +68,6 @@ chatRouter.get('/list/:id', (req, res) => { 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); diff --git a/server/routers/epja-2024-1/enterfront/key.js b/server/routers/epja-2024-1/enterfront/key.js new file mode 100644 index 0000000..d02db5a --- /dev/null +++ b/server/routers/epja-2024-1/enterfront/key.js @@ -0,0 +1,3 @@ +const TOKEN_KEY = '5frv12e4few3r'; + +module.exports = { TOKEN_KEY } \ No newline at end of file diff --git a/server/routers/epja-2024-1/enterfront/middlewares/verify.js b/server/routers/epja-2024-1/enterfront/middlewares/verify.js index bcc653d..74f585b 100644 --- a/server/routers/epja-2024-1/enterfront/middlewares/verify.js +++ b/server/routers/epja-2024-1/enterfront/middlewares/verify.js @@ -1,7 +1,6 @@ const jwt = require('jsonwebtoken'); -require('dotenv').config(); -const TOKEN_KEY = process.env.TOKEN_KEY; +const { TOKEN_KEY } = require('../key') function verifyToken(req, res, next) { const token = req.headers['authorization']?.split(' ')[1]; diff --git a/server/routers/epja-2024-1/example/index.js b/server/routers/epja-2024-1/example/index.js deleted file mode 100644 index 68094b4..0000000 --- a/server/routers/epja-2024-1/example/index.js +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 18e0fb1..0000000 --- a/server/routers/epja-2024-1/example/news.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "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 index da4ff89..2097192 100644 --- a/server/routers/epja-2024-1/index.js +++ b/server/routers/epja-2024-1/index.js @@ -2,8 +2,6 @@ const express = require('express') const router = express.Router() -router.use('/example', require('./example/index')) router.use('/enterfront', require('./enterfront/index')) - module.exports = router -- 2.45.2 From 89c9d7f90148f312fdc5ed8e0802693fd60c5a39 Mon Sep 17 00:00:00 2001 From: Nikolai Petukhov Date: Sat, 12 Oct 2024 11:21:47 +0300 Subject: [PATCH 4/4] fixed error code --- .vscode/launch.json | 26 +++++++++++++++++++ .../enterfront/middlewares/verify.js | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..60cc5a1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/server/index.js" + }, + { + "name": "attach", + "type": "pwa-node", + "request": "attach", + "skipFiles": [ + "/**" + ], + "processId": "${command:PickProcess}" + } + ] +} \ No newline at end of file diff --git a/server/routers/epja-2024-1/enterfront/middlewares/verify.js b/server/routers/epja-2024-1/enterfront/middlewares/verify.js index 74f585b..e0c462c 100644 --- a/server/routers/epja-2024-1/enterfront/middlewares/verify.js +++ b/server/routers/epja-2024-1/enterfront/middlewares/verify.js @@ -6,7 +6,7 @@ function verifyToken(req, res, next) { const token = req.headers['authorization']?.split(' ')[1]; if (!token) { - return res.status(403).send({ message: 'No token provided' }); + return res.status(401).send({ message: 'No token provided' }); } // Verify token -- 2.45.2