Sync up with master

This commit is contained in:
Bryan Ashby 2020-07-05 17:57:29 -06:00
commit 91166b7f6b
No known key found for this signature in database
GPG Key ID: B49EB437951D2542
19 changed files with 76 additions and 57 deletions

View File

@ -6,6 +6,7 @@ This document attempts to track **major** changes and additions in ENiGMA½. For
* The default configuration has been moved to [config_default.js](/core/config_default.js).
* A full configuration revamp has taken place. Configuration files such as `config.hjson`, `menu.hjson`, and `theme.hjson` can now utilize includes via the `includes` directive, reference 'self' sections using `@reference:` and import environment variables with `@environment`.
* An explicit prompt file previously specified by `general.promptFile` in `config.hjson` is no longer necessary. Instead, this now simply part of the `prompts` section in `menu.hjson`. The default setup still creates a separate prompt HJSON file, but it is `includes`ed in `menu.hjson`.
* New `PV` ACS check for arbitrary user properties. See [ACS](/docs/configuration/acs.md) for details.
## 0.0.11-beta
* Upgraded from `alpha` to `beta` -- The software is far along and mature enough at this point!

View File

@ -1055,6 +1055,14 @@ function peg$parse(input, options) {
}
const points = user.getPropertyAsNumber(UserProps.AchievementTotalPoints) || 0;
return !isNan(value) && points >= value;
},
PV : function userPropValue() {
if (!user || !Array.isArray(value) || value.length !== 2) {
return false;
}
const [propName, propValue] = value;
const actualPropValue = user.getProperty(propName);
return actualPropValue === propValue;
}
}[acsCode](value);
} catch (e) {

View File

@ -60,13 +60,14 @@ exports.getModule = class MessageListModule extends MessageAreaConfTempSwitcher(
this.menuMethods = {
selectMessage : (formData, extraArgs, cb) => {
if(MciViewIds.allViews.msgList === formData.submitId) {
this.initialFocusIndex = formData.value.message;
this.initialFocusIndex = formData.value.messageIndex ||
formData.value.message; // older deprecated arg name
const modOpts = {
extraArgs : {
messageAreaTag : this.getSelectedAreaTag(formData.value.message),
messageAreaTag : this.getSelectedAreaTag(this.initialFocusIndex),
messageList : this.config.messageList,
messageIndex : formData.value.message,
messageIndex : this.initialFocusIndex,
lastMessageNextExit : true,
}
};
@ -107,7 +108,8 @@ exports.getModule = class MessageListModule extends MessageAreaConfTempSwitcher(
if(MciViewIds.allViews.msgList != formData.submitId) {
return cb(null);
}
const messageIndex = _.get(formData, 'value.message');
const messageIndex = formData.value.messageIndex ||
formData.value.message; // older, deprecated arg name
return this.promptDeleteMessageConfirm(messageIndex, cb);
},
deleteMessageYes : (formData, extraArgs, cb) => {

View File

@ -39,9 +39,10 @@ The following are ACS codes available as of this writing:
| AP<i>achievementPoints</i> | User has >= _achievementPoints_ achievement points |
| AF<i>authFactor</i> | User's current *Authentication Factor* is >= _authFactor_. Authentication factor 1 refers to username + password (or PubKey) while factor 2 refers to 2FA such as One-Time-Password authentication. |
| AR<i>authFactorReq</i> | Current user **requires** an Authentication Factor >= _authFactorReq_ |
| PV[_name,_value_] | Checks that the property by _name_ for the current user is exactly _value_. This ACS allows arbitrary user property values to be checked. For example, `PV[message_conf,local]` checks that the user is currently in the "local" message conference.
## ACS Strings
ACS strings are one or more ACS codes in addition to some basic language semantics.
ACS strings are one or more ACS codes in addition to some basic language semantics.
The following logical operators are supported:
* `!` NOT

View File

@ -24,12 +24,12 @@ The following archivers are pre-configured in ENiGMA½ as of this writing. Remem
#### Lha
* Formats: <a href="https://en.wikipedia.org/wiki/LHA_(file_format)">LHA</a> files such as .lzh.
* Key: `Lha`
* Homepage/package: `lhasa` on most UNIX-like environments. See also https://fragglet.github.io/lhasa/ and http://www2m.biglobe.ne.jp/~dolphin/lha/lha-unix.htm
* Homepage/package: `lhasa` on most UNIX-like environments. See also https://fragglet.github.io/lhasa/ and https://web.archive.org/web/20191023045303/http://www2m.biglobe.ne.jp/~dolphin/lha/lha-unix.htm
#### Lzx
* Formats: <a href="https://en.wikipedia.org/wiki/LZX_(algorithm)#Amiga_LZX">Amiga LZX</a>
* Key: `Lzx`
* Homepage/package: `unlzx` under most UNIX-like platforms ([Debian/Ubuntu](https://launchpad.net/~rzr/+archive/ubuntu/ppa/+build/2486127), [RedHat](https://fedora.pkgs.org/28/rpm-sphere/unlzx-1.1-4.1.x86_64.rpm.html), [Source](http://xavprods.free.fr/lzx/))
* Homepage/package: `unlzx` under most UNIX-like platforms ([Debian/Ubuntu](https://launchpad.net/~rzr/+archive/ubuntu/ppa/+build/2486127), [RedHat](https://fedora.pkgs.org/32/rpm-sphere-x86_64/unlzx-1.1-4.1.x86_64.rpm.html), [Source](http://xavprods.free.fr/lzx/))
#### Arj
* Formats: .arj
@ -85,4 +85,4 @@ zip: {
handler: 7Zip /* points to a defined archiver */
desc: "ZIP Archive"
}
```
```

View File

@ -2,7 +2,7 @@
layout: page
title: Colour Codes
---
ENiGMA½ supports Renegade-style pipe colour codes for formatting strings. You'll see them used throughout your configuration, and can also be used in places like the oneliner, rumour mod, full screen editor etc.
ENiGMA½ supports Renegade-style pipe colour codes for formatting strings. You'll see them used throughout your configuration, and can also be used in places like onelinerz, rumourz, full screen editor etc.
## Usage
When ENiGMA½ encounters colour codes in strings, they'll be processed in order and combined where possible.

View File

@ -6,7 +6,7 @@ title: TIC Support
ENiGMA½ supports FidoNet-Style TIC file attachments by mapping TIC areas to local file areas.
Under a given node defined in the `ftn_bso` config section in `config.hjson` (see
[BSO Import/Export](../messageareas/bso-import-export)), TIC configuration may be supplied:
[BSO Import/Export](../messageareas/bso-import-export.md)), TIC configuration may be supplied:
```hjson
{

View File

@ -21,5 +21,4 @@ uploads: {
:information_source: Remember that uploads in a particular area are stored **using the first storage tag defined in that area.**
:information_source: Any ACS checks are allowed. See [ACS](/docs/acs.md)
:information_source: Any ACS checks are allowed. See [ACS](../configuration/acs.md)

View File

@ -2,10 +2,10 @@
layout: page
title: Web Access
---
Temporary web HTTP(S) URLs can be used to download files using the built in web server. Temporary links
expire after `fileBase::web::expireMinutes` (default 24 hours). The full URL given to users is built
using `contentServers::web::domain` and will default to HTTPS (https://) if enabled with a fallback to
HTTP. The end result is users are given a temporary web link that may look something like this:
Temporary web HTTP(S) URLs can be used to download files using the built in web server. Temporary links
expire after `fileBase::web::expireMinutes` (default 24 hours). The full URL given to users is built
using `contentServers::web::domain` and will default to HTTPS (https://) if enabled with a fallback to
HTTP. The end result is users are given a temporary web link that may look something like this:
`https://xibalba.l33t.codes:44512/f/h7JK`
See [Web Server](web_server.md) for more information.
See [Web Server](../servers/web-server.md) for more information.

View File

@ -10,8 +10,8 @@ ENiGMA½ is a modern BBS software with a nostalgic flair!
## Features Available Now
* Multi platform: Anywhere [Node.js](https://nodejs.org/) runs likely works (known to work under Linux, FreeBSD, OpenBSD, OS X and Windows)
* Unlimited multi node support (for all those BBS "callers"!)
* **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](docs/mods.md)
* [MCI support](docs/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles
* **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](modding/)
* [MCI support](art/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles
* Telnet, **SSH**, and both secure and non-secure [WebSocket](https://en.wikipedia.org/wiki/WebSocket) access built in! Additional servers are easy to implement
* [CP437](http://www.ascii-codes.com/) and UTF-8 output
* [SyncTerm](http://syncterm.bbsdev.net/) style font and baud emulation support. Display PC/DOS and Amiga style artwork as it's intended! In general, ANSI-BBS / [cterm.txt](http://cvs.synchro.net/cgi-bin/viewcvs.cgi/*checkout*/src/conio/cterm.txt?content-type=text%2Fplain&revision=HEAD) / [bansi.txt](http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/ANSI/bansi.txt) are followed for expected BBS behavior
@ -19,9 +19,9 @@ ENiGMA½ is a modern BBS software with a nostalgic flair!
* Renegade style pipe color codes
* [SQLite](http://sqlite.org/) storage of users, message areas, and so on
* Strong [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2) backed password encryption
* [Door support](docs/doors.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), [DoorParty](http://forums.throwbackbbs.com/), [Exodus](https://oddnetwork.org/exodus/) and [CombatNet](http://combatnet.us/) support!
* [Door support](modding/local-doors.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), [DoorParty](http://forums.throwbackbbs.com/), [Exodus](https://oddnetwork.org/exodus/) and [CombatNet](http://combatnet.us/) support!
* [Bunyan](https://github.com/trentm/node-bunyan) logging
* [Message networks](docs/msg_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export
* [Gazelle](https://github.com/WhatCD/Gazelle) inspired File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](docs/web_server.md). Legacy X/Y/Z modem also supported!
* [Message networks](messageareas/message_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export
* [Gazelle](https://github.com/WhatCD/Gazelle) inspired File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](servers/web-server.md). Legacy X/Y/Z modem also supported!
* Upload processor supporting [FILE_ID.DIZ](https://en.wikipedia.org/wiki/FILE_ID.DIZ) and [NFO](https://en.wikipedia.org/wiki/.nfo) extraction, year estimation, and more!
* ANSI support in the Full Screen Editor (FSE), file descriptions, and so on

View File

@ -2,22 +2,22 @@
layout: page
title: Manual Installation
---
For Linux environments it's recommended you run the [install script](install-script.md). If you like to
For Linux environments it's recommended you run the [install script](install-script.md). If you like to
do things manually, read on...
## Prerequisites
* [Node.js](https://nodejs.org/) version **v10.x LTS or higher** (Note that 8.x LTS *probably* works but is unsupported).
* :information_source: It is **highly** recommended to use [nvm](https://github.com/creationix/nvm) to manage your
* :information_source: It is **highly** recommended to use [nvm](https://github.com/creationix/nvm) to manage your
Node.js installation if you're on a Linux/Unix environment.
* [Python](https://www.python.org/downloads/) 2.7.x for compiling Node.js packages with native extensions.
* A compiler such as Clang or GCC for Linux/UNIX systems or a recent copy of Visual Studio
([Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) editions
* A compiler such as Clang or GCC for Linux/UNIX systems or a recent copy of Visual Studio
([Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) editions
are OK) for Windows users. Note that you **should only need the Visual C++ component**.
* [git](https://git-scm.com/downloads) to check out the ENiGMA source code.
## Node.js
### With NVM
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:
@ -38,7 +38,7 @@ If the above steps completed without errors, you should now have `nvm`, `node`,
For Windows nvm-like systems exist ([nvm-windows](https://github.com/coreybutler/nvm-windows), ...) or [just download the installer](https://nodejs.org/en/download/).
## ENiGMA BBS
```bash
git clone https://github.com/NuSkooler/enigma-bbs.git
@ -57,9 +57,9 @@ ENiGMA BBS makes use of a few packages for archive and legacy protocol support.
|------------|-----------------------------------|--------------------------------------------|---------------------------------------------------|------------------------------------------------------------------|
| arj | Unpacking arj archives | `arj` | n/a, binaries [here](http://arj.sourceforge.net/) | [ARJ](http://arj.sourceforge.net/) |
| 7zip | Unpacking zip, rar, archives | `p7zip-full` | `p7zip-full` | [7-zip](http://www.7-zip.org/) |
| lha | Unpacking lha archives | `lhasa` | n/a, source [here](http://www2m.biglobe.ne.jp/~dolphin/lha/lha.htm) | Unknown |
| lha | Unpacking lha archives | `lhasa` | n/a, source [here](https://web.archive.org/web/20200301124852/http://www2m.biglobe.ne.jp/~dolphin/lha/lha.htm) | Unknown |
| Rar | Unpacking rar archives | `unrar` | n/a, binaries [here](https://www.rarlab.com/download.htm) | Unknown |
| lrzsz | sz/rz: X/Y/Z protocol support | `lrzsz` | `lrzsz` | Unknown |
| lrzsz | sz/rz: X/Y/Z protocol support | `lrzsz` | `lrzsz` | Unknown |
| sexyz | SexyZ protocol support | [sexyz](https://l33t.codes/outgoing/sexyz) | [sexyz](https://l33t.codes/outgoing/sexyz) | Available with [Synchronet](http://wiki.synchro.net/install:win) |
| exiftool | [ExifTool](https://www.sno.phy.queensu.ca/~phil/exiftool/) | libimage-exiftool-perl | perl-Image-ExifTool | Unknown
| xdms | Unpack/view Amiga DMS | [xdms](http://manpages.ubuntu.com/manpages/trusty/man1/xdms.1.html) | xdms | Unknown
@ -67,7 +67,7 @@ ENiGMA BBS makes use of a few packages for archive and legacy protocol support.
## Config Files
You'll need a basic configuration to get started. The main system configuration is handled via `config/config.hjson`. This is an [HJSON](http://hjson.org/) file (compiliant JSON is also OK). See [Configuration](../configuration/) for more information.
Use `oputil.js` to generate your **initial** configuration:
Use `oputil.js` to generate your **initial** configuration:
```bash
./oputil.js config new

View File

@ -2,11 +2,11 @@
layout: page
title: Production Installation
---
If you've become convinced you would like a "production" BBS running ENiGMA½ a more advanced installation
may be in order.
If you've become convinced you would like a "production" BBS running ENiGMA½ a more advanced installation
may be in order.
[PM2](https://github.com/Unitech/pm2) is an excellent choice for managing your running ENiGMA½ instances if
you've installed via the [install script](install-script) or [manual installation](manual) method.
you've installed via the [install script](install-script.md) or [manual installation](manual.md) method.
Additionally, it is suggested that you run as a specific more locked down user (e.g. 'enigma').
If you're running ENiGMA via Docker, then process management is already handled for you!

View File

@ -3,7 +3,7 @@ layout: page
title: Raspberry Pi
---
All Raspberry Pi models work great with ENiGMA½! Keep in mind compiling the dependencies with
All Raspberry Pi models work great with ENiGMA½! Keep in mind compiling the dependencies with
`npm install` will take some time and *may* appear to hang. It's still working - just be patient and let it
complete.
@ -19,9 +19,9 @@ to get it written to an SD card.
3. Expand the filesystem to use the entire SD card (option 7, option A1)
3. Update & upgrade all packages: `apt-get update && apt-get upgrade`
4. Install required packages: `sudo apt install lrzsz p7zip-full`
5. Follow the [installation instructions](/installation) to install ENiGMA½.
5. Follow the [installation instructions](../installation/) to install ENiGMA½.
6. Profit!

View File

@ -1,16 +1,16 @@
---
layout: page
title: Testing Your Installation
title: Testing Your Installation
---
Once you've completed your chosen installation method, it's time to test!
Once you've completed your chosen installation method, it's time to test!
_Note that if you've used the [Docker](docker) installation method, you've already done this._
_Note that if you've used the [Docker](docker.md) installation method, you've already done this._
```bash
./main.js
```
If everything went OK:
If everything went OK:
```bash
ENiGMA½ Copyright (c) 2014-2020, Bryan Ashby
@ -33,7 +33,7 @@ To shut down the server, press Ctrl-C.
## Points of Interest
* The default port for Telnet is 8888 and 8889 for SSH.
* Note that on *nix systems port such as telnet/23 are privileged (e.g. require root). See
* Note that on *nix systems port such as telnet/23 are privileged (e.g. require root). See
[this SO article](http://stackoverflow.com/questions/16573668/best-practices-when-running-node-js-with-port-80-ubuntu-linode) for some tips on using these ports on your system if desired.
* The first user you create when logging in will be automatically be added to the `sysops` group.
@ -44,6 +44,6 @@ If you don't have any telnet software, these are compatible with ENiGMA½:
* [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://magickabbs.com/utils/)
* [VTX](https://github.com/codewar65/VTX_ClientServer) (Browser based)
* [fTelnet](https://www.ftelnet.ca/) (Browser based)

View File

@ -22,7 +22,7 @@ ENiGMA½ will run on both 32bit and 64bit Windows. If you want to run 16bit door
npm-windows-upgrade
```
Note: Do not run `npm i -g npm`. Instead use `npm-windows-upgrade` to update npm going forward.
Note: Do not run `npm i -g npm`. Instead use `npm-windows-upgrade` to update npm going forward.
Also if you run the NodeJS installer, it will replace the node version.
2. Install [windows-build-tools for npm](https://www.npmjs.com/package/windows-build-tools)
@ -30,7 +30,7 @@ ENiGMA½ will run on both 32bit and 64bit Windows. If you want to run 16bit door
```Powershell
npm install --global --production windows-build-tools
```
2. Install [7zip](https://www.7-zip.org/download.html).
@ -41,19 +41,19 @@ ENiGMA½ will run on both 32bit and 64bit Windows. If you want to run 16bit door
4. Click `New` and paste the path to 7zip
5. Close your console window and reopen. You can type `7z` to make sure it's working.
(Please see [Archivers](/docs/archivers.md) for additional archive utilities!)
(Please see [Archivers](../configuration/archivers.md) for additional archive utilities!)
3. Install [Git](https://git-scm.com/downloads) and optionally [TortoiseGit](https://tortoisegit.org/download/).
3. Install [Git](https://git-scm.com/downloads) and optionally [TortoiseGit](https://tortoisegit.org/download/).
4. Clone ENiGMA½ - browse to the directory you want and run
4. Clone ENiGMA½ - browse to the directory you want and run
```Powershell
git clone "https://github.com/NuSkooler/enigma-bbs.git"
```
Optionally use the TortoiseGit by right clicking the directory and selecting `Git Clone`.
5. Install ENiGMA½.
1. In the enigma directory run
1. In the enigma directory run
```Powershell
npm install
```
@ -66,6 +66,6 @@ ENiGMA½ will run on both 32bit and 64bit Windows. If you want to run 16bit door
```Powershell
node .\main.js
```
6. Look at [Production Installation](/installation/production) for maintaining ENiGMA½ when you are ready to go live.
6. Look at [Production Installation](production.md) for maintaining ENiGMA½ when you are ready to go live.

View File

@ -30,7 +30,7 @@ A node entry starts with a [FTN address](http://ftsc.org/docs/old/fsp-1028.001)
| `packetType` | :-1: | `2`, `2.2`, or `2+`. Defaults to `2+` for modern mailer compatiability. |
| `packetPassword` | :-1: | Optional password for the packet |
| `encoding` | :-1: | Encoding to use for message bodies; Defaults to `utf-8`. |
| `archiveType` | :-1: | Specifies the archive type (by extension or MIME type) for ArcMail bundles. This should be `zip` (or `application/zip`) for most setups. Other valid examples include `arc`, `arj`, `lhz`, `pak`, `sqz`, or `zoo`. See [Archivers](docs/configuration/archivers.md) for more information. |
| `archiveType` | :-1: | Specifies the archive type (by extension or MIME type) for ArcMail bundles. This should be `zip` (or `application/zip`) for most setups. Other valid examples include `arc`, `arj`, `lhz`, `pak`, `sqz`, or `zoo`. See [Archivers](../configuration/archivers.md) for more information. |
**Example**:
```hjson

View File

@ -28,9 +28,9 @@ Dropfile types specified by `dropFileType`:
| Value | Description |
|-------|-------------|
| `DOOR` | [DOOR.SYS](http://goldfndr.home.mindspring.com/dropfile/doorsys.htm)
| `DOOR` | [DOOR.SYS](https://web.archive.org/web/20160325192739/http://goldfndr.home.mindspring.com/dropfile/doorsys.htm)
| `DOOR32` | [DOOR32.SYS](https://raw.githubusercontent.com/NuSkooler/ansi-bbs/master/docs/dropfile_formats/door32_sys.txt)
| `DORINFO` | [DORINFOx.DEF](http://goldfndr.home.mindspring.com/dropfile/dorinfo.htm)
| `DORINFO` | [DORINFOx.DEF](https://web.archive.org/web/20160321190038/http://goldfndr.home.mindspring.com/dropfile/dorinfo.htm)
#### Argument Variables
The following variables may be used in `args` entries:

View File

@ -2,7 +2,7 @@
layout: page
title: Web Server
---
ENiGMA½ comes with a built in *content server* for supporting both HTTP and HTTPS. Currently the [File Bases](file_base.md) registers routes for file downloads, password reset email links are handled via the server, and static files can also be served for your BBS. Other features will likely come in the future or you can easily write your own!
ENiGMA½ comes with a built in *content server* for supporting both HTTP and HTTPS. Currently the [File Bases](../modding/file-base-web-download-manager.md) registers routes for file downloads, password reset email links are handled via the server, and static files can also be served for your BBS. Other features will likely come in the future or you can easily write your own!
# Configuration
By default the web server is not enabled. To enable it, you will need to at a minimum configure two keys in the `contentServers.web` section of `config.hjson`:

View File

@ -211,6 +211,14 @@
}
const points = user.getPropertyAsNumber(UserProps.AchievementTotalPoints) || 0;
return !isNan(value) && points >= value;
},
PV : function userPropValue() {
if (!user || !Array.isArray(value) || value.length !== 2) {
return false;
}
const [propName, propValue] = value;
const actualPropValue = user.getProperty(propName);
return actualPropValue === propValue;
}
}[acsCode](value);
} catch (e) {