11 Commits

Author SHA1 Message Date
Nikolai Petukhov
9b4870995f 0.5.2 2024-10-12 12:44:15 +03:00
Nikolai Petukhov
2f447cef1a fixed init routes 2024-10-12 12:44:04 +03:00
Nikolai Petukhov
964ca236e8 0.5.1 2024-10-12 12:33:46 +03:00
Nikolai Petukhov
9c1c670ccb small fix with routes 2024-10-12 12:25:38 +03:00
Nikolai Petukhov
ff9bd3ac8c 0.5.0 2024-10-12 12:24:16 +03:00
Nikolai Petukhov
51618c8858 small changes 2024-10-12 12:23:25 +03:00
Nikolai Petukhov
54f6c5c053 config fix 2024-10-12 11:39:17 +03:00
Nikolai Petukhov
8fecf7cb1f I have added intervals for messages 2024-10-11 13:39:15 +03:00
Nikolai Petukhov
49a8af611f done 2024-10-10 12:03:37 +03:00
Nikolai Petukhov
7c4457dea4 done 2024-10-10 12:02:10 +03:00
Nikolai Petukhov
6096bdc4cb done 2024-10-10 12:01:49 +03:00
14 changed files with 110 additions and 45 deletions

89
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "enterfront", "name": "enterfront",
"version": "0.4.0", "version": "0.5.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "enterfront", "name": "enterfront",
"version": "0.4.0", "version": "0.5.2",
"dependencies": { "dependencies": {
"@brojs/cli": "^1.0.0", "@brojs/cli": "^1.0.0",
"@brojs/create": "^1.0.0", "@brojs/create": "^1.0.0",
@@ -1855,6 +1855,30 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/@brojs/cli/node_modules/i18next": {
"version": "23.15.2",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-23.15.2.tgz",
"integrity": "sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ==",
"funding": [
{
"type": "individual",
"url": "https://locize.com"
},
{
"type": "individual",
"url": "https://locize.com/i18next.html"
},
{
"type": "individual",
"url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/runtime": "^7.23.2"
}
},
"node_modules/@brojs/cli/node_modules/i18next-browser-languagedetector": { "node_modules/@brojs/cli/node_modules/i18next-browser-languagedetector": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz",
@@ -2669,6 +2693,19 @@
"ijl-cli": "bin/ijl-cli" "ijl-cli": "bin/ijl-cli"
} }
}, },
"node_modules/@ijl/cli/node_modules/@types/react": {
"version": "17.0.83",
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.83.tgz",
"integrity": "sha512-l0m4ArKJvmFtR4e8UmKrj1pB4tUgOhJITf+mADyF/p69Ts1YAR/E+G9XEM0mHXKVRa1dQNHseyyDNzeuAXfXQw==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "^0.16",
"csstype": "^3.0.2"
}
},
"node_modules/@ijl/cli/node_modules/loader-utils": { "node_modules/@ijl/cli/node_modules/loader-utils": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
@@ -2682,6 +2719,35 @@
"node": ">=8.9.0" "node": ">=8.9.0"
} }
}, },
"node_modules/@ijl/cli/node_modules/react": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
"integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@ijl/cli/node_modules/react-dom": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
"integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"scheduler": "^0.20.2"
},
"peerDependencies": {
"react": "17.0.2"
}
},
"node_modules/@ijl/cli/node_modules/react-hot-loader": { "node_modules/@ijl/cli/node_modules/react-hot-loader": {
"version": "4.13.1", "version": "4.13.1",
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.1.tgz", "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.1.tgz",
@@ -2710,6 +2776,17 @@
} }
} }
}, },
"node_modules/@ijl/cli/node_modules/scheduler": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
"integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1"
}
},
"node_modules/@ijl/cli/node_modules/source-map": { "node_modules/@ijl/cli/node_modules/source-map": {
"version": "0.7.4", "version": "0.7.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
@@ -3065,6 +3142,14 @@
"@types/react": "*" "@types/react": "*"
} }
}, },
"node_modules/@types/scheduler": {
"version": "0.16.8",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/@types/source-list-map": { "node_modules/@types/source-list-map": {
"version": "0.1.6", "version": "0.1.6",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz",

View File

@@ -29,5 +29,5 @@
"clean": "rimraf dist" "clean": "rimraf dist"
}, },
"name": "enterfront", "name": "enterfront",
"version": "0.4.0" "version": "0.5.2"
} }

View File

