aboutsummaryrefslogtreecommitdiffstats
path: root/server/src/commands
diff options
context:
space:
mode:
authormarzavec <admin@marzavec.com>2018-06-03 20:08:35 +0200
committermarzavec <admin@marzavec.com>2018-06-03 20:08:35 +0200
commit62daa4893f374c1cbbecc63e4f1d4eec3fd29325 (patch)
treef5677c91c86efd60eb78d4c6b0258b17c1926074 /server/src/commands
parentMerge pull request #16 from OpSimple/master (diff)
downloadhackchat-62daa4893f374c1cbbecc63e4f1d4eec3fd29325.tar.gz
hackchat-62daa4893f374c1cbbecc63e4f1d4eec3fd29325.zip
Completed protocol decoupling
Diffstat (limited to 'server/src/commands')
-rw-r--r--server/src/commands/core/chat.js1
-rw-r--r--server/src/commands/core/disconnect.js21
-rw-r--r--server/src/commands/core/ping.js12
-rw-r--r--server/src/commands/internal/disconnect.js30
-rw-r--r--server/src/commands/internal/socketreply.js22
-rw-r--r--server/src/commands/mod/dumb.js14
-rw-r--r--server/src/commands/mod/speak.js11
7 files changed, 77 insertions, 34 deletions
diff --git a/server/src/commands/core/chat.js b/server/src/commands/core/chat.js
index 80241d5..168c0bb 100644
--- a/server/src/commands/core/chat.js
+++ b/server/src/commands/core/chat.js
@@ -48,6 +48,7 @@ exports.run = async (core, server, socket, data) => {
payload.trip = socket.trip;
}
+ // TODO: Add a more contained way for modules to interact, event hooks or something?
if(core.muzzledHashes && core.muzzledHashes[socket.hash]){
server.broadcast( payload, { channel: socket.channel, hash: socket.hash });
if(core.muzzledHashes[socket.hash].allies){
diff --git a/server/src/commands/core/disconnect.js b/server/src/commands/core/disconnect.js
deleted file mode 100644
index 9b54214..0000000
--- a/server/src/commands/core/disconnect.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- Description: This module will be directly called by the server event handler
- when a socket connection is closed or lost. It can calso be called
- by a client to have the connection severed.
-*/
-
-exports.run = async (core, server, socket, data) => {
- if (socket.channel) {
- server.broadcast({
- cmd: 'onlineRemove',
- nick: socket.nick
- }, { channel: socket.channel });
- }
-
- socket.terminate();
-};
-
-exports.info = {
- name: 'disconnect',
- description: 'Event handler or force disconnect (if your into that kind of thing)'
-}; \ No newline at end of file
diff --git a/server/src/commands/core/ping.js b/server/src/commands/core/ping.js
new file mode 100644
index 0000000..cf1d8a4
--- /dev/null
+++ b/server/src/commands/core/ping.js
@@ -0,0 +1,12 @@
+/*
+ Description: This module is only in place to supress error notices legacy sources may get
+*/
+
+exports.run = async (core, server, socket, data) => {
+ return;
+};
+
+exports.info = {
+ name: 'ping',
+ description: 'This module is only in place to supress error notices legacy sources may get'
+};
diff --git a/server/src/commands/internal/disconnect.js b/server/src/commands/internal/disconnect.js
new file mode 100644
index 0000000..bb3981b
--- /dev/null
+++ b/server/src/commands/internal/disconnect.js
@@ -0,0 +1,30 @@
+/*
+ Description: This module will be directly called by the server event handler
+ when a socket connection is closed or lost.
+*/
+
+exports.run = async (core, server, socket, data) => {
+ if (data.cmdKey !== server._cmdKey) {
+ // internal command attempt by client, increase rate limit chance and ignore
+ server._police.frisk(socket.remoteAddress, 20);
+
+ return;
+ }
+
+ if (socket.channel) {
+ server.broadcast({
+ cmd: 'onlineRemove',
+ nick: socket.nick
+ }, { channel: socket.channel });
+ }
+
+ socket.terminate();
+};
+
+exports.requiredData = ['cmdKey'];
+
+exports.info = {
+ name: 'disconnect',
+ usage: 'Internal Use Only',
+ description: 'Internally used to relay `onlineRemove` event to clients'
+};
diff --git a/server/src/commands/internal/socketreply.js b/server/src/commands/internal/socketreply.js
new file mode 100644
index 0000000..82834b7
--- /dev/null
+++ b/server/src/commands/internal/socketreply.js
@@ -0,0 +1,22 @@
+/*
+ Description: Used to relay warnings to clients internally
+*/
+
+exports.run = async (core, server, socket, data) => {
+ if (data.cmdKey !== server._cmdKey) {
+ // internal command attempt by client, increase rate limit chance and ignore
+ server._police.frisk(socket.remoteAddress, 20);
+
+ return;
+ }
+
+ server.reply({ cmd: 'warn', text: data.text }, socket);
+};
+
+exports.requiredData = ['cmdKey', 'text'];
+
+exports.info = {
+ name: 'socketreply',
+ usage: 'Internal Use Only',
+ description: 'Internally used to relay warnings to clients'
+};
diff --git a/server/src/commands/mod/dumb.js b/server/src/commands/mod/dumb.js
index ef2c5b2..0708fb8 100644
--- a/server/src/commands/mod/dumb.js
+++ b/server/src/commands/mod/dumb.js
@@ -1,4 +1,4 @@
-/*
+/*
* Description: Make a user (spammer) dumb
* Author: simple
*/
@@ -16,7 +16,7 @@ exports.run = async (core, server, socket, data) => {
if (typeof data.nick !== 'string') {
return;
}
-
+
let badClient = server.findSockets({ channel: socket.channel, nick: data.nick });
if (badClient.length === 0) {
@@ -38,20 +38,20 @@ exports.run = async (core, server, socket, data) => {
return;
}
-
+
let record = core.muzzledHashes[badClient.hash] = {
dumb:true
}
-
+
if(data.allies && Array.isArray(data.allies)){
record.allies = data.allies;
}
-
+
server.broadcast({
cmd: 'info',
text: `${socket.nick} muzzled ${data.nick} in ${socket.channel}, userhash: ${badClient.hash}`
}, { uType: 'mod' });
-
+
}
exports.requiredData = ['nick'];
@@ -59,5 +59,5 @@ exports.requiredData = ['nick'];
exports.info = {
name: 'dumb',
usage: 'dumb {nick} [allies...]',
- description: 'Cleanly disable a user messages and make him dumb'
+ description: 'Globally shadow mute a connection. Optional allies array will see muted messages.'
};
diff --git a/server/src/commands/mod/speak.js b/server/src/commands/mod/speak.js
index 422ad2c..643280b 100644
--- a/server/src/commands/mod/speak.js
+++ b/server/src/commands/mod/speak.js
@@ -1,9 +1,8 @@
-/*
+/*
* Description: Pardon a dumb user to be able to speak again
* Author: simple
*/
-
exports.run = async (core, server, socket, data) => {
if (socket.uType == 'user') {
// ignore if not mod or admin
@@ -18,7 +17,7 @@ exports.run = async (core, server, socket, data) => {
return;
}
-
+
let target;
if (typeof data.ip === 'string') {
@@ -26,14 +25,14 @@ exports.run = async (core, server, socket, data) => {
} else {
target = data.hash;
}
-
+
delete core.muzzledHashes[target];
-
+
server.broadcast({
cmd: 'info',
text: `${socket.nick} unmuzzled : ${target}`
}, { uType: 'mod' });
-
+
}
exports.info = {