GithubHelp home page GithubHelp logo

nuskooler / enigma-bbs Goto Github PK

View Code? Open in Web Editor NEW
530.0 39.0 104.0 14.46 MB

ENiGMA½ BBS Software

Home Page: https://nuskooler.github.io/enigma-bbs/

License: BSD 2-Clause "Simplified" License

JavaScript 98.85% Shell 0.38% HTML 0.19% AGS Script 0.01% PLpgSQL 0.06% Dockerfile 0.11% PEG.js 0.39%
bbs retro retrocomputing telnet ansi bulletin-board ascii terminal

enigma-bbs's Introduction

ENiGMA½ BBS Software

ENiGMA½ BBS

ENiGMA½ is a modern BBS software with a nostalgic flair!

Features

Below are just some of the features ENiGMA½ supports out of the box:

  • Multi platform — Anywhere Node.js 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 based configuration, menus, and themes in addition to JavaScript based mods
  • MCI support for lightbars, toggles, input areas, and so on plus many other other bells and whistles
  • Telnet, SSH, and both secure and non-secure WebSocket access built in! Additional servers are easy to implement
  • CP437 and UTF-8 output
  • SyncTERM style font and baud emulation support. Display PC/DOS and Amiga style artwork as it's intended! In general, ANSI-BBS / cterm.txt / bansi.txt are followed for expected BBS behavior.
  • Full SAUCE support.
  • Renegade style pipe color codes.
  • SQLite storage of users, message areas, etc.
  • Strong PBKDF2 backed password encryption.
  • Support for 2-Factor Authentication with One-Time-Passwords
  • Door support including common dropfile formats for legacy DOS doors. Built in BBSLink, DoorParty, and Exodus!
  • Structured Bunyan logging!
  • Message networks with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export. Messages Bases can also be exposed via Gopher, or NNTP!
  • 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. Legacy X/Y/Z modem also supported!
  • Upload processor supporting FILE_ID.DIZ and NFO extraction, year estimation, and more!
  • ANSI support in the Full Screen Editor (FSE), file descriptions, etc.
  • Expandable achievement system — BBSing gamified!
  • A remote accessible Waiting For Caller (WFC)!

...and much much more. Please check out the issue tracker and feel free to request features (or contribute!) features!

Documentation

Browse the docs online. Be sure to checkout the /docs/ folder as well for the latest and greatest documentation.

Installation

On most *nix systems simply run the following from your terminal:

curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash

Please see Installation Methods for Windows, Docker, and so on...

Donating

If you feel the urge to donate, you can do so here

Donate using Liberapay

Support

Terminal Clients

ENiGMA has been tested with many terminals. However, the following are suggested for BBSing:

Some Boards

Special Thanks

(in no particular order)

...and so many others! This project would be nothing without the BBS and artscene communities!

License

Released under the BSD 2-clause license:

Copyright (c) 2015-2024, Bryan D. Ashby All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

enigma-bbs's People

Contributors

abutbul avatar christiansacks avatar cognitivegears avatar coolacid avatar davestephens avatar dependabot[bot] avatar frozenfoxx avatar georgzoeller avatar haliphax avatar jonmr avatar louisnorthmore avatar mikeralphson avatar notepid avatar nuskooler avatar parkbanks avatar richinseattle avatar rjmooney avatar semperfu avatar snazzware avatar squintgit avatar stack-fault avatar voipmeister avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

enigma-bbs's Issues

Missing FSE functionality

The help on the message reading refers to commands that do not work. I am guessing it is not implemented yet. But it also breaks the screen. See attached (using iTerm2).

help

QWK Network Support

Would be nice to see qwk network support, requires work in #31 and likely #3 as well.

Likewise, may want a semi-automated setup for DoveNet support, though this could be done via NNTP, which may actually be easier.

Login screen bug

I am connecting using default OS X terminal. The first time I connect, all graphics look OK. After disconnect, and connecting again, the login screen shows as below.

screen shot 2015-11-20 at 12 32 28 pm

Confirm when discarding messages

When discarding messages (new post, reply, ...) an confirmation prompt should be provided, e.g. "Are you sure?" along with a toggle switch.

Create a generic live form validation framework

Overview

A generic live (that is, before submit) form validation framework needs designed & implemented. This would allow for example non-empty usernames, subjects, invalid emails, etc. to be checked and rejected.

Ideas

  • Before leaving a field, call validation method passing data & ID
  • Validation method should be explicit (supplied in view HJSON) and fallback to generic

Implement message network framework

