Add SSL support
This commit is contained in:
parent
f7e968a13c
commit
4ec1d04247
9 changed files with 96 additions and 55 deletions
|
|
@ -991,6 +991,7 @@ Channel.prototype.sendAll = function(message, data) {
|
|||
if(this.name == "")
|
||||
return;
|
||||
this.server.io.sockets.in(this.name).emit(message, data);
|
||||
this.server.sslio.sockets.in(this.name).emit(message, data);
|
||||
}
|
||||
|
||||
Channel.prototype.sendAllWithPermission = function(perm, msg, data) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ var defaults = {
|
|||
"mysql-pw" : "supersecretpass",
|
||||
"express-host" : "0.0.0.0",
|
||||
"io-host" : "0.0.0.0",
|
||||
"enable-ssl" : false,
|
||||
"ssl-keyfile" : "",
|
||||
"ssl-certfile" : "",
|
||||
"ssl-port" : 443,
|
||||
"asset-cache-ttl" : 0,
|
||||
"web-port" : 8080,
|
||||
"io-port" : 1337,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
var path = require("path");
|
||||
var fs = require("fs");
|
||||
var http = require("http");
|
||||
var https = require("https");
|
||||
var express = require("express");
|
||||
var Config = require("./config");
|
||||
var Logger = require("./logger");
|
||||
|
|
@ -72,6 +74,8 @@ var Server = {
|
|||
app: null,
|
||||
io: null,
|
||||
httpserv: null,
|
||||
sslserv: null,
|
||||
sslio: null,
|
||||
ioserv: null,
|
||||
db: null,
|
||||
ips: {},
|
||||
|
|
@ -92,6 +96,41 @@ var Server = {
|
|||
url = url.substring(0, url.lastIndexOf("?"));
|
||||
this.httpaccess.log([ipstr, req.method, url, status, req.headers["user-agent"]].join(" "));
|
||||
},
|
||||
handleIOConnection: function (socket) {
|
||||
var self = this;
|
||||
self.stats.record("socketio", "socket");
|
||||
var ip = getSocketIP(socket);
|
||||
socket._ip = ip;
|
||||
self.db.isGlobalIPBanned(ip, function (err, bant) {
|
||||
if(bant) {
|
||||
Logger.syslog.log("Disconnecting " + ip + " - gbanned");
|
||||
socket.emit("kick", {
|
||||
reason: "You're globally banned."
|
||||
});
|
||||
socket.disconnect(true);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("disconnect", function () {
|
||||
self.ips[ip]--;
|
||||
}.bind(self));
|
||||
|
||||
if(!(ip in self.ips))
|
||||
self.ips[ip] = 0;
|
||||
self.ips[ip]++;
|
||||
|
||||
if(self.ips[ip] > Server.cfg["ip-connection-limit"]) {
|
||||
socket.emit("kick", {
|
||||
reason: "Too many connections from your IP address"
|
||||
});
|
||||
socket.disconnect(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// finally a valid user
|
||||
Logger.syslog.log("Accepted socket from /" + socket._ip);
|
||||
new User(socket, self);
|
||||
},
|
||||
init: function () {
|
||||
var self = this;
|
||||
// init database
|
||||
|
|
@ -171,6 +210,25 @@ var Server = {
|
|||
});
|
||||
|
||||
// bind servers
|
||||
if (self.cfg["enable-ssl"]) {
|
||||
var key = fs.readFileSync(path.resolve(__dirname, "..",
|
||||
self.cfg["ssl-keyfile"]));
|
||||
var cert = fs.readFileSync(path.resolve(__dirname, "..",
|
||||
self.cfg["ssl-certfile"]));
|
||||
|
||||
var options = {
|
||||
key: key,
|
||||
cert: cert
|
||||
};
|
||||
|
||||
self.sslserv = https.createServer(options, self.app)
|
||||
.listen(self.cfg["ssl-port"]);
|
||||
self.sslio = require("socket.io").listen(self.sslserv);
|
||||
self.sslio.set("log level", 1);
|
||||
self.sslio.sockets.on("connection", function (socket) {
|
||||
self.handleIOConnection(socket);
|
||||
});
|
||||
}
|
||||
self.httpserv = self.app.listen(Server.cfg["web-port"],
|
||||
Server.cfg["express-host"]);
|
||||
self.ioserv = express().listen(Server.cfg["io-port"],
|
||||
|
|
@ -180,39 +238,8 @@ var Server = {
|
|||
self.io = require("socket.io").listen(self.ioserv);
|
||||
self.io.set("log level", 1);
|
||||
self.io.sockets.on("connection", function (socket) {
|
||||
self.stats.record("socketio", "socket");
|
||||
var ip = getSocketIP(socket);
|
||||
socket._ip = ip;
|
||||
self.db.isGlobalIPBanned(ip, function (err, bant) {
|
||||
if(bant) {
|
||||
Logger.syslog.log("Disconnecting " + ip + " - gbanned");
|
||||
socket.emit("kick", {
|
||||
reason: "You're globally banned."
|
||||
});
|
||||
socket.disconnect(true);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("disconnect", function () {
|
||||
self.ips[ip]--;
|
||||
}.bind(self));
|
||||
|
||||
if(!(ip in self.ips))
|
||||
self.ips[ip] = 0;
|
||||
self.ips[ip]++;
|
||||
|
||||
if(self.ips[ip] > Server.cfg["ip-connection-limit"]) {
|
||||
socket.emit("kick", {
|
||||
reason: "Too many connections from your IP address"
|
||||
});
|
||||
socket.disconnect(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// finally a valid user
|
||||
Logger.syslog.log("Accepted socket from /" + socket._ip);
|
||||
new User(socket, self);
|
||||
}.bind(self));
|
||||
self.handleIOConnection(socket);
|
||||
});
|
||||
|
||||
|
||||
// init ACP
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue