From 65e3bfa386c205096f2debe1795eea107f7cb690 Mon Sep 17 00:00:00 2001 From: Paul Hitt Date: Mon, 21 Apr 2025 16:37:23 -0400 Subject: [PATCH] Initial commit --- docker-compose.yml | 17 ++ enigma/config/config.hjson | 531 +++++++++++++++++++++++++++++++++++++ 2 files changed, 548 insertions(+) create mode 100644 docker-compose.yml create mode 100644 enigma/config/config.hjson diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..59be1a7 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +--- +version: "3.7" +services: + enigma: + image: enigmabbs/enigma-bbs:latest + ports: + - "8888:8888" + - "8889:8889" + volumes: + - ./enigma/config:/enigma-bbs/config + - ./enigma/db:/enigma-bbs/db + - ./enigma/logs:/enigma-bbs/logs + - ./enigma/filebase:/enigma-bbs/filebase + - ./enigma/art:/enigma-bbs/art + - ./enigma/mods:/enigma-bbs/mods + - ./enigma/mail:/mail + restart: unless-stopped \ No newline at end of file diff --git a/enigma/config/config.hjson b/enigma/config/config.hjson new file mode 100644 index 0000000..a5dc737 --- /dev/null +++ b/enigma/config/config.hjson @@ -0,0 +1,531 @@ +{ + /* + ./\/\.' ENiGMA½ System Configuration -/--/-------- - -- - + + _____________________ _____ ____________________ __________\_ / + \__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp! + // __|___// | \// |// | \// | | \// \ /___ /_____ + /____ _____| __________ ___|__| ____| \ / _____ \ + ---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/ + /__ _\ + <*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/ + + *-----------------------------------------------------------------------------* + Generated by ENiGMA½ v0.0.13-beta / hjson v3.2.1 + *-----------------------------------------------------------------------------* + + + ------------------------------- -- - - + 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 + Email : bryan@l33t.codes + */ + + general: { + // Your BBS Name! + boardName: Flame Net BBS + + // 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 + menuFile: /enigma-bbs/config/menus/flame_net_bbs-main.hjson + } + term: { + // checkUtf8Encoding requires the use of cursor position reports, which are not supported on all terminals. + // Using this with a terminal that does not support cursor position reports results in a 2 second delay + // during the connect process, but provides better autoconfiguration of utf-8 + checkUtf8Encoding: true + + // Checking the ANSI home position also requires the use of cursor position reports, which are not + // supported on all terminals. Using this with a terminal that does not support cursor position reports + // results in a 3 second delay during the connect process, but works around positioning problems with + // non-standard terminals. + checkAnsiHomePosition: true + + // other options here include cp437TermList and utf8TermList, see config_default.js for more information + } + paths: { + // + // Other paths can also be configured as well, + // but generally unnecessary + // + logs: /enigma-bbs/logs/ + } + logging: { + // + // 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: + // Linux : tail -F ./logs/enigma-bbs.log | bunyan + // PowerShell : Get-Content .\enigma-bbs.log -Tail 15 | bunyan.cmd + // + // (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 + // + rotatingFile: { + // If you're having trouble, try setting this to "trace" + level: info + type: rotating-file + fileName: enigma-bbs.log + period: 1d + count: 3 + } + } + theme: { + // Default theme applied to new users. "*" indicates random. + default: luciano_blocktronics + // Theme applied before a user has logged in. "*" indicates random. + preLogin: luciano_blocktronics + + // + // 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. + // + passwordChar: * + dateFormat: { + short: MM/DD/YYYY + long: ddd, MMMM Do, YYYY + } + timeFormat: { + short: h:mm a + } + dateTimeFormat: { + short: MM/DD/YYYY h:mm a + long: ddd, MMMM Do, YYYY, h:mm a + } + } + + // + // 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: 8888 + enabled: true + firstMenu: telnetConnected + }, + ssh: { + enabled: true + port: 8889 + privateKeyPem: /enigma-bbs/config/ssh_private_key.pem + privateKeyPass: "" + } + + 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: 8810 + enabled: false + } + + // Secure WebSockets, or wss:// + wss: { + port: 8811 + enabled: false + + // + // 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: /enigma-bbs/config/https_cert.pem + keyPem: /enigma-bbs/config/https_cert_key.pem + } + } + } + + // + // 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 + domain: another-fine-enigma-bbs.org + + // Standard issue "www" folder. Place static content here + staticRoot: /enigma-bbs/www + + // + // 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: { + resetPassEmailText: /enigma-bbs/misc/reset_password_email.template.txt + resetPassEmailHtml: /enigma-bbs/misc/reset_password_email.template.html + resetPageTemplate: /enigma-bbs/www/reset_password.template.html + } + http: { + port: 8080 + enabled: false + } + https: { + port: 8443 + enabled: false + + // + // 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: /enigma-bbs/config/https_cert.pem + keyPem: /enigma-bbs/config/https_cert_key.pem + } + } + + // Ladies and gentlemen, a Gopher server! + gopher: { + port: 8070 + enabled: false + + // The root directory to serve gophermaps and other content + staticRoot: /enigma-bbs/gopher + + // + // The Gopher Content Server can export message base + // conferences and areas via the 'exposedConfAreas1 key + // and 'include' and optional 'exclude' directives. + // + // Example: + // exposedConfAreas: { + // some_conf: { + // include: [ "*" ] // all + // exclude: [ "not_this_one" ] // except... + // } + // another_conf: { + // include: [ "foo", "bar", "baz" ] + // exclude: [ "bazbang*" ] + // } + // } + // + publicHostname: another-fine-enigma-bbs.org + publicPort: 8070 + } + + // 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: 8119 + } + + // secure (TLS) + nntps: { + enabled: false + port: 8563 + + // + // You will need a SSL/TLS certificate and key + // + certPem: /enigma-bbs/config/nntps_cert.pem + keyPem: /enigma-bbs/config/nntps_key.pem + } + cache: { + maxItems: 200 + maxAge: 30000 + } + } + } + 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 + } + } + + // + // 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 + } + } + } + local: { + name: Local + desc: Local Areas + sort: 1 + default: true + areas: { + general: { + name: General + desc: General chit-chat + sort: 1 + default: true + } + } + } + } + + // 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. + // + } + } + + // + // 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: /enigma-bbs/file_base/ + + // + // 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: + // groups: [ + // "leet", "lamerz" + // ] + // + // + // Set default group(s) new users should automatically be assigned to: + // defaultGroups : [ + // "lamerz" + // ] + // + + // Should new users require +op activation? + requireActivation: false + + // How long pre-authenticated users (have not logged in) can idle + preAuthIdleLogoutSeconds: 180 + + // How long authenticated users (logged in) can idle + idleLogoutSeconds: 360 + + // Usernames reserved for applying to your system + newUserNames: [ + new + apply + ] + + // Handling of failed logins + failedLogin: { + // disconnect after N failed attempts. 0=disabled. + disconnect: 3 + + // Lock the user out after N failed attempts. 0=disabled. + lockAccount: 9 + + // + // If locked out, how long until the user can login again? + // Set to 0 to disable auto-unlock + // + autoUnlockMinutes: 360 + } + + // Allow email driven password resets to unlock accounts? + unlockAtEmailPwReset: true + } + + // 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! + // + } + + // + // 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" + // ] + // } + } + } + statLog: { + systemEvents: { + // Max login history event records kept. -1 = unlimited + loginHistoryMax: -1 + } + } +} \ No newline at end of file