Merge refactoring into 3.0
This commit is contained in:
parent
91bf6a5062
commit
9ea48f58cf
39 changed files with 5555 additions and 6262 deletions
|
|
@ -6,6 +6,11 @@ var User = require("../user");
|
|||
var Server = require("../server");
|
||||
var Config = require("../config");
|
||||
var $util = require("../utilities");
|
||||
var Flags = require("../flags");
|
||||
var Account = require("../account");
|
||||
var typecheck = require("json-typecheck");
|
||||
var net = require("net");
|
||||
var util = require("../utilities");
|
||||
|
||||
var CONNECT_RATE = {
|
||||
burst: 5,
|
||||
|
|
@ -42,8 +47,13 @@ function handleAuth(data, accept) {
|
|||
* Called after a connection is accepted
|
||||
*/
|
||||
function handleConnection(sock) {
|
||||
sock._ip = sock.handshake.address.address;
|
||||
var ip = sock._ip;
|
||||
var ip = sock.handshake.address.address;
|
||||
var longip = ip;
|
||||
sock._ip = ip;
|
||||
if (net.isIPv6(ip)) {
|
||||
longip = util.expandIPv6(ip);
|
||||
}
|
||||
sock._longip = longip;
|
||||
var srv = Server.getServer();
|
||||
if (srv.torblocker && srv.torblocker.shouldBlockIP(ip)) {
|
||||
sock.emit("kick", {
|
||||
|
|
@ -69,13 +79,12 @@ function handleConnection(sock) {
|
|||
}
|
||||
|
||||
// Check for global ban on the IP
|
||||
db.isGlobalIPBanned(ip, function (err, banned) {
|
||||
if (banned) {
|
||||
Logger.syslog.log("Disconnecting " + ip + " - global banned");
|
||||
sock.emit("kick", { reason: "Your IP is globally banned." });
|
||||
sock.disconnect(true);
|
||||
}
|
||||
});
|
||||
if (db.isGlobalIPBanned(ip)) {
|
||||
Logger.syslog.log("Rejecting " + ip + " - global banned");
|
||||
sock.emit("kick", { reason: "Your IP is globally banned." });
|
||||
sock.disconnect(true);
|
||||
return;
|
||||
}
|
||||
|
||||
sock.on("disconnect", function () {
|
||||
ipCount[ip]--;
|
||||
|
|
@ -99,21 +108,61 @@ function handleConnection(sock) {
|
|||
}
|
||||
|
||||
Logger.syslog.log("Accepted socket from " + ip);
|
||||
var user = new User(sock);
|
||||
if (sock.handshake && sock.handshake.user) {
|
||||
user.name = sock.handshake.user.name;
|
||||
user.global_rank = sock.handshake.user.global_rank;
|
||||
user.loggedIn = true;
|
||||
user.emit("login");
|
||||
user.socket.emit("login", {
|
||||
success: true,
|
||||
name: user.name,
|
||||
guest: false
|
||||
|
||||
sock.typecheckedOn = function (msg, template, cb) {
|
||||
sock.on(msg, function (data) {
|
||||
typecheck(data, template, function (err, data) {
|
||||
if (err) {
|
||||
sock.emit("errorMsg", {
|
||||
msg: "Unexpected error for message " + msg + ": " + err.message
|
||||
});
|
||||
} else {
|
||||
cb(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
sock.typecheckedOnce = function (msg, template, cb) {
|
||||
sock.once(msg, function (data) {
|
||||
typecheck(data, template, function (err, data) {
|
||||
if (err) {
|
||||
sock.emit("errorMsg", {
|
||||
msg: "Unexpected error for message " + msg + ": " + err.message
|
||||
});
|
||||
} else {
|
||||
cb(data);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var user = new User(sock);
|
||||
if (sock.handshake.user) {
|
||||
user.setFlag(Flags.U_REGISTERED);
|
||||
user.clearFlag(Flags.U_READY);
|
||||
user.refreshAccount({ name: sock.handshake.user.name },
|
||||
function (err, account) {
|
||||
if (err) {
|
||||
user.clearFlag(Flags.U_REGISTERED);
|
||||
user.setFlag(Flags.U_READY);
|
||||
return;
|
||||
}
|
||||
user.socket.emit("login", {
|
||||
success: true,
|
||||
name: user.getName(),
|
||||
guest: false
|
||||
});
|
||||
db.recordVisit(ip, user.getName());
|
||||
user.socket.emit("rank", user.account.effectiveRank);
|
||||
user.setFlag(Flags.U_LOGGED_IN);
|
||||
user.emit("login", account);
|
||||
Logger.syslog.log(ip + " logged in as " + user.getName());
|
||||
user.setFlag(Flags.U_READY);
|
||||
});
|
||||
user.socket.emit("rank", user.global_rank);
|
||||
Logger.syslog.log(ip + " logged in as " + user.name);
|
||||
} else {
|
||||
user.socket.emit("rank", -1);
|
||||
user.setFlag(Flags.U_READY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -133,15 +182,30 @@ module.exports = {
|
|||
if (id in srv.servers) {
|
||||
io = srv.ioServers[id] = sio.listen(srv.servers[id]);
|
||||
} else {
|
||||
io = srv.ioServers[id] = sio.listen(bind.port, bind.ip);
|
||||
if (net.isIPv6(bind.ip) || bind.ip === "::") {
|
||||
/**
|
||||
* Socket.IO won't bind to a v6 address natively.
|
||||
* Instead, we have to create a node HTTP server, bind it
|
||||
* to the desired address, then have socket.io listen on it
|
||||
*/
|
||||
io = srv.ioServers[id] = sio.listen(
|
||||
require("http").createServer().listen(bind.port, bind.ip)
|
||||
);
|
||||
} else {
|
||||
io = srv.ioServers[id] = sio.listen(bind.port, bind.ip);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (io) {
|
||||
io.set("log level", 1);
|
||||
io.set("authorization", handleAuth);
|
||||
io.on("connection", handleConnection);
|
||||
}
|
||||
});
|
||||
|
||||
sio.ioServers = Object.keys(srv.ioServers)
|
||||
.filter(Object.hasOwnProperty.bind(srv.ioServers))
|
||||
.map(function (k) { return srv.ioServers[k] });
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue