bsfe_server/src/index.js

84 lines
2.5 KiB
JavaScript
Raw Normal View History

2024-10-26 05:31:22 +03:00
import express from 'express';
import UserRouter from './routers/user.js';
2024-11-12 21:22:13 +03:00
import UserService from './services/user.js';
2024-10-26 05:31:22 +03:00
import GroupRouter from './routers/group.js';
import AbstractProductRouter from './routers/abstractproduct.js';
2024-10-27 05:45:12 +03:00
import log from './utils/log.js';
2024-10-26 05:31:22 +03:00
import config from '../config.json' with {type: "json"};
import ProductRouter from './routers/product.js';
2024-10-27 05:35:36 +03:00
import CategoryRouter from './routers/category.js';
2024-10-26 05:31:22 +03:00
2024-11-12 21:22:13 +03:00
import { WebSocketServer } from 'ws';
import jwt from 'jsonwebtoken';
2024-10-26 05:31:22 +03:00
const app = express();
2024-11-12 21:22:13 +03:00
const wss = new WebSocketServer({ port: config.wsport });
const clients = [];
2024-10-26 05:31:22 +03:00
2024-10-28 17:17:47 +03:00
app.use(express.urlencoded({ extended: false, limit: "200mb", parameterLimit: 100000 }));
app.use(express.json({ limit: "200mb", parameterLimit: 1000000 }));
2024-10-26 05:31:22 +03:00
app.use('/api/user/', UserRouter);
app.use('/api/group/', GroupRouter);
app.use('/api/abstractproduct', AbstractProductRouter);
app.use('/api/product', ProductRouter);
2024-10-27 05:35:36 +03:00
app.use('/api/category', CategoryRouter);
2024-10-26 05:31:22 +03:00
2024-11-12 12:31:56 +03:00
app.get('/status', (req, res) => {
return res.status(200).send("All OK");
});
2024-11-12 21:22:13 +03:00
wss.on('connection', (client) => {
client.on('message', async (message) => {
2024-11-14 03:41:34 +03:00
if (message == "keepalive") return;
let parsed = JSON.parse(message);
let token = parsed.token;
let currentGroup = parsed.currentGroup;
2024-11-13 23:08:50 +03:00
try {
if (!jwt.verify(token, config.secret)) {
client.send("Invalid token");
return;
}
2024-11-12 21:22:13 +03:00
2024-11-13 23:08:50 +03:00
if (!await UserService.isInGroup(jwt.decode(token, config.secret).login.id, currentGroup)) {
client.send("Not a member of specified group");
return;
}
} catch (e) {
log.error("Error during connection through websocket.")
client.send("Error")
return;
2024-11-12 21:22:13 +03:00
}
clients.push({
socket: client,
token,
currentGroup
});
});
client.on('close', () => {
for (let i = 0; i < clients.length; i++) {
if (clients[i].socket == client) {
2024-11-14 03:41:34 +03:00
log.debug(`Client with token ${clients[i].token} has disconnected`)
2024-11-12 21:22:13 +03:00
clients.splice(i, 1);
break;
}
}
})
});
const server = app.listen(config.port, () => {
log.info(`Application has started on port ${config.port}`);
});
2024-11-12 21:22:13 +03:00
server.on('upgrade', (req, res, head) => {
wss.handleUpgrade(req, res, head, socket => {
2024-11-13 23:08:50 +03:00
wss.emit('connection', socket, req);
});
2024-11-12 21:22:13 +03:00
});
export default clients;