A message network framework needs implemented. This will allow for various networks (e.g. FidoNet/FTN, QWK based, etc.) to integrate & import/export with the system. I have a design I'm working on for this. This bug is for tracking / relating existing issues.

Some general notes on what's coming:

  • The system will be "layered" allowing different import/export processors (e.g. tossers/etc.) to exist in an abstract way.
    • Conferences are being introduced. These are simply organizational groups of message areas
    • All area_name stuff in DB/code is being renamed to area_tag
    • A new configuration structure for conferences, areas, and message network mappings will be introduced (e.g. for config.hjson)
    • Initial proof of concept will be FTN processing. Next will very likely be QWK.

Current design for menu.hjson message areas & conferences is something like such:

conferences: {
    agn: {
        name: Agoranet
        desc: The Official Network of ACiD Productions

        //  simple ACS for access
        acs: THEACSSTRING

        areas: {
            agn_bbs: {
                name: BBS Discussion
                desc: General BBS discussion

                //  ACS for what users can do here
                acs: {
                    read: THEACSSTRING
                    write: THEACSSTRING
                    manage: THEACSSTRING
                }
                default: true
            }
        }
    }
}

Web UI

I know there's still some firming up of the web-ui to go... but some tool suggestions for a web user interface...

  • fTelnet - HTML5 Terminal
  • Material UI - for React
  • Redux - Flux-like control flow
  • Webpack - module bundler/build tool
  • Babel - ES6/7 feature support and JSX
  • fetch
  • polyfills service - browser polyfill as a service
    • Can be used to patch browser features directly, so that babel only needs to do what can't be polyfilled (generator/async/await, etc)

I'm happy to help with this, I'm planning on using my week off at the end of the month to work on a BBS ui anyways, and the wiring for services should be generic enough to reuse. I'm planning on tightly coupling the web ui, with a node api service, but that node api service should be able to be replaced with different backends, synchronet, enigma, x84, etc.

ES6/7 support

May want to consider the use of babel with gulp so that you can use ES6/7 features in the codebase.

It will mean a build step for changes, but could simply check in the built version in npm, and have the source in core-src building to ./bbs.js (not checked into github) or use babel-node as an npm start-dev script that will run directly against the source.

Databases not initialized on first run

I got it going but had to read through the source a bit to see the folder, just had to create the db folder (also the logs folder) but the db part wasn't super-clear when the error was thrown.

coruscant:enigma-bbs matt$ node main.js
events.js:141
throw er; // Unhandled 'error' event
^

Error: SQLITE_CANTOPEN: unable to open database file
at Error (native)

Exception thrown in door.js if encoding is not supported by Node

Due to recent versions of Node preventing iconv-lite extendNodeEncodings(), an exception is thrown when door.py attempts to call setEncoding() if the encoding is not supported by Node itself (e.g. 'cp437')

Stack:

< string_decoder.js:24
<     throw new Error('Unknown encoding: ' + encoding);
<           ^
< Error: Unknown encoding: cp437
<     at assertEncoding (string_decoder.js:24:11)
<     at new exports.StringDecoder (string_decoder.js:38:3)
<     at Socket.Readable.setEncoding (_stream_readable.js:206:33)
<     at Terminal.setEncoding (/home/bashby/dev/enigma-bbs/node_modules/ptyw.js/lib/pty.js:288:17)
<     at Door.run (/home/bashby/dev/enigma-bbs/core/door.js:50:7)
<     at AbracadabraModule.runDoor (/home/bashby/dev/enigma-bbs/mods/abracadabra.js:157:16)
<     at AbracadabraModule.finishedLoading (/home/bashby/dev/enigma-bbs/mods/abracadabra.js:178:7)
<     at complete (/home/bashby/dev/enigma-bbs/mods/abracadabra.js:126:11)
<     at /home/bashby/dev/enigma-bbs/node_modules/async/lib/async.js:721:13
<     at _toString (/home/bashby/dev/enigma-bbs/node_modules/async/lib/async.js:52:16)

IRC Channel

It may be worthwhile to have/document an IRC channel for BBS support, either via freenode, irc.synchro.net or efnet.

Creating and replying to messages

A few things:

  • Replying to messages should only allow the new message to be entered, not edit the from, to or subject (perhaps this last one, subject, might be editable).
  • Empty subjects should not be allowed.

MCI codes break for art with a height greater than term height

Overview

The current MCI implementation breaks when art is used that has a height greater than term height (e.g. > ~24/25 rows). Note that breakage can also occur when the height is truncated due to the SyncTERM status bar.

Options:

  • Using the current query position technique, offsets need to be applied.
  • Use an internal tracking technique

