From 69710d4c52e3ff89d791ec7777a0c3738609a9f4 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Tue, 6 Feb 2024 16:02:51 -0700 Subject: [PATCH 01/27] Cherry pick door fix --- core/door.js | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/core/door.js b/core/door.js index 6c9744073..49cbf72ec 100644 --- a/core/door.js +++ b/core/door.js @@ -161,16 +161,42 @@ module.exports = class Door { 'External door process spawned' ); + const exitHandler = () => { + if (this.sockServer) { + this.sockServer.close(); + } + + // we may not get a close + if ('stdio' === this.io) { + this.restoreIo(this.doorPty); + } + + if (this.doorPty) { + this.doorPty.removeAllListeners(); + delete this.doorPty; + } + + return callback(null); + }; + + this.doorPty.on('error', err => { + this.client.log.warn( + { error: err.message }, + 'Door exited with error' + ); + }); + if ('stdio' === this.io) { this.client.log.debug('Using stdio for door I/O'); this.client.term.output.pipe(this.doorPty); - this.doorPty.onData(this.doorDataHandler.bind(this)); + // dumb hack around node-pty; under nix, if we bail at the + // right time, listenerCount will be referenced, but does + // not exist! + this.doorPty.listenerCount = () => 1; - this.doorPty.onExit( (/*exitEvent*/) => { - return this.restoreIo(this.doorPty); - }); + this.doorPty.onData(this.doorDataHandler.bind(this)); } else if ('socket' === this.io) { this.client.log.debug( { @@ -184,20 +210,7 @@ module.exports = class Door { this.doorPty.onExit(exitEvent => { const {exitCode, signal} = exitEvent; this.client.log.info({ exitCode, signal }, 'Door exited'); - - if (this.sockServer) { - this.sockServer.close(); - } - - // we may not get a close - if ('stdio' === this.io) { - this.restoreIo(this.doorPty); - } - - this.doorPty.removeAllListeners(); - delete this.doorPty; - - return callback(null); + exitHandler(); }); }, ], From 4133d16290e187c4e1d864a28e3ba123fb86897f Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sun, 14 Jan 2024 15:52:24 -0700 Subject: [PATCH 02/27] Add missing function --- core/events.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/events.js b/core/events.js index 717b5c183..3b6ed8448 100644 --- a/core/events.js +++ b/core/events.js @@ -23,6 +23,10 @@ module.exports = new (class Events extends events.EventEmitter { return super.addListener(event, listener); } + listenerCount(event, listener) { + return super.listenerCount(event, listener); + } + emit(event, ...args) { Log.trace({ event: event }, 'Emitting event'); return super.emit(event, ...args); From 2042fe27d7f0e19936ae77eec8182e1e22f09b33 Mon Sep 17 00:00:00 2001 From: Notepid <1101091+notepid@users.noreply.github.com> Date: Tue, 19 Mar 2024 14:33:01 +0100 Subject: [PATCH 03/27] wsDuplex.setClient() must be called after the proxy headers and proxied is set so its set during constructor call or the proxy headers will not be applied --- core/servers/login/websocket.js | 37 +++++++++++++++++---------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/core/servers/login/websocket.js b/core/servers/login/websocket.js index de9e09aa9..5b2fec200 100644 --- a/core/servers/login/websocket.js +++ b/core/servers/login/websocket.js @@ -71,6 +71,25 @@ class WebSocketClient extends TelnetClient { })(ws); super(wsDuplex); + + Log.trace({ headers: req.headers }, 'WebSocket connection headers'); + + // + // If the config allows it, look for 'x-forwarded-proto' as "https" + // to override |isSecure| + // + if ( + true === _.get(Config(), 'loginServers.webSocket.proxied') && + 'https' === req.headers['x-forwarded-proto'] + ) { + Log.debug( + `Assuming secure connection due to X-Forwarded-Proto of "${req.headers['x-forwarded-proto']}"` + ); + this.proxied = true; + } else { + this.proxied = false; + } + wsDuplex.setClient(this, req); // fudge remoteAddress on socket, which is now TelnetSocket @@ -91,24 +110,6 @@ class WebSocketClient extends TelnetClient { ws.isConnectionAlive = true; }); - Log.trace({ headers: req.headers }, 'WebSocket connection headers'); - - // - // If the config allows it, look for 'x-forwarded-proto' as "https" - // to override |isSecure| - // - if ( - true === _.get(Config(), 'loginServers.webSocket.proxied') && - 'https' === req.headers['x-forwarded-proto'] - ) { - Log.debug( - `Assuming secure connection due to X-Forwarded-Proto of "${req.headers['x-forwarded-proto']}"` - ); - this.proxied = true; - } else { - this.proxied = false; - } - // start handshake process this.banner(); } From 3901cdb1acaf8afaa6061f9d3ac1e4e9e8a68de6 Mon Sep 17 00:00:00 2001 From: Notepid <1101091+notepid@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:39:57 +0100 Subject: [PATCH 04/27] Update websocket.md with fix for defCrsrAttr issue Documentation is wrong when it comes to configuring the VTX client. This cause me a bit of headache and googling, so would be nice to have the documentation updated. defCrsrAttr is an array not a number and it prevents the VTX client from running. Ref: https://github.com/NuSkooler/enigma-bbs/issues/500 --- docs/_docs/servers/loginservers/websocket.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/servers/loginservers/websocket.md b/docs/_docs/servers/loginservers/websocket.md index 511fb5221..52f69c3be 100644 --- a/docs/_docs/servers/loginservers/websocket.md +++ b/docs/_docs/servers/loginservers/websocket.md @@ -90,7 +90,7 @@ webserver, and unpack it to a temporary directory. xScale: 1, initStr: "", defPageAttr: 0x1010, - defCrsrAttr: 0x0207, + defCrsrAttr: ['thick', 'horizontal'], defCellAttr: 0x0007, telnet: 1, autoConnect: 0 From 78fa9395335793645f17e3f38a85a01ca4744966 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:20:47 +0000 Subject: [PATCH 05/27] Bump tar from 6.2.0 to 6.2.1 Bumps [tar](https://github.com/isaacs/node-tar) from 6.2.0 to 6.2.1. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v6.2.0...v6.2.1) --- updated-dependencies: - dependency-name: tar dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7903a9bda..eff50182f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2050,9 +2050,9 @@ systeminformation@5.21.7: integrity sha512-K3LjnajrazTLTD61+87DFg8IXFk5ljx6nSBqB8pQLtC1UPivAjDtTYGPZ8jaBFxcesPaCOkvLRtBq+RFscrsLw== tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" From 4be4fb73cd4185eb2f48856b0ebd5ea3c4f6ab1c Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Sat, 20 Jul 2024 12:19:34 -0400 Subject: [PATCH 06/27] Added SSL support --- core/config_default.js | 2 ++ core/servers/chat/mrc_multiplexer.js | 42 +++++++++++++++++++++++----- misc/config_template.in.hjson | 10 +++++-- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/core/config_default.js b/core/config_default.js index 7421afc74..5e6206017 100644 --- a/core/config_default.js +++ b/core/config_default.js @@ -365,6 +365,8 @@ module.exports = () => { enabled: false, serverHostname: 'mrc.bottomlessabyss.net', serverPort: 5000, + serverSslPort: 5001, + useSsl: false, retryDelay: 10000, multiplexerPort: 5000, }, diff --git a/core/servers/chat/mrc_multiplexer.js b/core/servers/chat/mrc_multiplexer.js index abdc64a41..8ce4c1045 100644 --- a/core/servers/chat/mrc_multiplexer.js +++ b/core/servers/chat/mrc_multiplexer.js @@ -15,7 +15,7 @@ const _ = require('lodash'); const os = require('os'); // MRC -const protocolVersion = '1.2.9'; +const clientVersion = '1.3.1'; const lineDelimiter = new RegExp('\r\n|\r|\n'); // eslint-disable-line no-control-regex const ModuleInfo = (exports.moduleInfo = { @@ -35,12 +35,24 @@ exports.getModule = class MrcModule extends ServerModule { this.log = Log.child({ server: 'MRC' }); const config = Config(); - this.boardName = config.general.prettyBoardName || config.general.boardName; - this.mrcConnectOpts = { + this.boardName = config.general.boardName; + + // Use prettyBoardName only if non-default + if (config.general.prettyBoardName != '|08XXXXX') this.boardName = config.general.prettyBoardName; + + this.mrcConfig = { host: config.chatServers.mrc.serverHostname || 'mrc.bottomlessabyss.net', port: config.chatServers.mrc.serverPort || 5000, + sslport: config.chatServers.mrc.serverSslPort || 5001, retryDelay: config.chatServers.mrc.retryDelay || 10000, + useSsl: config.chatServers.mrc.useSsl || false, }; + + this.mrcConnectOpts = { + host: this.mrcConfig.host, + port: this.mrcConfig.port, + retryDelay: this.mrcConfig.retryDelay + } } _connectionHandler() { @@ -48,7 +60,7 @@ exports.getModule = class MrcModule extends ServerModule { const handshake = `${ this.boardName - }~${enigmaVersion}/${os.platform()}.${os.arch()}/${protocolVersion}`; + }~${enigmaVersion}/${os.platform()}.${os.arch()}/${clientVersion}`; this.log.debug({ handshake: handshake }, 'Handshaking with MRC server'); this.sendRaw(handshake); @@ -96,13 +108,29 @@ exports.getModule = class MrcModule extends ServerModule { connectToMrc() { const self = this; - // create connection to MRC server - this.mrcClient = net.createConnection( + if (this.mrcConfig.useSsl) { + this.mrcConnectOpts.port = this.mrcConfig.sslport; + } + + console.log(this.mrcConnectOpts); + + // Create connection + this.mrcSocket = net.createConnection( this.mrcConnectOpts, self._connectionHandler.bind(self) ); - this.mrcClient.requestedDisconnect = false; + this.mrcSocket.requestedDisconnect = false; + + // Check if we upgrade the connection to SSL + if (this.mrcConfig.useSsl) { + const tls = require('tls') + this.mrcSecureSocket = new tls.TLSSocket(this.mrcSocket, { isServer: false }); + this.mrcClient = this.mrcSecureSocket; + } + else { + this.mrcClient = this.mrcSocket; + } // do things when we get data from MRC central let buffer = new Buffer.from(''); diff --git a/misc/config_template.in.hjson b/misc/config_template.in.hjson index 1a30842d7..9b83636ca 100644 --- a/misc/config_template.in.hjson +++ b/misc/config_template.in.hjson @@ -318,9 +318,13 @@ // Make sure to adjust 'prettyBoardName' to your liking in your config before enabling mrc: { - enabled : false - serverHostname : 'mrc.bottomlessabyss.net' - serverPort : 5000 + enabled : false + serverHostname : 'mrc.bottomlessabyss.net' + serverPort : 5000 + serverSslPort : 5001 + useSsl : false + retryDelay : 10000 + multiplexerPort : 5000 } } From d2bb99e8fa66b7ed5c7f6978b90b4132f14cee13 Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Sat, 20 Jul 2024 12:32:02 -0400 Subject: [PATCH 07/27] Removed debug artifact --- core/servers/chat/mrc_multiplexer.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/servers/chat/mrc_multiplexer.js b/core/servers/chat/mrc_multiplexer.js index 8ce4c1045..d39a9b5b6 100644 --- a/core/servers/chat/mrc_multiplexer.js +++ b/core/servers/chat/mrc_multiplexer.js @@ -112,8 +112,6 @@ exports.getModule = class MrcModule extends ServerModule { this.mrcConnectOpts.port = this.mrcConfig.sslport; } - console.log(this.mrcConnectOpts); - // Create connection this.mrcSocket = net.createConnection( this.mrcConnectOpts, From c24274e1f895ffebdf6b27f662109167e79a47e8 Mon Sep 17 00:00:00 2001 From: Bryan Ashby Date: Sat, 20 Jul 2024 21:20:32 -0600 Subject: [PATCH 08/27] Update config_template.in.hjson Enable SSL/TLS by default as this is available with node --- misc/config_template.in.hjson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/config_template.in.hjson b/misc/config_template.in.hjson index 9b83636ca..94fc02e64 100644 --- a/misc/config_template.in.hjson +++ b/misc/config_template.in.hjson @@ -322,7 +322,7 @@ serverHostname : 'mrc.bottomlessabyss.net' serverPort : 5000 serverSslPort : 5001 - useSsl : false + useSsl : true retryDelay : 10000 multiplexerPort : 5000 } From 316f8dfa59890bd62a387de171c13cde1f7f8ead Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 24 Aug 2024 11:18:24 +0200 Subject: [PATCH 09/27] Typo --- docs/_docs/modding/wfc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/modding/wfc.md b/docs/_docs/modding/wfc.md index 11638d275..78c3aefa1 100644 --- a/docs/_docs/modding/wfc.md +++ b/docs/_docs/modding/wfc.md @@ -62,7 +62,7 @@ The following MCI codes are available: * `affils`: Any affiliations related to the if `authenticated`, else "N/A". * `authenticated`: Boolean rather the node is authenticated (logged in) or not. * `availIndicator`: Indicator of availability (e.g. for messaging)? Displayed via `statusAvailableIndicators` or system theme. See also [Themes](../art/themes.md). - * `isAvailalbe`: Boolean rather the node is availalbe (e.g. for messaging) or not. + * `isAvailable`: Boolean rather the node is availalbe (e.g. for messaging) or not. * `isSecure`: Is the node securely connected (ie: SSL)? * `isVisible`: Boolean rather the node is visible to others or not. * `node`: The node ID. From 812338b4baa1eec756d2affab0bbd3df80e979b6 Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 24 Aug 2024 17:01:51 +0200 Subject: [PATCH 10/27] Typo --- docs/_docs/configuration/acs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/configuration/acs.md b/docs/_docs/configuration/acs.md index 6338f6f54..c22b82d57 100644 --- a/docs/_docs/configuration/acs.md +++ b/docs/_docs/configuration/acs.md @@ -7,7 +7,7 @@ title: Access Condition System (ACS) ENiGMA½ uses an Access Condition System (ACS) that is both familiar to oldschool BBS operators and has it's own style. With ACS, SysOp's are able to control access to various areas of the system based on various conditions such as group membership, connection type, etc. Various touch points in the system are configured to allow for `acs` checks. In some cases ACS is a simple boolean check while others (via ACS blocks) allow to define what conditions must be true for certain _rights_ such as `read` and `write` (though others exist as well). ## Group Membership -ENiGMA½ does not utilize legacy "security levels" (see note below) but instead utilizes a group system. Users may be long to one or more groups which can be checked by the `GM` ACS (See [ACS Codes](#acs-codes) below). Two special groups exist out of the box: +ENiGMA½ does not utilize legacy "security levels" (see note below) but instead utilizes a group system. Users may belong to one or more groups which can be checked by the `GM` ACS (See [ACS Codes](#acs-codes) below). Two special groups exist out of the box: 1. `users`: Any regular user 2. `sysops`: System Operators. The first user (your root, or admin) will alwasy belong to this group. From 4f92215b156c41e85cdb39d37e231a2ff0023aa1 Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 24 Aug 2024 18:04:21 +0200 Subject: [PATCH 11/27] Typos --- docs/_docs/modding/wfc.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/_docs/modding/wfc.md b/docs/_docs/modding/wfc.md index 78c3aefa1..4b57ad5f7 100644 --- a/docs/_docs/modding/wfc.md +++ b/docs/_docs/modding/wfc.md @@ -60,11 +60,11 @@ The following MCI codes are available: * `text`: Username or `*Pre Auth*`. * `action`: Current action/menu. * `affils`: Any affiliations related to the if `authenticated`, else "N/A". - * `authenticated`: Boolean rather the node is authenticated (logged in) or not. + * `authenticated`: Boolean whether the node is authenticated (logged in) or not. * `availIndicator`: Indicator of availability (e.g. for messaging)? Displayed via `statusAvailableIndicators` or system theme. See also [Themes](../art/themes.md). - * `isAvailable`: Boolean rather the node is availalbe (e.g. for messaging) or not. + * `isAvailable`: Boolean whether the node is available (e.g. for messaging) or not. * `isSecure`: Is the node securely connected (ie: SSL)? - * `isVisible`: Boolean rather the node is visible to others or not. + * `isVisible`: Boolean whether the node is visible to others or not. * `node`: The node ID. * `realName`: Real name of authenticated user, or "N/A". * `serverName`: Name of connected server such as "Telnet" or "SSH". @@ -90,7 +90,7 @@ The following MCI codes are available: * `quickLogLevelMessagePrefixes`: A **map** of log level names (see above) to message prefixes. Commonly used for changing message color with pipe codes, such as `|04` for red errors. * `message`: Log message. * `MT3` or `ET3`: Selected node status information. May be a single or multi line view. - * Set `nodeStatusSelectionFormat` to the format desired including `\n` for line feeds in as `MT` view. The availalbe format keys are the same as the node status list above. + * Set `nodeStatusSelectionFormat` to the format desired including `\n` for line feeds in as `MT` view. The available format keys are the same as the node status list above. * MCI 10...99: Custom entries with the following format keys available: * `nowDate`: Current date in the `dateFormat` style, defaulting to `short`. * `nowTime`: Current time in the `timeFormat` style, defaulting to `short`. @@ -121,7 +121,7 @@ The following MCI codes are available: * `systemCurrentLoad`: System current load. * `newPrivateMail`: Number of new **private** mail for current user. * `newMessagesAddrTo`: Number of new messages **addressed to the current user**. - * `availIndicator`: Is the current user availalbe? Displayed via `statusAvailableIndicators` or system theme. See also [Themes](../art/themes.md). + * `availIndicator`: Is the current user available? Displayed via `statusAvailableIndicators` or system theme. See also [Themes](../art/themes.md). * `visIndicator`: Is the current user visible? Displayed via `statusVisibleIndicators` or system theme. See also [Themes](../art/themes.md). * `processBytesIngress`: Ingress bytes since ENiGMA started. * `processBytesEgress`: Egress bytes since ENiGMA started. From 9f0249a9795bf2e5a2c3db272ed762ea0e2a672b Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 24 Aug 2024 18:05:49 +0200 Subject: [PATCH 12/27] Typos --- docs/_docs/art/mci.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/_docs/art/mci.md b/docs/_docs/art/mci.md index c1444f186..547beca2f 100644 --- a/docs/_docs/art/mci.md +++ b/docs/_docs/art/mci.md @@ -107,8 +107,8 @@ There are many predefined MCI codes that can be used anywhere on the system (pla | `NT` | Total *new* users *today* | | `NM` | Count of new messages **address to the current user** across all message areas in which they have access | | `NP` | Count of new private mail to the current user | -| `IA` | Indicator as to rather the current user is **available** or not. See also `getStatusAvailIndicators()` in [Themes](themes.md) | -| `IV` | Indicator as to rather the current user is **visible** or not. See also `getStatusVisibleIndicators()` in [Themes](themes.md) | +| `IA` | Indicator as to whether the current user is **available** or not. See also `getStatusAvailIndicators()` in [Themes](themes.md) | +| `IV` | Indicator as to whether the current user is **visible** or not. See also `getStatusVisibleIndicators()` in [Themes](themes.md) | | `PI` | Ingress bytes for the current process (since ENiGMA started up) | | `PE` | Egress bytes for the current process (since ENiGMA started up) | From db528715729f3e67bd84e9f2fe2462fbeb9cca55 Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Tue, 27 Aug 2024 07:44:41 -0400 Subject: [PATCH 13/27] Fixed issue on URL resolver message Moved user_to uppercase to a different function --- core/servers/chat/mrc_multiplexer.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/servers/chat/mrc_multiplexer.js b/core/servers/chat/mrc_multiplexer.js index d39a9b5b6..d11488d15 100644 --- a/core/servers/chat/mrc_multiplexer.js +++ b/core/servers/chat/mrc_multiplexer.js @@ -245,8 +245,7 @@ exports.getModule = class MrcModule extends ServerModule { connectedSockets.forEach(client => { if ( message.to_user == '' || - // Fix PrivMSG delivery on case mismatch - message.to_user.toUpperCase() == client.username.toUpperCase() || + message.to_user == client.username.toUpperCase() || message.to_user == 'CLIENT' || message.from_user == client.username || message.to_user == 'NOTME' @@ -336,6 +335,13 @@ exports.getModule = class MrcModule extends ServerModule { // return; // } + // Make sure to_user is always uppercase + try { + let to_user_uc = to_user.toUpperCase(); + to_user = to_user_uc; + } + catch (e) {} + return { from_user, from_site, from_room, to_user, to_site, to_room, body }; } From 93fd2e2d8e9ddbd9740736dd4a51dd8ec937d0bb Mon Sep 17 00:00:00 2001 From: "Alex S." <52931605+chilledtonic@users.noreply.github.com> Date: Tue, 27 Aug 2024 09:46:20 -0600 Subject: [PATCH 14/27] Update README.md - Magiterm Updated README reference to Magiterm, removing old dead link and instead listing the most recent development build on their Gitlab. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96292c142..88c269a99 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ ENiGMA has been tested with many terminals. However, the following are suggested * [SyncTERM](http://syncterm.bbsdev.net/) * [EtherTerm](https://github.com/M-griffin/EtherTerm) * [NetRunner](http://mysticbbs.com/downloads.html) -* [MagiTerm](https://magickabbs.com/index.php/magiterm/) +* [MagiTerm](https://gitlab.com/magickabbs/MagiTerm) ## Some Boards * :skull: [Xibalba - ENiGMA WHQ](https://l33t.codes/xibalba-bbs) :skull: (**ssh://xibalba.l33t.codes:44511** or **telnet://xibalba.l33t.codes:44510**) From abad04af7315318b5347079866bc191b3cda4e6b Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Tue, 27 Aug 2024 19:31:05 +0200 Subject: [PATCH 15/27] Textual changes --- docs/_docs/messageareas/netmail.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/_docs/messageareas/netmail.md b/docs/_docs/messageareas/netmail.md index f43c2a4b1..dd8faedc8 100644 --- a/docs/_docs/messageareas/netmail.md +++ b/docs/_docs/messageareas/netmail.md @@ -2,11 +2,11 @@ layout: page title: Netmail --- -ENiGMA support import and export of Netmail from the Private Mail area. `RiPuk @ 21:1/136` and `RiPuk <21:1/136>` 'To' address formats are supported. +ENiGMA supports import and export of Netmail from the Private Mail area. `RiPuk @ 21:1/136` and `RiPuk <21:1/136>` 'To' address formats are supported. ## Netmail Routing -A configuration block must be added to the `scannerTossers::ftn_bso` `config.hjson` section to tell the ENiGMA½ tosser where to route NetMail. +A configuration block must be added to the `scannerTossers::ftn_bso` section in `config.hjson` to tell the ENiGMA½ tosser where to route NetMail. The following configuration would tell ENiGMA½ to route all netmail addressed to 21:* through 21:1/100, and all 46:* netmail through 46:1/100: From 5b6fc321e2049012199e11bf9e4e811e8a717e0c Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Tue, 27 Aug 2024 13:55:40 -0400 Subject: [PATCH 16/27] Removed temp var --- core/servers/chat/mrc_multiplexer.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/servers/chat/mrc_multiplexer.js b/core/servers/chat/mrc_multiplexer.js index d11488d15..bcbc52ef5 100644 --- a/core/servers/chat/mrc_multiplexer.js +++ b/core/servers/chat/mrc_multiplexer.js @@ -337,8 +337,7 @@ exports.getModule = class MrcModule extends ServerModule { // Make sure to_user is always uppercase try { - let to_user_uc = to_user.toUpperCase(); - to_user = to_user_uc; + to_user = to_user.toUpperCase(); } catch (e) {} From 3210822fb3bead6eb45cb5d959fcc6703e7780a6 Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Tue, 27 Aug 2024 20:15:50 +0200 Subject: [PATCH 17/27] Describing maxMessages and maxAgeDays --- docs/_docs/messageareas/configuring-a-message-area.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/_docs/messageareas/configuring-a-message-area.md b/docs/_docs/messageareas/configuring-a-message-area.md index 2214e4373..a3684b83d 100644 --- a/docs/_docs/messageareas/configuring-a-message-area.md +++ b/docs/_docs/messageareas/configuring-a-message-area.md @@ -53,10 +53,14 @@ Message Areas are topic specific containers for messages that live within a part | `desc` | :+1: | Friendly area description. | | `sort` | :-1: | Set to a number to override the default alpha-numeric sort order based on the `name` field. | | `default` | :-1: | Specify `true` to make this the default area (e.g. assigned to new users) | -| `acs` | :-1: | A standard [ACS](../configuration/acs.md) block. See **ACS** below. | +| `acs` | :-1: | A standard [ACS](../configuration/acs.md) block. See **ACS** below. | +| `maxMessages` | :-1: | The maximum number of messages to keep in the area. Defaults to `1024`. | +| `maxAgeDays` | :-1: | The maximum age of messages to keep in the area. Defaults to `0`, which means unlimited. | | `autoSignatures` | :-1: | Set to `false` to disable auto-signatures in this area. | | `realNames` | :-1: | Set to `true` to use real names in this area. | +The default values for `maxMessages` and `maxAgeDays` can be changed globally in `core/config_default.js`, they're located in the section `messageAreaDefaults`. + ### ACS An optional standard [ACS](../configuration/acs.md) block can be supplied with the following rules: * `read`: ACS required to read (see) this area. Defaults to `GM[users]`. @@ -74,6 +78,8 @@ messageConferences: { desc: ENiGMA 1/2 development and discussion! sort: 1 default: true + maxMessages: 2000 // keep at most 2000 messages + maxAgeDays: 365 // delete anything older than 1 year acs: { read: GM[users] // default write: GM[l33t] // super elite ENiGMA 1/2 users! From c8b2ef7f582d8b34066164d5a464a618d9e9d261 Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Tue, 27 Aug 2024 20:58:38 +0200 Subject: [PATCH 18/27] Default Maintenance Tasks in administration.md --- docs/_docs/admin/administration.md | 5 ++++- docs/_docs/messageareas/configuring-a-message-area.md | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/_docs/admin/administration.md b/docs/_docs/admin/administration.md index 8988aea4b..dee6b055c 100644 --- a/docs/_docs/admin/administration.md +++ b/docs/_docs/admin/administration.md @@ -33,7 +33,10 @@ done ### Backup Tools There are many backup solutions available across all platforms. Configuration of such tools is outside the scope of this documentation. With that said, the author has had great success with [Borg](https://www.borgbackup.org/). -## General Maintenance Tasks +## General Maintenance +### Default Maintenance Tasks +Several default maintenance tasks are defined as events in `core/config_default.js`, in the section `eventScheduler`. These events run at various times and perform several maintenance tasks. An example is the `trimMessageAreas` event, which is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is run. + ### Vacuuming Database Files SQLite database files become less performant over time and waste space. It is recommended to periodically vacuum your databases. Before proceeding, you should make a backup! diff --git a/docs/_docs/messageareas/configuring-a-message-area.md b/docs/_docs/messageareas/configuring-a-message-area.md index a3684b83d..708d69d01 100644 --- a/docs/_docs/messageareas/configuring-a-message-area.md +++ b/docs/_docs/messageareas/configuring-a-message-area.md @@ -59,7 +59,7 @@ Message Areas are topic specific containers for messages that live within a part | `autoSignatures` | :-1: | Set to `false` to disable auto-signatures in this area. | | `realNames` | :-1: | Set to `true` to use real names in this area. | -The default values for `maxMessages` and `maxAgeDays` can be changed globally in `core/config_default.js`, they're located in the section `messageAreaDefaults`. +The default values for `maxMessages` and `maxAgeDays` can be changed globally in `core/config_default.js`, they're located in the section `messageAreaDefaults`. The same file also defines several default events to be scheduled, which are located under `eventScheduler`. For example, the `trimMessageAreas` event is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is run. ### ACS An optional standard [ACS](../configuration/acs.md) block can be supplied with the following rules: From 1ff1e3efa12229b55cd5ed635410435b769815db Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:00:59 +0200 Subject: [PATCH 19/27] run -> performed --- docs/_docs/admin/administration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/admin/administration.md b/docs/_docs/admin/administration.md index dee6b055c..979dfe70c 100644 --- a/docs/_docs/admin/administration.md +++ b/docs/_docs/admin/administration.md @@ -35,7 +35,7 @@ There are many backup solutions available across all platforms. Configuration of ## General Maintenance ### Default Maintenance Tasks -Several default maintenance tasks are defined as events in `core/config_default.js`, in the section `eventScheduler`. These events run at various times and perform several maintenance tasks. An example is the `trimMessageAreas` event, which is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is run. +Several default maintenance tasks are defined as events in `core/config_default.js`, in the section `eventScheduler`. These events run at various times and perform several maintenance tasks. An example is the `trimMessageAreas` event, which is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is performed. ### Vacuuming Database Files SQLite database files become less performant over time and waste space. It is recommended to periodically vacuum your databases. Before proceeding, you should make a backup! From ae6ecdee48b994d15ee9714d174adc8a0d2f16fb Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:01:54 +0200 Subject: [PATCH 20/27] run -> performed --- docs/_docs/messageareas/configuring-a-message-area.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_docs/messageareas/configuring-a-message-area.md b/docs/_docs/messageareas/configuring-a-message-area.md index 708d69d01..336d64dd4 100644 --- a/docs/_docs/messageareas/configuring-a-message-area.md +++ b/docs/_docs/messageareas/configuring-a-message-area.md @@ -59,7 +59,7 @@ Message Areas are topic specific containers for messages that live within a part | `autoSignatures` | :-1: | Set to `false` to disable auto-signatures in this area. | | `realNames` | :-1: | Set to `true` to use real names in this area. | -The default values for `maxMessages` and `maxAgeDays` can be changed globally in `core/config_default.js`, they're located in the section `messageAreaDefaults`. The same file also defines several default events to be scheduled, which are located under `eventScheduler`. For example, the `trimMessageAreas` event is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is run. +The default values for `maxMessages` and `maxAgeDays` can be changed globally in `core/config_default.js`, they're located in the section `messageAreaDefaults`. The same file also defines several default events to be scheduled, which are located under `eventScheduler`. For example, the `trimMessageAreas` event is run every 24 hours and defines that the action `trimMessageAreasScheduledEvent` is performed. ### ACS An optional standard [ACS](../configuration/acs.md) block can be supplied with the following rules: From 27937ed14b7ff1d1ec7c4283a45853240edef2dd Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Tue, 27 Aug 2024 15:36:17 -0400 Subject: [PATCH 21/27] Several fixes - Added msg delay on connect to space out commands - Fixed linewrap issue - Added MRC Trust verbs - Added PM local echo - Fixed to_user and from_user uppercase --- core/mrc.js | 68 ++++++++++++++++++++-------- core/servers/chat/mrc_multiplexer.js | 12 ++--- 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/core/mrc.js b/core/mrc.js index 11533dbd2..327029535 100644 --- a/core/mrc.js +++ b/core/mrc.js @@ -275,21 +275,7 @@ exports.getModule = class mrcModule extends MenuModule { const chatLogView = this.viewControllers.mrcChat.getView( MciViewIds.mrcChat.chatLog ); - const messageLength = stripMciColorCodes(msg).length; - const chatWidth = chatLogView.dimens.width; - let padAmount = 0; - let spaces = 2; - - if (messageLength > chatWidth) { - padAmount = chatWidth - (messageLength % chatWidth) - spaces; - } else { - padAmount = chatWidth - messageLength - spaces; - } - - if (padAmount < 0) padAmount = 0; - - const padding = ' |00' + ' '.repeat(padAmount); - chatLogView.addText(pipeToAnsi(msg + padding)); + chatLogView.addText(pipeToAnsi(msg)); if (chatLogView.getLineCount() > this.config.maxScrollbackLines) { chatLogView.deleteLine(0); @@ -380,7 +366,7 @@ exports.getModule = class mrcModule extends MenuModule { // Deliver PrivMsg else if ( - message.to_user.toLowerCase() == this.state.alias.toLowerCase() + message.to_user.toUpperCase() == this.state.alias.toUpperCase() ) { const currentTime = moment().format( this.client.currentTheme.helpers.getTimeFormat() @@ -450,6 +436,14 @@ exports.getModule = class mrcModule extends MenuModule { } else { // pm formattedMessage = stringFormat(privateMessageFormat, textFormatObj); + + // Echo PrivMSG to chat log (the server does not echo it back) + const currentTime =moment().format( + this.client.currentTheme.helpers.getTimeFormat() + ); + this.addMessageToChatLog( + '|08' + currentTime + '|00 ' + formattedMessage + '|00' + ); } try { @@ -562,6 +556,7 @@ exports.getModule = class mrcModule extends MenuModule { /** * Process known additional server commands directly */ + case 'afk': this.sendServerMessage(`AFK ${message.substr(5)}`); break; @@ -594,6 +589,30 @@ exports.getModule = class mrcModule extends MenuModule { this.sendServerMessage(cmd[0].toUpperCase()); break; + /** + * MRC Trust commands + */ + + case 'trust': + this.sendServerMessage(`REGISTER ${message.substr(7)}`); + break; + + case 'register': + this.sendServerMessage(`REGISTER ${message.substr(10)}`); + break; + + case 'identify': + this.sendServerMessage(`IDENTIFY ${message.substr(10)}`); + break; + + case 'update': + this.sendServerMessage(`UPDATE ${message.substr(8)}`); + break; + + /** + * Local client commands + */ + case 'quit': return this.prevMenu(); @@ -665,13 +684,26 @@ exports.getModule = class mrcModule extends MenuModule { this.sendServerMessage('USERLIST'); } + /** + * MRC Server flood protection requires messages to be spaced in time + */ + msgDelay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + /** * Things that happen when a local user connects to the MRC multiplexer */ - clientConnect() { + async clientConnect() { + this.sendHeartbeat(); + await this.msgDelay(100); + this.sendServerMessage('MOTD'); + await this.msgDelay(100); + this.joinRoom('lobby'); + await this.msgDelay(100); + this.sendServerMessage('STATS'); - this.sendHeartbeat(); } }; diff --git a/core/servers/chat/mrc_multiplexer.js b/core/servers/chat/mrc_multiplexer.js index bcbc52ef5..c0d7827a8 100644 --- a/core/servers/chat/mrc_multiplexer.js +++ b/core/servers/chat/mrc_multiplexer.js @@ -16,7 +16,7 @@ const os = require('os'); // MRC const clientVersion = '1.3.1'; -const lineDelimiter = new RegExp('\r\n|\r|\n'); // eslint-disable-line no-control-regex +const lineDelimiter = new RegExp('\r\n|\r|\n|\n\r'); // eslint-disable-line no-control-regex const ModuleInfo = (exports.moduleInfo = { name: 'MRC', @@ -327,7 +327,7 @@ exports.getModule = class MrcModule extends ServerModule { * Takes an MRC message and parses it into something usable */ parseMessage(line) { - const [from_user, from_site, from_room, to_user, to_site, to_room, body] = + let [from_user, from_site, from_room, to_user, to_site, to_room, body] = line.split('~'); // const msg = line.split('~'); @@ -335,11 +335,9 @@ exports.getModule = class MrcModule extends ServerModule { // return; // } - // Make sure to_user is always uppercase - try { - to_user = to_user.toUpperCase(); - } - catch (e) {} + // Make sure to_user and from_user are always uppercase + to_user = (to_user || '').toUpperCase(); + from_user = (from_user || '').toUpperCase(); return { from_user, from_site, from_room, to_user, to_site, to_room, body }; } From 1852cfe853373809d2b247e21ae4fb19ef0909fd Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:16:43 +0200 Subject: [PATCH 22/27] More elaborate example for db vacuuming --- docs/_docs/admin/administration.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/_docs/admin/administration.md b/docs/_docs/admin/administration.md index 979dfe70c..2f598a3e2 100644 --- a/docs/_docs/admin/administration.md +++ b/docs/_docs/admin/administration.md @@ -42,5 +42,7 @@ SQLite database files become less performant over time and waste space. It is re Example: ```bash -sqlite3 ./db/message.sqlite3 "vacuum;" +for dbfile in /path/to/enigma-bbs/db/*.sqlite3; do + sqlite3 ./db/message.sqlite3 "vacuum;" +done ``` From b97018b11a0eedbbed7ed09d4fe263b922719dc1 Mon Sep 17 00:00:00 2001 From: voipmeister <12763807+voipmeister@users.noreply.github.com> Date: Sat, 31 Aug 2024 13:24:21 +0200 Subject: [PATCH 23/27] Updated manual installation doc --- docs/_docs/installation/manual.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/_docs/installation/manual.md b/docs/_docs/installation/manual.md index 2b4c40b0e..fd60b8a88 100644 --- a/docs/_docs/installation/manual.md +++ b/docs/_docs/installation/manual.md @@ -22,21 +22,22 @@ are OK) for Windows users. Note that you **should only need the Visual C++ compo Node Version Manager (NVM) is an excellent way to install and manage Node.js versions on most UNIX-like environments. [Get the latest version here](https://github.com/creationix/nvm). The nvm install may look _something_ like this: ```bash -curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash ``` > :information_source: Do not cut+paste the above command! Visit the [NVM](https://github.com/creationix/nvm) page and run the latest version! Next, install Node.js with NVM: ```bash -nvm install 14 -nvm use 14 -nvm alias default 14 +nvm install 18 +nvm use 18 +nvm alias default 18 ``` If the above steps completed without errors, you should now have `nvm`, `node`, and `npm` installed and in your environment. For Windows nvm-like systems exist ([nvm-windows](https://github.com/coreybutler/nvm-windows), ...) or [just download the installer](https://nodejs.org/en/download/). +> :information_source: Please note that Node v18 is the latest release that is supported for ENiGMA BBS. Support for Node v20 is being worked on in [this Github issue](https://github.com/NuSkooler/enigma-bbs/issues/539). ## ENiGMA BBS ```bash @@ -48,6 +49,7 @@ git clone https://github.com/NuSkooler/enigma-bbs.git cd enigma-bbs npm install # yarn also works ``` +> :information_source: At the moment you might see a few warnings about packages being deprecated or replaced. This is a known issue that will be resolved in the future. ## Other Recommended Packages ENiGMA BBS makes use of a few packages for archive and legacy protocol support. They're not pre-requisites for running ENiGMA, but without them you'll miss certain functionality. Once installed, they should be made available on your systems `PATH`. From cf712d3c62831748425d6d3049f8c843a7c7b5b9 Mon Sep 17 00:00:00 2001 From: Stack Fault Date: Sat, 31 Aug 2024 12:35:01 -0400 Subject: [PATCH 24/27] Command aliasing + additional passthru cmds Fixed previously added passthru (TRUST) Fixed trailing PIPE code sent to server unnecessarily --- core/mrc.js | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/core/mrc.js b/core/mrc.js index 327029535..835e48bfe 100644 --- a/core/mrc.js +++ b/core/mrc.js @@ -47,7 +47,7 @@ const MciViewIds = { const helpText = ` |15General Chat|08: |03/|11rooms |08& |03/|11join |03 |08- |07List all or join a room -|03/|11pm |03 |08- |07Send a private message +|03/|11pm |03 |08- |07Send a private message |08(/t /tell /msg) ---- |03/|11whoon |08- |07Who's on what BBS |03/|11chatters |08- |07Who's in what room @@ -57,6 +57,7 @@ const helpText = ` |03/|11meetups |08- |07Info about MRC MeetUps |03/|11quote |08- |07Send raw command to server |03/|11help |08- |07Server-side commands help +|03/|11quit |08- |07Quit MRC |08(/q) --- |03/|11l33t |03 |08- |07l337 5p34k |03/|11kewl |03 |08- |07BBS KeWL SPeaK @@ -423,11 +424,11 @@ exports.getModule = class mrcModule extends MenuModule { const messageFormat = this.config.messageFormat || - '|00|10<|02{fromUserName}|10>|00 |03{message}|00'; + '|00|10<|02{fromUserName}|10>|00 |03{message}'; const privateMessageFormat = this.config.outgoingPrivateMessageFormat || - '|00|10<|02{fromUserName}|10|14->|02{toUserName}>|00 |03{message}|00'; + '|00|10<|02{fromUserName}|10|14->|02{toUserName}>|00 |03{message}'; let formattedMessage = ''; if (to_user == undefined) { @@ -471,6 +472,9 @@ exports.getModule = class mrcModule extends MenuModule { cmd[0] = cmd[0].substr(1).toLowerCase(); switch (cmd[0]) { + case 't': + case 'tell': + case 'msg': case 'pm': const newmsg = cmd.slice(2).join(' '); this.processOutgoingMessage(newmsg, cmd[1]); @@ -573,6 +577,10 @@ exports.getModule = class mrcModule extends MenuModule { this.sendServerMessage(`STATUS ${message.substr(8)}`); break; + case 'topics': + this.sendServerMessage(`TOPICS ${message.substr(8)}`); + break; + case 'lastseen': this.sendServerMessage(`LASTSEEN ${message.substr(10)}`); break; @@ -594,7 +602,7 @@ exports.getModule = class mrcModule extends MenuModule { */ case 'trust': - this.sendServerMessage(`REGISTER ${message.substr(7)}`); + this.sendServerMessage(`TRUST ${message.substr(7)}`); break; case 'register': @@ -613,6 +621,7 @@ exports.getModule = class mrcModule extends MenuModule { * Local client commands */ + case 'q': case 'quit': return this.prevMenu(); @@ -640,6 +649,13 @@ exports.getModule = class mrcModule extends MenuModule { chatLogView.setText(''); } + /** + * MRC Server flood protection requires messages to be spaced in time + */ + msgDelay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + /** * Creates a json object, stringifies it and sends it to the MRC multiplexer */ @@ -676,19 +692,14 @@ exports.getModule = class mrcModule extends MenuModule { /** * Joins a room, unsurprisingly */ - joinRoom(room) { + async joinRoom(room) { // room names are displayed with a # but referred to without. confusing. room = room.replace(/^#/, ''); this.state.room = room; this.sendServerMessage(`NEWROOM:${this.state.room}:${room}`); - this.sendServerMessage('USERLIST'); - } - /** - * MRC Server flood protection requires messages to be spaced in time - */ - msgDelay(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); + await this.msgDelay(100); + this.sendServerMessage('USERLIST'); } /** @@ -698,9 +709,6 @@ exports.getModule = class mrcModule extends MenuModule { this.sendHeartbeat(); await this.msgDelay(100); - this.sendServerMessage('MOTD'); - await this.msgDelay(100); - this.joinRoom('lobby'); await this.msgDelay(100); From 3914c2d931fb9f78ffedce18afc5ba5aaec9e499 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 31 Aug 2024 17:27:39 +0000 Subject: [PATCH 25/27] Bump nokogiri from 1.15.4 to 1.16.5 in /docs Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.15.4 to 1.16.5. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.15.4...v1.16.5) --- updated-dependencies: - dependency-name: nokogiri dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 8176ae451..84b12b3c2 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -77,14 +77,14 @@ GEM rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.4.0) minitest (5.19.0) - nokogiri (1.15.4-aarch64-linux) + nokogiri (1.16.5-aarch64-linux) racc (~> 1.4) - nokogiri (1.15.4-x86_64-linux) + nokogiri (1.16.5-x86_64-linux) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (5.0.3) - racc (1.7.1) + racc (1.8.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) From 928cc74a4524223dc8051aec04266e484f44b5cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 31 Aug 2024 17:27:42 +0000 Subject: [PATCH 26/27] Bump rexml from 3.2.6 to 3.3.6 in /docs Bumps [rexml](https://github.com/ruby/rexml) from 3.2.6 to 3.3.6. - [Release notes](https://github.com/ruby/rexml/releases) - [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md) - [Commits](https://github.com/ruby/rexml/compare/v3.2.6...v3.3.6) --- updated-dependencies: - dependency-name: rexml dependency-type: indirect ... Signed-off-by: dependabot[bot] --- docs/Gemfile.lock | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 8176ae451..e0fc44b96 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -88,11 +88,13 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - rexml (3.2.6) + rexml (3.3.6) + strscan rouge (3.30.0) safe_yaml (1.0.5) sassc (2.4.0) ffi (~> 1.9) + strscan (3.1.0) terminal-table (2.0.0) unicode-display_width (~> 1.1, >= 1.1.1) tzinfo (2.0.6) From 3bd4b8baadd82eff7c1a9d9bbad2d60f5766197e Mon Sep 17 00:00:00 2001 From: Tobias Rosenqvist Date: Mon, 7 Oct 2024 01:36:55 +0200 Subject: [PATCH 27/27] Update goldmine.js --- core/goldmine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/goldmine.js b/core/goldmine.js index f086616ee..8259a0098 100644 --- a/core/goldmine.js +++ b/core/goldmine.js @@ -25,8 +25,8 @@ exports.getModule = class GoldmineModule extends MenuModule { this.setConfigWithExtraArgs(options); // http://goldminebbs.com/ - this.config.host = this.config.host || '165.232.153.209'; - this.config.rloginPort = this.config.rloginPort || 513; + this.config.host = this.config.host || 'goldminedoors.com'; + this.config.rloginPort = this.config.rloginPort || 2513; } initSequence() {