@@ -2,9 +2,9 @@ import {getConfigValue} from "@brojs/cli";
const LOCAL = "http://localhost:8099"; const LOCAL = "http://localhost:8099";
const DEV = ""; const DEV = "https://dev.bro-js.ru";
export const BASE_API_URL = LOCAL + getConfigValue("enterfront.api") + "/enterfront"; export const BASE_API_URL = DEV + getConfigValue("enterfront.api");
// fetch(`${BASE_API_URL}/books/list`) // fetch(`${BASE_API_URL}/books/list`)

View File

@@ -1,8 +0,0 @@
export default class Interlocutor {
constructor(id, name) {
this.name = name;
this.id = id;
}
static name;
static id;
}

View File

@@ -1,7 +0,0 @@
export default class User {
constructor(id, name) {
this.id = id;
this.name = name;
this.status = "online";
}
}

View File

@@ -116,7 +116,12 @@ const Chat = () => {
}, []); }, []);
useEffect(() => { useEffect(() => {
retrieveMessages().then(); // retrieveMessages().then();
const interval = setInterval(() => {
retrieveMessages().then()
}, 2000);
return () => clearInterval(interval)
}, [myId, interlocutorId]); }, [myId, interlocutorId]);
useEffect(() => { useEffect(() => {

View File

@@ -6,6 +6,7 @@ import LoginTitle from "../components/reg/loginTitle.jsx";
import {MessageType} from "../backend/notifications/message.tsx"; import {MessageType} from "../backend/notifications/message.tsx";
import {displayMessage} from "../backend/notifications/notifications.js"; import {displayMessage} from "../backend/notifications/notifications.js";
import {post} from "../backend/api.js"; import {post} from "../backend/api.js";
import {URLs} from "../__data__/urls";
const SignIn = () => { const SignIn = () => {
const [name, setName] = useState(""); const [name, setName] = useState("");
@@ -37,7 +38,7 @@ const SignIn = () => {
setNameErrorsCounter(0); setNameErrorsCounter(0);
localStorage.setItem('message', 'Successfully logged in!'); localStorage.setItem('message', 'Successfully logged in!');
window.location.href = "/"; window.location.href = URLs.baseUrl;
} }
return ( return (

View File

@@ -5,6 +5,7 @@ import LoginTitle from "../components/reg/loginTitle.jsx";
import {post} from "../backend/api"; import {post} from "../backend/api";
import {displayMessage} from "../backend/notifications/notifications"; import {displayMessage} from "../backend/notifications/notifications";
import {MessageType} from "../backend/notifications/message"; import {MessageType} from "../backend/notifications/message";
import { URLs } from "../__data__/urls";
const SignUp = () => { const SignUp = () => {
@@ -47,7 +48,7 @@ const SignUp = () => {
localStorage.setItem('username', name); localStorage.setItem('username', name);
localStorage.setItem('message', 'Successfully signed up!'); localStorage.setItem('message', 'Successfully signed up!');
window.location.href = "/"; window.location.href = URLs.baseUrl;
} }
return ( return (

View File

@@ -3,8 +3,7 @@ const authRouter = require('express').Router();
// For creating tokens // For creating tokens
const jwt = require('jsonwebtoken'); const jwt = require('jsonwebtoken');
require('dotenv').config(); const { TOKEN_KEY } = require('../key')
const TOKEN_KEY = process.env.TOKEN_KEY;
module.exports = authRouter; module.exports = authRouter;
@@ -15,7 +14,6 @@ const { addUserToDB, getUserFromDB } = require('../db');
// Get a user by its id // Get a user by its id
authRouter.get('/:id', (req, res) => { authRouter.get('/:id', (req, res) => {
const user = getUserFromDB(req.params.id); const user = getUserFromDB(req.params.id);
console.log("Request get in /auth:", req.params.id);
if (user) { if (user) {
res.status(200).send({user}); res.status(200).send({user});
@@ -27,7 +25,6 @@ authRouter.get('/:id', (req, res) => {
// For login (authorization) // For login (authorization)
authRouter.post('/login', (req, res) => { authRouter.post('/login', (req, res) => {
const { name, password } = req.body; const { name, password } = req.body;
console.log("Request login in /auth:", name);
const user = getUserFromDB(name); const user = getUserFromDB(name);
@@ -54,7 +51,6 @@ authRouter.post('/login', (req, res) => {
authRouter.post('/reg', (req, res) => { authRouter.post('/reg', (req, res) => {
const { name, password, nickname } = req.body; const { name, password, nickname } = req.body;
console.log("Request reg in /auth:", name);
const user = getUserFromDB(name); const user = getUserFromDB(name);

View File

@@ -2,14 +2,11 @@ const changeRouter = require('express').Router();
module.exports = changeRouter; module.exports = changeRouter;
const { users, getUserFromDB, deleteUserFromDB, addUserToDB } = require('../db'); const { getUserFromDB, deleteUserFromDB, addUserToDB } = require('../db');
const jwt = require("jsonwebtoken");
changeRouter.post('/nickname', (req, res) => { changeRouter.post('/nickname', (req, res) => {
const { id, newNickname } = req.body; const { id, newNickname } = req.body;
console.log("Request nickname in /change:", id);
const user = getUserFromDB(id); const user = getUserFromDB(id);
@@ -36,7 +33,6 @@ changeRouter.post('/nickname', (req, res) => {
changeRouter.post('/password', (req, res) => { changeRouter.post('/password', (req, res) => {
const { id, newPassword } = req.body; const { id, newPassword } = req.body;
console.log("Request password in /change:", id);
const user = getUserFromDB(id); const user = getUserFromDB(id);
@@ -62,7 +58,6 @@ changeRouter.post('/password', (req, res) => {
changeRouter.delete('/:id', (req, res) => { changeRouter.delete('/:id', (req, res) => {
const { id } = req.params; const { id } = req.params;
console.log("Request delete in /change:", id);
deleteUserFromDB(id); deleteUserFromDB(id);
}); });

View File

@@ -7,7 +7,6 @@ const { getChatFromDB, getUsersChats, addChatToDB, getUserFromDB,
chatRouter.get('/item/:id1/:id2', (req, res) => { chatRouter.get('/item/:id1/:id2', (req, res) => {
const { id1, id2 } = req.params; const { id1, id2 } = req.params;
console.log("Request get in /chat:", id1, id2);
if (id1 === id2) { if (id1 === id2) {
res.status(400).send({message: 'Ids should be different'}); 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) => { chatRouter.post('/item/:id1/:id2', (req, res) => {
const { id1, id2 } = req.params; const { id1, id2 } = req.params;
console.log("Request post in /chat:", id1, id2);
if (id1 === id2) { if (id1 === id2) {
res.status(400).send({message: 'Ids should be different'}); 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) => { chatRouter.get('/list/:id', (req, res) => {
const { id } = req.params; const { id } = req.params;
console.log("Request get /list in /chat:", id);
const userChats = getUsersChats(id); const userChats = getUsersChats(id);
if (!userChats) { if (!userChats) {
@@ -72,7 +68,6 @@ chatRouter.get('/list/:id', (req, res) => {
chatRouter.post('/message/:sender/:receiver', (req, res) => { chatRouter.post('/message/:sender/:receiver', (req, res) => {
const { sender, receiver } = req.params; const { sender, receiver } = req.params;
const { message } = req.body; const { message } = req.body;
console.log("Request post /message in /chat:", sender, receiver, message);
const chat = getChatFromDB(sender, receiver); const chat = getChatFromDB(sender, receiver);

View File

@@ -12,6 +12,6 @@ module.exports = router;
// router.use(delay(300)); // router.use(delay(300));
// router.use('/books', delay, booksRouter); // router.use('/books', delay, booksRouter);
router.use('/enterfront/auth', authRouter); router.use('/auth', authRouter);
router.use('/enterfront/change', verify, changeRouter); router.use('/change', verify, changeRouter);
router.use('/enterfront/chat', verify, chatRouter) router.use('/chat', verify, chatRouter)

3
stubs/api/key.js Normal file
View File

@@ -0,0 +1,3 @@
const TOKEN_KEY = '5frv12e4few3r';
module.exports = { TOKEN_KEY }

View File

@@ -1,13 +1,12 @@
const jwt = require('jsonwebtoken'); const jwt = require('jsonwebtoken');
require('dotenv').config(); const { TOKEN_KEY } = require('../key')
const TOKEN_KEY = process.env.TOKEN_KEY;
function verifyToken(req, res, next) { function verifyToken(req, res, next) {
const token = req.headers['authorization']?.split(' ')[1]; const token = req.headers['authorization']?.split(' ')[1];
if (!token) { if (!token) {
return res.status(403).send({ message: 'No token provided' }); return res.status(401).send({ message: 'No token provided' });
} }
// Verify token // Verify token