MaskEditTextView is clunky

The view MaskEditTextView is very clunky. Cursor jumps around, things get out of wack under some scenarios.

Needs a good overhaul.

Rumors

Rumor Support
Add support for standard/expected BBS rumors:

  • MCI code for random rumor
  • Module to expose interaction with rumors
  • API(s) for rumor access

Localization

Are there plans to localize? I am not interested in any other language pack, but others might. What I am interested in is to change the prompts and other strings to ones that are more appropriate for a professional environment.

Document ACS system

The current ACS system needs documented. Mostly of interest now is in relation to message conferences & areas.

Implement FidoNet FTN import/export

FidoNet FTN style import/export needs to be fully implemented. Some experimental import code has been written, but needs quite a bit of restructure. Gaze can be utilized to monitor for FTN packet arrivals.

Provide better quick start & basic information in documentation

Need more documentation, and perhaps one full example of the HJSON file. After running npm install, and running node main.js it will not print anything, and I would not know what to do, or where to check a telnet connection, as I could not find the port to connect to.

Anyway, alpha stage, I guess. Work on it! :-)

DOS Door Support

Door support is an essential feature... I've looked into it a little bit... My plan was to make a separate door runner server... But worth mentioning dosemu for Linux and dosbox/vdos for elsewhere.

Glad to see you working in this... My efforts aren't as far along at all.

Theme creation

Is there a template somewhere which will help with the creation of a theme? Some information on this would be great.

Windows door support

Various issues exist on Windows for doors (not limited to):

  1. pty.js currently crashes
  2. No way to share sockets

Possible solution for (2) is to have a temporary server that spawns for communication purposes (e.g. QEMU and DOSBox can likely use this)

enigma-bbs organization

May want to create an enigma-bbs org, and re-locate the code to that org... If you're interested in using the bbs-io org, I invited you with full access.

It will make it easier to add contributors.

Require Node.js 4.2.x+

Update requirements for Node.js to v4.2.x or higher. Currently it's at v0.12.2. Using 4.2.x+ will give the ability to use newer ES6 features.

Changes not properly merged when config files are re-cached

Problem
When configuration files (menu.hjson, theme.hjson, ...) are re-cached due to an external modification, changes are not properly reflected back into the "live" view of the data. The system must be restarted for them to apply.

Expected
Changes should update in with a restart

Implement MultiLineTextEditView preview mode

Overview

MultiLineTextEditView needs preview mode implemented. This should provide the following at a minimum:

  • RA style pipe codes resolved (e.g. show colors)
  • Basic Markdown resolved (bold, italic, and links)
  • Preview/edit mode should be toggleable
  • Proper ANSI display

Notes on markdown:

bold: bold + colored
italic: /italic/ + colored
link/href: colored

Create a installation script

It would be nice to have a installation script that users -- especially those completely new to Node.js -- can use to quickly get up and running.

Example:

curl -o- https://github.com/NuSkooler/enigma-bbs/misc/install.sh | bash

(Note: Just an example! The above does not currently exist!)

The script should try to work on most popular *nix environments. Windows will require something else...

Implement System Log

General Idea

  • Stores time stamped log/event entries
  • Entries can be rounded to day/week/month/etc. for various stats
  • How much kept is configurable
  • Name/value pairs

Examples

  • This weeks callers
  • This months top posters
  • Last callers history can use this vs it's own storage mechanism

Files base

Files Base
Meta bug for files base/area.

Features
Not limited to:

  • Standard/expected features
  • FILE_ID.DIZ & DESC.SDI support
  • TBD protocol(s)
  • Additional modern features such as torrent & direct downloads when servers become available
    • Short URLs with n expiration time for direct downloads and/or web based auth/IP detection
  • Upload processing
    • Virus scanners
    • Add NFO
  • ACS controlled access
  • Integration with message area such as "new files" posts

New user / apply crashes if no message areas defined

Got it to run, using defaults. Getting this after using "Apply:"

(node) Buffer.get is deprecated. Use array indexes instead.
/Users/David/Desktop/enigma-bbs/mods/apply.js:105
                message_area_name   : getDefaultMessageArea().name,
                                                             ^

TypeError: Cannot read property 'name' of undefined
    at validationResult (/Users/David/Desktop/enigma-bbs/mods/apply.js:105:48)
    at userIdAndName (/Users/David/Desktop/enigma-bbs/mods/apply.js:62:4)
    at Statement.onResults (/Users/David/Desktop/enigma-bbs/core/user.js:399:6)

I am testing Enigma under OS X right now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.