forked from MarciusCoreolan/social_network
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
88 lines (73 loc) · 4.11 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const jsonServer = require("json-server");
const server = jsonServer.create();
const router = jsonServer.router("db.json");
const middlewares = jsonServer.defaults({
static: "./build"
});
const users = router.db.get("users");
const dialogs = router.db.get("dialogs");
const messages = router.db.get("messages");
server.use(middlewares);
server.use(jsonServer.bodyParser);
server.use((req, res, next) => { //авторизация ===========================================================
const login = req.body.login;
const password = req.body.password;
if (req.method === "POST" && req.url === "/auth") { //делаем ПОСТ запрос на несуществующий адресс
const authUser = users
.toJSON()
.find((user) => user.login === login && user.password === password);//делаем проверку логина и пароля, если такой пользователь есть возвращаем
if (authUser === undefined) { //если после проверки пользователь не нашелся возвращаем ошибку
res.status(404).json({error: "Неверный логин или пароль"});
}
res.json({ ...authUser, password: null }); // возвращаем пользователя и затираем пароль
}
next();
});
server.use((req, res, next) => { //получение сообщений определенного диалога ==============================
const userName = req.body.userName;
const opponentName = req.body.opponentName;
if (req.method === "POST" && req.url === "/dialog") {
const userMessages = messages.toJSON().filter( // ниже проводим проверку что бы получить нужные нам сообщения с сервера
(item) =>
// если айди авторизованного пользователя совпадает с authorId(с сервера) И opponentId(с сервера) совпадает на того чей диалог произошел клик
(item.userName === userName && item.opponentName === opponentName) ||
// ИЛИ authorId(с сервера) сообщения совпадает с опонентом И opponentId(с сервера) совпадает с айди авторизованным пользователем
(item.userName === opponentName && item.opponentName === userName)
);
res.json(userMessages);
}
next();
});
server.use((req, res, next) => { //получение диалогов определенного пользователя ==============================
const userId = req.body.userId;
if (req.method === "PUT" && req.url === "/dialogs") {
const userDialogs = dialogs.toJSON().filter(item => item.userId === userId)
res.json(userDialogs);
}
next();
});
server.use((req, res, next) =>{ //Регистрация новго пользователя
const userName = req.body.userName;
const userLogin = req.body.login;
if (req.method === 'POST' && req.url === '/users'){
const checkUsers = users.toJSON().filter(item => item.userName === userName || item.login === userLogin)
if (checkUsers.length === 0) {
let text = '';
const possible =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for (let i = 0; i < 50; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length)); //создаем рандомный токен
const ava = "https://yt3.ggpht.com/ytc/AAUvwniqvjXAhxhnHxoO4F82hlTiQouz5b76_yPllUeayw=s900-c-k-c0x00ffffff-no-rj"
req.body.token = text //добавление токена из 50 рандомных символов
req.body.avatar = ava //добавление дефолтной аватарки
req.body.moderate = false // добавление прав модерации}
} else {
res.status(404).json({error: "Ошибка такой пользователь уже существует"});
}
}
next()
})
server.use(router);
server.listen(process.env.PORT || 3001, () => {
console.log("JSON Server is running");
});