Skip to content

Commit 5a2cb40

Browse files
committed
Disconnect both sockets on user report
1 parent b0cf707 commit 5a2cb40

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

server/sockets.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ var destructiveRateLimits = new Map();
4242
var constructiveRateLimits = new Map();
4343
/** @type {Map<string, Map<string, BoardUser>>} */
4444
var boardUsers = new Map();
45+
/** @type {Map<string, AppSocket>} */
46+
var activeSockets = new Map();
4547
var connectedUsersTotal = 0;
4648
/** @type {{
4749
* board: string,
@@ -492,6 +494,14 @@ function closeSocket(socket, eventName, infos) {
492494
socket.disconnect(true);
493495
}
494496

497+
/**
498+
* @param {string} socketId
499+
* @returns {AppSocket | undefined}
500+
*/
501+
function getActiveSocket(socketId) {
502+
return activeSockets.get(socketId);
503+
}
504+
495505
/**
496506
* @param {AppSocket} socket
497507
* @param {string} eventName
@@ -1071,6 +1081,8 @@ function getBoard(name) {
10711081
* @param {AppSocket} socket
10721082
*/
10731083
function handleSocketConnection(socket) {
1084+
activeSockets.set(socket.id, socket);
1085+
10741086
/**
10751087
* Function to call when an user joins a board
10761088
* @param {string} name
@@ -1480,6 +1492,23 @@ function handleSocketConnection(socket) {
14801492
reporter_name: lastUserReportLog.reporter_name,
14811493
reported_name: lastUserReportLog.reported_name,
14821494
});
1495+
1496+
var socketsToDisconnect = [socket];
1497+
var reportedSocket = getActiveSocket(reported.socketId);
1498+
if (reportedSocket && reportedSocket !== socket) {
1499+
socketsToDisconnect.push(reportedSocket);
1500+
}
1501+
1502+
socketsToDisconnect.forEach(
1503+
function disconnectReportedUser(
1504+
/** @type {AppSocket} */ targetSocket,
1505+
) {
1506+
closeSocket(targetSocket, "report_user", {
1507+
board: boardName,
1508+
socket: targetSocket.id,
1509+
});
1510+
},
1511+
);
14831512
},
14841513
);
14851514
}, "report_user"),
@@ -1488,6 +1517,7 @@ function handleSocketConnection(socket) {
14881517
socket.on(
14891518
"disconnecting",
14901519
function onDisconnecting(/** @type {string} */ reason) {
1520+
activeSockets.delete(socket.id);
14911521
socket.rooms.forEach(
14921522
async function disconnectFrom(/** @type {string} */ room) {
14931523
if (boards.hasOwnProperty(room)) {
@@ -1605,6 +1635,7 @@ if (exports) {
16051635
destructiveRateLimits.clear();
16061636
constructiveRateLimits.clear();
16071637
boardUsers.clear();
1638+
activeSockets.clear();
16081639
lastUserReportLog = null;
16091640
},
16101641
};

test-node/socket_users.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ test("report_user logs reporter and reported user details for active board membe
412412
});
413413
sockets.__test.handleSocketConnection(reporter.socket);
414414
await getRequiredHandler(reporter.handlers, "getboard")("board-report");
415+
const reporterEmitCountBeforeReport = reporter.emitted.length;
415416

416417
const reported = createSocket({
417418
id: "socket-reported",
@@ -429,6 +430,7 @@ test("report_user logs reporter and reported user details for active board membe
429430
});
430431
sockets.__test.handleSocketConnection(reported.socket);
431432
await getRequiredHandler(reported.handlers, "getboard")("board-report");
433+
const reportedEmitCountBeforeReport = reported.emitted.length;
432434

433435
getRequiredHandler(
434436
reporter.handlers,
@@ -448,6 +450,10 @@ test("report_user logs reporter and reported user details for active board membe
448450
assert.equal(reportedLog.reported_user_agent, "ReportedAgent/2.0");
449451
assert.equal(reportedLog.reporter_language, "fr-FR,fr;q=0.9");
450452
assert.equal(reportedLog.reported_language, "en-US,en;q=0.8");
453+
assert.deepEqual(reporter.socket.disconnectCalls, [true]);
454+
assert.deepEqual(reported.socket.disconnectCalls, [true]);
455+
assert.equal(reporter.emitted.length, reporterEmitCountBeforeReport);
456+
assert.equal(reported.emitted.length, reportedEmitCountBeforeReport);
451457
},
452458
);
453459
});

0 commit comments

Comments
 (0)