2020-04-07 09:55:16 +02:00
|
|
|
const Client = require("./Client.js");
|
|
|
|
const banned = require('../banned.json');
|
2021-04-02 20:02:04 +02:00
|
|
|
const https = require("https");
|
2021-04-12 18:41:44 +02:00
|
|
|
const http = require("http");
|
2021-04-02 20:02:04 +02:00
|
|
|
const fs = require('fs');
|
2021-04-12 23:29:02 +02:00
|
|
|
const RoomSettings = require('./RoomSettings');
|
2021-05-09 22:34:22 +02:00
|
|
|
const Logger = require("./Logger.js");
|
2021-03-01 05:06:39 +01:00
|
|
|
|
2020-04-07 09:55:16 +02:00
|
|
|
class Server extends EventEmitter {
|
|
|
|
constructor(config) {
|
|
|
|
super();
|
|
|
|
EventEmitter.call(this);
|
2021-05-09 22:34:22 +02:00
|
|
|
|
|
|
|
this.logger = new Logger("Server");
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2022-01-26 01:44:26 +01:00
|
|
|
if (config.ssl == "true") {
|
2021-04-12 18:41:44 +02:00
|
|
|
this.https_server = https.createServer({
|
|
|
|
key: fs.readFileSync('ssl/privkey.pem', 'utf8'),
|
|
|
|
cert: fs.readFileSync('ssl/cert.pem'),
|
|
|
|
ca: fs.readFileSync('ssl/chain.pem')
|
|
|
|
});
|
|
|
|
|
|
|
|
this.wss = new WebSocket.Server({
|
|
|
|
server: this.https_server,
|
|
|
|
backlog: 100,
|
|
|
|
verifyClient: (info) => {
|
|
|
|
if (banned.includes((info.req.connection.remoteAddress).replace("::ffff:", ""))) return false;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
this.https_server.listen(config.port);
|
|
|
|
} else {
|
|
|
|
this.wss = new WebSocket.Server({
|
2021-04-13 20:27:01 +02:00
|
|
|
port: config.port,
|
2021-04-12 18:41:44 +02:00
|
|
|
backlog: 100,
|
|
|
|
verifyClient: (info) => {
|
|
|
|
if (banned.includes((info.req.connection.remoteAddress).replace("::ffff:", ""))) return false;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2021-05-09 22:34:22 +02:00
|
|
|
this.defaultUsername = config.defaultUsername;
|
2021-04-12 23:29:02 +02:00
|
|
|
this.defaultRoomSettings = new RoomSettings(config.defaultRoomSettings);
|
|
|
|
|
|
|
|
this.lobbySettings = new RoomSettings(config.defaultRoomSettings);
|
|
|
|
this.lobbySettings.lobby = true;
|
|
|
|
this.lobbySettings.color = config.defaultLobbyColor || "#9900ff";
|
|
|
|
this.lobbySettings.color2 = config.defaultLobbyColor2 || "#9900ff";
|
|
|
|
|
2021-05-09 22:34:22 +02:00
|
|
|
this.logger.log(`Server started on port ${config.port}`);
|
2020-04-07 09:55:16 +02:00
|
|
|
this.connectionid = 0;
|
|
|
|
this.connections = new Map();
|
|
|
|
this.roomlisteners = new Map();
|
|
|
|
this.rooms = new Map();
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2021-05-09 10:52:41 +02:00
|
|
|
this.specialIntervals = {};
|
|
|
|
|
2020-04-07 09:55:16 +02:00
|
|
|
this.wss.on('connection', (ws, req) => {
|
|
|
|
this.connections.set(++this.connectionid, new Client(ws, req, this));
|
|
|
|
});
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2022-05-24 20:22:19 +02:00
|
|
|
this.legit_m = [
|
|
|
|
"a",
|
|
|
|
"bye",
|
|
|
|
"hi",
|
|
|
|
"ch",
|
|
|
|
"+ls",
|
|
|
|
"-ls",
|
|
|
|
"m",
|
|
|
|
"n",
|
|
|
|
"devices",
|
|
|
|
"t",
|
|
|
|
"chset",
|
|
|
|
"userset",
|
|
|
|
"chown",
|
|
|
|
"kickban",
|
|
|
|
"admin message",
|
|
|
|
"color",
|
|
|
|
"eval",
|
|
|
|
"notification",
|
|
|
|
"user_flag",
|
|
|
|
"room_flag",
|
|
|
|
"clear_chat",
|
|
|
|
"sudo",
|
|
|
|
"subscribe to admin stream",
|
|
|
|
"unsubscribe from admin stream",
|
2022-06-17 08:36:49 +02:00
|
|
|
"data",
|
2022-06-18 06:44:22 +02:00
|
|
|
"channel message",
|
|
|
|
"channel_flag"
|
2022-05-24 20:22:19 +02:00
|
|
|
];
|
|
|
|
|
2021-04-02 20:02:04 +02:00
|
|
|
this.welcome_motd = config.motd || "You agree to read this message.";
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2022-05-24 20:22:19 +02:00
|
|
|
this._id_Private_Key = config._id_PrivateKey || "amogus";
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2022-05-24 20:22:19 +02:00
|
|
|
this.adminpass = config.adminpass || "123123sucks";
|
2021-04-12 23:29:02 +02:00
|
|
|
}
|
|
|
|
|
2020-04-07 09:55:16 +02:00
|
|
|
updateRoom(data) {
|
|
|
|
if (!data.ch.settings.visible) return;
|
2021-04-12 23:29:02 +02:00
|
|
|
|
2020-04-07 09:55:16 +02:00
|
|
|
for (let cl of Array.from(this.roomlisteners.values())) {
|
2021-05-09 10:52:41 +02:00
|
|
|
if (cl.destroied) {
|
|
|
|
cl = undefined;
|
|
|
|
return;
|
|
|
|
}
|
2020-04-07 09:55:16 +02:00
|
|
|
cl.sendArray([{
|
|
|
|
"m": "ls",
|
|
|
|
"c": false,
|
|
|
|
"u": [data.ch]
|
2021-04-12 23:29:02 +02:00
|
|
|
}]);
|
2020-04-07 09:55:16 +02:00
|
|
|
}
|
|
|
|
}
|
2021-04-02 20:02:04 +02:00
|
|
|
|
|
|
|
ev(str) {
|
2021-04-12 18:37:19 +02:00
|
|
|
let out = "";
|
2021-04-02 20:02:04 +02:00
|
|
|
try {
|
|
|
|
out = eval(str);
|
|
|
|
} catch(err) {
|
|
|
|
out = err;
|
|
|
|
}
|
|
|
|
console.log(out);
|
|
|
|
}
|
2022-05-24 21:40:09 +02:00
|
|
|
|
|
|
|
getClient(id) {
|
|
|
|
return this.connections.get(id);
|
|
|
|
}
|
|
|
|
|
2022-06-17 08:36:49 +02:00
|
|
|
getClientByParticipantID(id) {
|
|
|
|
for (let cl of Array.from(this.connections.values())) {
|
|
|
|
if (cl.participantID == id) return cl;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2022-05-24 21:40:09 +02:00
|
|
|
getAllClientsByUserID(_id) {
|
|
|
|
let out = [];
|
|
|
|
for (let cl of Array.from(this.connections.values())) {
|
|
|
|
if (cl.user._id == _id) out.push(cl);
|
|
|
|
}
|
|
|
|
return out;
|
|
|
|
}
|
2020-04-07 09:55:16 +02:00
|
|
|
}
|
|
|
|
|
2021-04-02 20:02:04 +02:00
|
|
|
module.exports = Server;
|