mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-20 23:46:14 -04:00
Refactor SocketIORouter
This commit is contained in:
parent
0b2e1a0c31
commit
76e50e2c4d
1 changed files with 43 additions and 60 deletions
|
@ -48,88 +48,56 @@ exports.addComponent = function(moduleName, module)
|
||||||
/**
|
/**
|
||||||
* sets the socket.io and adds event functions for routing
|
* sets the socket.io and adds event functions for routing
|
||||||
*/
|
*/
|
||||||
exports.setSocketIO = function(_socket)
|
exports.setSocketIO = function(_socket) {
|
||||||
{
|
|
||||||
//save this socket internaly
|
//save this socket internaly
|
||||||
socket = _socket;
|
socket = _socket;
|
||||||
|
|
||||||
socket.sockets.on('connection', function(client)
|
socket.sockets.on('connection', function(client) {
|
||||||
{
|
|
||||||
client.set('remoteAddress', client.handshake.address.address);
|
client.set('remoteAddress', client.handshake.address.address);
|
||||||
var clientAuthorized = false;
|
var clientAuthorized = false;
|
||||||
|
|
||||||
//wrap the original send function to log the messages
|
//wrap the original send function to log the messages
|
||||||
client._send = client.send;
|
client._send = client.send;
|
||||||
client.send = function(message)
|
client.send = function(message) {
|
||||||
{
|
|
||||||
messageLogger.debug("to " + client.id + ": " + stringifyWithoutPassword(message));
|
messageLogger.debug("to " + client.id + ": " + stringifyWithoutPassword(message));
|
||||||
client._send(message);
|
client._send(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
//tell all components about this connect
|
//tell all components about this connect
|
||||||
for(var i in components)
|
for(var i in components) {
|
||||||
{
|
|
||||||
components[i].handleConnect(client);
|
components[i].handleConnect(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
//try to handle the message of this client
|
|
||||||
function handleMessage(message)
|
|
||||||
{
|
|
||||||
if(message.component && components[message.component])
|
|
||||||
{
|
|
||||||
//check if component is registered in the components array
|
|
||||||
if(components[message.component])
|
|
||||||
{
|
|
||||||
messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message));
|
|
||||||
components[message.component].handleMessage(client, message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
client.on('message', function(message)
|
client.on('message', function(message)
|
||||||
{
|
{
|
||||||
if(message.protocolVersion && message.protocolVersion != 2)
|
if(message.protocolVersion && message.protocolVersion != 2) {
|
||||||
{
|
|
||||||
messageLogger.warn("Protocolversion header is not correct:" + stringifyWithoutPassword(message));
|
messageLogger.warn("Protocolversion header is not correct:" + stringifyWithoutPassword(message));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//client is authorized, everything ok
|
//client is authorized, everything ok
|
||||||
if(clientAuthorized)
|
if(clientAuthorized) {
|
||||||
{
|
handleMessage(client, message);
|
||||||
handleMessage(message);
|
} else { //try to authorize the client
|
||||||
}
|
if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined) {
|
||||||
//try to authorize the client
|
//this message has everything to try an authorization
|
||||||
else
|
securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password,
|
||||||
{
|
function(err, statusObject) {
|
||||||
//this message has everything to try an authorization
|
ERR(err);
|
||||||
if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined)
|
|
||||||
{
|
|
||||||
securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password, function(err, statusObject)
|
|
||||||
{
|
|
||||||
ERR(err);
|
|
||||||
|
|
||||||
//access was granted, mark the client as authorized and handle the message
|
//access was granted, mark the client as authorized and handle the message
|
||||||
if(statusObject.accessStatus == "grant")
|
if(statusObject.accessStatus == "grant") {
|
||||||
{
|
clientAuthorized = true;
|
||||||
clientAuthorized = true;
|
handleMessage(client, message);
|
||||||
handleMessage(message);
|
}
|
||||||
|
//no access, send the client a message that tell him why
|
||||||
|
else {
|
||||||
|
messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message));
|
||||||
|
client.json.send({accessStatus: statusObject.accessStatus});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//no access, send the client a message that tell him why
|
);
|
||||||
else
|
} else { //drop message
|
||||||
{
|
|
||||||
messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message));
|
|
||||||
client.json.send({accessStatus: statusObject.accessStatus});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//drop message
|
|
||||||
else
|
|
||||||
{
|
|
||||||
messageLogger.warn("Dropped message cause of bad permissions:" + stringifyWithoutPassword(message));
|
messageLogger.warn("Dropped message cause of bad permissions:" + stringifyWithoutPassword(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,6 +114,21 @@ exports.setSocketIO = function(_socket)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//try to handle the message of this client
|
||||||
|
function handleMessage(client, message)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(message.component && components[message.component]) {
|
||||||
|
//check if component is registered in the components array
|
||||||
|
if(components[message.component]) {
|
||||||
|
messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message));
|
||||||
|
components[message.component].handleMessage(client, message);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//returns a stringified representation of a message, removes the password
|
//returns a stringified representation of a message, removes the password
|
||||||
//this ensures there are no passwords in the log
|
//this ensures there are no passwords in the log
|
||||||
function stringifyWithoutPassword(message)
|
function stringifyWithoutPassword(message)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue