2018-11-08 03:24:05 +00:00
|
|
|
{
|
2018-11-11 06:59:26 +00:00
|
|
|
/*
|
|
|
|
./\/\.' ENiGMA½ System Configuration -/--/-------- - -- -
|
|
|
|
|
|
|
|
_____________________ _____ ____________________ __________\_ /
|
|
|
|
\__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp!
|
|
|
|
// __|___// | \// |// | \// | | \// \ /___ /_____
|
|
|
|
/____ _____| __________ ___|__| ____| \ / _____ \
|
|
|
|
---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/
|
|
|
|
/__ _\
|
|
|
|
<*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/
|
|
|
|
|
|
|
|
*-----------------------------------------------------------------------------*
|
|
|
|
Generated by ENiGMA½ v%ENIG_VERSION% / hjson v%HJSON_VERSION%
|
|
|
|
*-----------------------------------------------------------------------------*
|
|
|
|
|
|
|
|
|
|
|
|
------------------------------- -- - -
|
|
|
|
General Information
|
|
|
|
------------------------------- - -
|
|
|
|
This configuration is in HJSON (http://hjson.org/) format. Strict to-spec
|
|
|
|
JSON is also perfectly valid. Use 'hjson' from npm to convert to/from JSON.
|
|
|
|
|
|
|
|
See http://hjson.org/ for more information and syntax.
|
|
|
|
|
|
|
|
Various editors and IDEs such as Sublime Text 3, Visual Studio Code, and so
|
|
|
|
on have syntax highlighting for the HJSON format which are highly recommended.
|
|
|
|
|
|
|
|
|
|
|
|
------------------------------- -- - -
|
|
|
|
Configuration
|
|
|
|
------------------------------- - -
|
|
|
|
ENiGMA½ is *highly* configurable, and thus can be overwhelming at first!
|
|
|
|
|
|
|
|
By default, this file contains common configuration elements, examples, etc.
|
|
|
|
To see a more complete view of settings available to the system, don't be
|
|
|
|
afraid to open up core/config.js and look around. Do not make changes there
|
|
|
|
however! All system configuration can be extended and defaults overridden
|
|
|
|
via this file!
|
|
|
|
|
|
|
|
Please see RTFM ...er, uh... see the documentation for more information, and
|
|
|
|
don't be shy to ask for help:
|
|
|
|
|
|
|
|
BBS : Xibalba @ xibalba.l33t.codes
|
|
|
|
FTN : BBS Discussion on fsxNet
|
|
|
|
IRC : #enigma-bbs / FreeNode
|
2018-11-14 04:25:46 +00:00
|
|
|
Email : bryan@l33t.codes
|
2018-11-11 06:59:26 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
general: {
|
|
|
|
// Your BBS Name!
|
|
|
|
boardName: XXXXX
|
2019-05-31 20:08:22 +00:00
|
|
|
|
|
|
|
// Your BBS name, with pipe codes for styling
|
|
|
|
prettyBoardName : '|08XXXXX'
|
|
|
|
|
|
|
|
// Telnet hostname and port for your board
|
|
|
|
telnetHostname : 'xibalba.l33t.codes:44510'
|
|
|
|
|
|
|
|
// SSH hostname and port for your board
|
|
|
|
sshHostname : 'xibalba.l33t.codes:44511'
|
|
|
|
|
|
|
|
// Your board's website
|
|
|
|
website : 'https://enigma-bbs.github.io'
|
|
|
|
|
|
|
|
// Short board description
|
|
|
|
description : 'Yet another awesome ENiGMA½ BBS'
|
2018-11-11 06:59:26 +00:00
|
|
|
}
|
|
|
|
|
2018-11-11 08:00:42 +00:00
|
|
|
paths: {
|
|
|
|
//
|
|
|
|
// Other paths can also be configured as well,
|
|
|
|
// but generally unnecessary
|
|
|
|
//
|
|
|
|
logs: XXXXX
|
|
|
|
}
|
|
|
|
|
2018-11-11 06:59:26 +00:00
|
|
|
logging: {
|
|
|
|
//
|
2018-11-11 08:00:42 +00:00
|
|
|
// Each block here represents a Bunyan style config.
|
|
|
|
// See https://github.com/trentm/node-bunyan#streams
|
|
|
|
//
|
|
|
|
// Remember you can pipe logs through Bunyan to pretty-print:
|
2018-11-18 19:06:46 +00:00
|
|
|
// Linux : tail -F ./logs/enigma-bbs.log | bunyan
|
2018-11-18 19:17:42 +00:00
|
|
|
// PowerShell : Get-Content .\enigma-bbs.log -Tail 15 | bunyan.cmd
|
2018-11-11 08:00:42 +00:00
|
|
|
//
|
|
|
|
// (npm install -g bunyan to get the binary)
|
|
|
|
//
|
|
|
|
// We default to a rotating-file stream:
|
|
|
|
// https://github.com/trentm/node-bunyan#stream-type-rotating-file
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
|
|
|
rotatingFile: {
|
|
|
|
// If you're having trouble, try setting this to "trace"
|
|
|
|
level: XXXXX
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
theme: {
|
|
|
|
// Default theme applied to new users. "*" indicates random.
|
|
|
|
default: XXXXX
|
|
|
|
// Theme applied before a user has logged in. "*" indicates random.
|
|
|
|
preLogin: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// dateFormat, timeFormat, and dateTimeFormat blocks configure
|
|
|
|
// moment.js (https://momentjs.com/docs/#/displaying/) style formats
|
|
|
|
// for dates and times. Short and long versions are available.
|
|
|
|
// Note that themes may override these settings.
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Login servers represent available servers (or protocols) in which
|
|
|
|
// users are permitted to access your system.
|
|
|
|
//
|
|
|
|
loginServers: {
|
|
|
|
// Remember kids, Telnet is insecure!
|
|
|
|
telnet: {
|
|
|
|
// It's best to use non-privileged ports and NAT/foward to them
|
|
|
|
port: XXXXX
|
|
|
|
}
|
|
|
|
|
|
|
|
// ...but SSH *is* secure!
|
|
|
|
ssh: {
|
|
|
|
port: XXXXX
|
|
|
|
|
|
|
|
//
|
2019-02-16 01:48:16 +00:00
|
|
|
// To enable SSH, perform the following steps:
|
|
|
|
//
|
|
|
|
// 1 - Generate a Private Key (PK):
|
|
|
|
// Currently ENiGMA 1/2 requires a PKCS#1 PEM formatted PK.
|
|
|
|
// To generate a secure PK, issue the following command:
|
|
|
|
//
|
|
|
|
// > openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
|
|
|
|
// -pkeyopt rsa_keygen_pubexp:65537 | openssl rsa \
|
|
|
|
// -out ./config/ssh_private_key.pem -aes128
|
|
|
|
//
|
|
|
|
// (The above is a more modern equivelant of the following):
|
|
|
|
// > openssl genrsa -aes128 -out ./config/ssh_private_key.pem 2048
|
|
|
|
//
|
|
|
|
// 2 - Set 'privateKeyPass' to the password you used in step #1
|
|
|
|
//
|
|
|
|
// 3 - Finally, set 'enabled' to 'true'
|
|
|
|
//
|
|
|
|
// Additional reading:
|
|
|
|
// - https://blog.sleeplessbeastie.eu/2017/12/28/how-to-generate-private-key/
|
|
|
|
// - https://gist.github.com/briansmith/2ee42439923d8e65a266994d0f70180b
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
|
|
|
enabled: XXXXX
|
|
|
|
|
|
|
|
// set this to your PK's password, generated in step #1 above
|
|
|
|
privateKeyPass: SuperSecretPasswordChangeMe!
|
|
|
|
|
|
|
|
//
|
|
|
|
// It's possible to lock down various algorithms available to
|
|
|
|
// SSH, but be aware this may limit the clients that can connect!
|
|
|
|
//
|
|
|
|
algorithms: {}
|
|
|
|
}
|
|
|
|
|
|
|
|
webSocket: {
|
|
|
|
//
|
|
|
|
// Setting "proxied" to true allows non-secure (ws://) WebSockets
|
|
|
|
// to be considered secure when the X-Fowarded-Proto HTTP header
|
|
|
|
// is set to "https". This is helpful when ENiGMA is running behind
|
|
|
|
// another web server doing SSL/TLS termination.
|
|
|
|
//
|
|
|
|
proxied: false
|
|
|
|
|
|
|
|
// Non-secure WebSockets, or ws://
|
|
|
|
ws: {
|
|
|
|
port: XXXXX
|
|
|
|
}
|
|
|
|
|
|
|
|
// Secure WebSockets, or wss://
|
|
|
|
wss: {
|
|
|
|
port: XXXXX
|
|
|
|
enabled: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// Certificate and Key in PEM format.
|
|
|
|
// Note that web browsers will not trust self-signed certs. Look
|
|
|
|
// into Let's Encrypt and perhaps running ENiGMA behind another
|
|
|
|
// web server such as Caddy.
|
|
|
|
//
|
|
|
|
certPem: XXXXX
|
|
|
|
keyPem: XXXXX
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Content Servers expose content from the system
|
|
|
|
//
|
|
|
|
contentServers: {
|
|
|
|
//
|
|
|
|
// The Web Content Server can expose content over HTTP (http://) and
|
|
|
|
// HTTPS (https://) for (but not limited to) the following purposes:
|
|
|
|
// * Static content
|
|
|
|
// * Web downloads from the file base
|
|
|
|
// * Password reset forms (sent to users in PW reset emails; see
|
|
|
|
// "email" block below)
|
|
|
|
//
|
|
|
|
web: {
|
|
|
|
// Set to your public FQDN
|
2018-11-11 08:00:42 +00:00
|
|
|
domain: another-fine-enigma-bbs.org
|
|
|
|
|
|
|
|
// Standard issue "www" folder. Place static content here
|
|
|
|
staticRoot: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// This block configures password reset emails. Template files
|
|
|
|
// support the following variables:
|
|
|
|
// * %BOARDNAME% : Name of BBS
|
|
|
|
// * %USERNAME% : Username of whom to reset password
|
|
|
|
// * %TOKEN% : Reset token
|
|
|
|
// * %RESET_URL% : In case of email, the link to follow
|
|
|
|
// for reset. In case of landing page, URL to POST submit reset form.
|
|
|
|
//
|
|
|
|
resetPassword: {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
http: {
|
|
|
|
port: XXXXX
|
|
|
|
}
|
|
|
|
|
|
|
|
https: {
|
|
|
|
port: XXXXX
|
|
|
|
enabled: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// Note that web browsers will not trust self-signed certs. Look
|
|
|
|
// into Let's Encrypt and perhaps running ENiGMA behind another
|
|
|
|
// web server such as Caddy.
|
|
|
|
//
|
|
|
|
}
|
2018-11-11 06:59:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Ladies and gentlemen, a Gopher server!
|
|
|
|
gopher: {
|
|
|
|
port: XXXXX
|
|
|
|
enabled: false
|
|
|
|
|
2018-11-21 04:02:30 +00:00
|
|
|
// bannerFile path in misc/ by default. Full paths allowed.
|
|
|
|
bannerFile: XXXXX
|
|
|
|
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
|
|
|
// The Gopher Content Server can export message base
|
|
|
|
// conferences and areas via the "messageConferences" key.
|
|
|
|
//
|
|
|
|
// Example:
|
|
|
|
// messageConferences: {
|
|
|
|
// some_conf: [ "area_tag1", "area_tag2" ]
|
|
|
|
// }
|
2018-12-15 05:21:57 +00:00
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
// You may also wish to enable NNTP services
|
|
|
|
nntp: {
|
|
|
|
//
|
|
|
|
// Set publicMessageConferences{} to configure
|
|
|
|
// publicly exposed conferences & areas.
|
|
|
|
//
|
|
|
|
// Example:
|
|
|
|
// publicMessageConferences: {
|
|
|
|
// some_conf: [ "area_tag1", "area_tag2" ]
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
publicMessageConferences: {}
|
|
|
|
|
|
|
|
// non-secure
|
|
|
|
nntp: {
|
|
|
|
enabled: false
|
|
|
|
port: XXXXX
|
|
|
|
}
|
|
|
|
|
|
|
|
// secure (TLS)
|
|
|
|
nntps: {
|
|
|
|
enabled: false
|
|
|
|
port: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// You will need a SSL/TLS certificate and key
|
|
|
|
//
|
|
|
|
certPem: XXXXX
|
|
|
|
keyPem: XXXXX
|
|
|
|
}
|
2018-11-11 06:59:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-31 20:08:22 +00:00
|
|
|
chatServers: {
|
|
|
|
// multi relay chat settings. No need to sign up, just enable it.
|
|
|
|
// More info: https://bbswiki.bottomlessabyss.net/index.php?title=MRC_Chat_platform
|
|
|
|
mrc: {
|
|
|
|
enabled : false
|
|
|
|
serverHostname : 'mrc.bottomlessabyss.net'
|
|
|
|
serverPort : 5000
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
|
|
|
// Currently, ENiGMA½ can use external email to mail
|
|
|
|
// users for password resets. Additional functionality will
|
|
|
|
// be added in the future.
|
|
|
|
//
|
|
|
|
email: {
|
|
|
|
//
|
|
|
|
// Set the following keys to configure:
|
|
|
|
// * "defaultFrom" to the reply address
|
|
|
|
// * "transport" to a configuration block that meets the
|
|
|
|
// requirements of Nodemailer (https://nodemailer.com/)
|
|
|
|
//
|
|
|
|
// Example:
|
|
|
|
// transport: {
|
|
|
|
// service: Zoho
|
|
|
|
// auth: {
|
|
|
|
// user: myuser@myhost.com
|
|
|
|
// pass: supersecretpassword
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
// Message conferences and areas are within this block
|
|
|
|
messageConferences: {
|
|
|
|
// An entry here prepresents a conference taka aka confTag
|
|
|
|
another_sample_conf: {
|
|
|
|
name: "Another Sample Conference"
|
|
|
|
desc: "Another conf sample. Change me!"
|
|
|
|
areas: {
|
|
|
|
// Similar to confTags, this is a areaTag
|
|
|
|
another_sample_area: {
|
|
|
|
name: "Another Sample Area"
|
|
|
|
desc: "Another area example. Change me!"
|
|
|
|
// The 'sort' key can override natural sort order and can live at the conference and area levels
|
|
|
|
sort: 2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-12 18:30:52 +00:00
|
|
|
// Configuration block for scanner/tosser modules
|
|
|
|
scannerTossers: {
|
|
|
|
// The most popular being FTN/BSO style networks
|
|
|
|
ftn_bso: {
|
|
|
|
//
|
|
|
|
// When you're ready to hook up to FTN networks, please
|
|
|
|
// see the documentation on message networks.
|
|
|
|
//
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
|
|
|
// ENiGMA½ comes with a very powerful File Base, but may be a bit strange
|
|
|
|
// until you get used to it. Please see the documentation!
|
|
|
|
//
|
|
|
|
fileBase: {
|
|
|
|
//
|
|
|
|
// Storage tags with relative paths (that is, paths that do not start
|
|
|
|
// with a "/") are relative to the following path:
|
|
|
|
//
|
|
|
|
areaStoragePrefix: XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// Storage tags create a tag -> directory (relative or full path)
|
|
|
|
// that can be used in areas.
|
|
|
|
//
|
|
|
|
storageTags: {
|
|
|
|
//
|
|
|
|
// Example storage tag: "super_l33t_warez":
|
|
|
|
// super_l33t_warez: "/path/to/super/l33t/warez"
|
|
|
|
//
|
|
|
|
}
|
|
|
|
|
|
|
|
areas: {
|
|
|
|
//
|
|
|
|
// Example area with the areaTag of "an_example_area":
|
|
|
|
// an_example_area: {
|
|
|
|
// name: "Example File Area"
|
|
|
|
// desc: "It's just an example, yo!"
|
|
|
|
// storageTags: [
|
|
|
|
// "super_l33t_warez"
|
|
|
|
// ]
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// File Base Areas are read-only (ie: download only) by default.
|
|
|
|
// To make a uploadable area, set ACS as you like. For example,
|
|
|
|
// to allow all users to upload to an area:
|
|
|
|
//
|
|
|
|
// an_example_area: {
|
|
|
|
// // ...
|
|
|
|
// acs: {
|
|
|
|
// write: GM[users]
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// General user configuration
|
|
|
|
users: {
|
|
|
|
//
|
|
|
|
// ENiGMA½ utilizes user groups similar to Windows and *nix. Built in groups
|
|
|
|
// include "users" (for regular users) and "sysops" for +ops. You can add other
|
|
|
|
// groups to the system as well by adding a 'groups' key in this section:
|
2018-11-11 08:00:42 +00:00
|
|
|
// groups: [
|
|
|
|
// "leet", "lamerz"
|
|
|
|
// ]
|
|
|
|
//
|
2018-11-11 06:59:26 +00:00
|
|
|
//
|
2018-11-20 03:40:20 +00:00
|
|
|
// Set default group(s) new users should automatically be assigned to:
|
2018-11-11 08:00:42 +00:00
|
|
|
// defaultGroups : [
|
|
|
|
// "lamerz"
|
|
|
|
// ]
|
|
|
|
//
|
2018-11-11 06:59:26 +00:00
|
|
|
|
|
|
|
// Should new users require +op activation?
|
|
|
|
requireActivation: false,
|
2018-11-11 08:00:42 +00:00
|
|
|
|
|
|
|
// How long pre-authenticated users (have not logged in) can idle
|
|
|
|
preAuthIdleLogoutSeconds: XXXXX
|
|
|
|
|
|
|
|
// How long authenticated users (logged in) can idle
|
|
|
|
idleLogoutSeconds: XXXXX
|
|
|
|
|
|
|
|
// Usernames reserved for applying to your system
|
|
|
|
newUserNames: []
|
|
|
|
|
2018-11-23 06:07:37 +00:00
|
|
|
// Handling of failed logins
|
|
|
|
failedLogin : {
|
|
|
|
// disconnect after N failed attempts. 0=disabled.
|
|
|
|
disconnect : XXXXX
|
|
|
|
|
|
|
|
// Lock the user out after N failed attempts. 0=disabled.
|
|
|
|
lockAccount : XXXXX
|
|
|
|
|
|
|
|
//
|
|
|
|
// If locked out, how long until the user can login again?
|
|
|
|
// Set to 0 to disable auto-unlock
|
|
|
|
//
|
|
|
|
autoUnlockMinutes : XXXXX
|
|
|
|
},
|
|
|
|
|
|
|
|
// Allow email driven password resets to unlock accounts?
|
|
|
|
unlockAtEmailPwReset : XXXXX
|
2018-11-11 06:59:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Archive files and related
|
|
|
|
archives: {
|
|
|
|
archivers: {
|
|
|
|
//
|
|
|
|
// Each key in the "archivers" configuration block represents a specific
|
|
|
|
// external archive utility. ENiGMA½ has sane configuration by default
|
|
|
|
// for many archivers, but the tools themselves are likely not yet installed
|
|
|
|
// on your system!
|
|
|
|
//
|
|
|
|
// You'll want to have archivers configured for the many old-school archive
|
|
|
|
// formats that a BBS may encounter! Please consult the documentation on
|
|
|
|
// information as to where to find and install these utilities!
|
|
|
|
//
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fileTransferProtocols: {
|
|
|
|
//
|
|
|
|
// Each key in the "fileTransferProtocols" configuration block defines
|
|
|
|
// an external file transfer utility for legacy protocols such as
|
|
|
|
// X, Y, and Z-Modem.
|
|
|
|
//
|
|
|
|
// You will want to ensure your system has these external utilities
|
|
|
|
// installed and/or define new or additional protocols. Please
|
|
|
|
// see the documentation for more information!
|
|
|
|
//
|
|
|
|
}
|
2018-11-11 08:58:49 +00:00
|
|
|
|
2018-11-20 03:40:20 +00:00
|
|
|
//
|
|
|
|
// Use the Event Scheduler to set up arbitrary scheduled events
|
|
|
|
// using Later style syntax and/or @watch files.
|
|
|
|
// See docs/event-scheduler.md for more information.
|
|
|
|
//
|
|
|
|
eventScheduler: {
|
|
|
|
events: {
|
|
|
|
// Example:
|
|
|
|
//
|
|
|
|
// sampleEvent: {
|
|
|
|
// schedule: every 2 hours
|
|
|
|
// action: @execute:/path/to/some/script.sh
|
|
|
|
// args: [
|
|
|
|
// "--foo", "--bar"
|
|
|
|
// ]
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-11-11 08:58:49 +00:00
|
|
|
statLog: {
|
|
|
|
systemEvents: {
|
|
|
|
// Max login history event records kept. -1 = unlimited
|
|
|
|
loginHistoryMax: -1
|
|
|
|
}
|
|
|
|
}
|
2018-11-18 06:40:08 +00:00
|
|
|
}
|