Merge branch 'master' of github.com:NuSkooler/enigma-bbs into 0.0.9-alpha

This commit is contained in:
Bryan Ashby 2018-02-02 21:31:52 -07:00
commit 6d13c19f94
62 changed files with 1974 additions and 810 deletions

3
.gitignore vendored
View File

@ -6,3 +6,6 @@ logs/
db/
dropfiles/
node_modules/
docs/_site/
docs/.sass-cache/
`

24
docs/404.html Normal file
View File

@ -0,0 +1,24 @@
---
layout: default
---
<style type="text/css" media="screen">
.container {
margin: 10px auto;
max-width: 600px;
text-align: center;
}
h1 {
margin: 30px 0;
font-size: 4em;
line-height: 1;
letter-spacing: -1px;
}
</style>
<div class="container">
<h1>404</h1>
<p><strong>Page not found :(</strong></p>
<p>The requested page could not be found.</p>
</div>

31
docs/Gemfile Normal file
View File

@ -0,0 +1,31 @@
source "https://rubygems.org"
# Hello! This is where you manage which Jekyll version is used to run.
# When you want to use a different version, change it below, save the
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
#
# bundle exec jekyll serve
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "~> 3.7.0"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
gem "hacker"
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
# uncomment the line below. To upgrade, run `bundle update github-pages`.
# gem "github-pages", group: :jekyll_plugins
# If you have any plugins, put them here!
group :jekyll_plugins do
gem "jekyll-feed", "~> 0.6"
gem 'jekyll-seo-tag'
gem 'jekyll-theme-hacker'
gem 'jekyll-sitemap'
gem 'jemoji'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]

101
docs/Gemfile.lock Normal file
View File

@ -0,0 +1,101 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (4.2.9)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
colorator (1.1.0)
concurrent-ruby (1.0.5)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.5)
ffi (1.9.18)
forwardable-extended (2.6.0)
gemoji (3.0.0)
hacker (0.0.1)
html-pipeline (2.7.1)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.1)
concurrent-ruby (~> 1.0)
jekyll (3.7.0)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (~> 1.14)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-feed (0.9.2)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.1)
sass (~> 3.4)
jekyll-seo-tag (2.4.0)
jekyll (~> 3.3)
jekyll-sitemap (1.1.1)
jekyll (~> 3.3)
jekyll-theme-hacker (0.1.0)
jekyll (~> 3.5)
jekyll-seo-tag (~> 2.0)
jekyll-watch (2.0.0)
listen (~> 3.0)
jemoji (0.8.1)
activesupport (~> 4.0, >= 4.2.9)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
jekyll (>= 3.0)
kramdown (1.16.2)
liquid (4.0.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
mercenary (0.3.6)
mini_portile2 (2.3.0)
minitest (5.11.1)
nokogiri (1.8.1)
mini_portile2 (~> 2.3.0)
pathutil (0.16.1)
forwardable-extended (~> 2.6)
public_suffix (3.0.1)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rouge (3.1.0)
ruby_dep (1.5.0)
safe_yaml (1.0.4)
sass (3.5.5)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
thread_safe (0.3.6)
tzinfo (1.2.4)
thread_safe (~> 0.1)
PLATFORMS
ruby
DEPENDENCIES
hacker
jekyll (~> 3.7.0)
jekyll-feed (~> 0.6)
jekyll-seo-tag
jekyll-sitemap
jekyll-theme-hacker
jemoji
tzinfo-data
BUNDLED WITH
1.16.1

30
docs/_config.yml Normal file
View File

@ -0,0 +1,30 @@
title: ENiGMA½ BBS Software
email: your-email@example.com
description: >- # this means to ignore newlines until "baseurl:"
ENiGMA½ BBS is modern open source BBS software with a nostalgic flair, written in Node.js.
url:
logo: /assets/images/enigma-logo.png
# Build settings
markdown: kramdown
theme: jekyll-theme-hacker
plugins:
- jekyll-feed
- jekyll-seo-tag
- jekyll-sitemap
- jemoji
baseurl: /enigma-bbs
# Exclude from processing.
# The following items will not be processed, by default. Create a custom list
# to override the default setting.
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/
- .idea

67
docs/_includes/nav.md Normal file
View File

@ -0,0 +1,67 @@
- Installation
- [Installation Methods]({{ site.baseurl }}{% link installation/installation-methods.md %})
- [Install script]({{ site.baseurl }}{% link installation/install-script.md %})
- [Docker]({{ site.baseurl }}{% link installation/docker.md %})
- [Manual installation]({{ site.baseurl }}{% link installation/manual.md %})
- [OS / Hardware Specific]({{ site.baseurl }}{% link installation/os-hardware.md %})
- Raspberry Pi
- Windows
- [Your Network Setup]({{ site.baseurl }}{% link installation/network.md %})
- [Testing Your Installation]({{ site.baseurl }}{% link installation/testing.md %})
- [Production Installation]({{ site.baseurl }}{% link installation/production.md %})
- Configuration
- [Creating Config Files]({{ site.baseurl }}{% link configuration/creating-config.md %})
- [SysOp Setup]({{ site.baseurl }}{% link configuration/sysop-setup.md %})
- [Editing hjson]({{ site.baseurl }}{% link configuration/editing-hjson.md %})
- [config.hjson]({{ site.baseurl }}{% link configuration/config-hjson.md %})
- [menu.hjson]({{ site.baseurl }}{% link configuration/menu-hjson.md %})
- prompt.hjson
- [Directory Structure]({{ site.baseurl }}{% link configuration/directory-structure.md %})
- [Archivers]({{ site.baseurl }}{% link configuration/archivers.md %})
- Scheduled jobs
- SMTP
- File Base
- [About]({{ site.baseurl }}{% link filebase/index.md %})
- [Configuring a File Area]({{ site.baseurl }}{% link filebase/first-file-area.md %})
- [ACS model]({{ site.baseurl }}{% link filebase/acs.md %})
- [Uploads]({{ site.baseurl }}{% link filebase/uploads.md %})
- [Web Access]({{ site.baseurl }}{% link filebase/web-access.md %})
- [TIC Support]({{ site.baseurl }}{% link filebase/tic-support.md %}) (Importing from FTN networks)
- Tips and tricks
- Network mounts and symlinks
- Message Areas
- [Configuring a Message Area]({{ site.baseurl }}{% link messageareas/configuring-a-message-area.md %})
- [Message networks]({{ site.baseurl }}{% link messageareas/message-networks.md %})
- [BSO Import & Export]({{ site.baseurl }}{% link messageareas/bso-import-export.md %})
- [Netmail]({{ site.baseurl }}{% link messageareas/netmail.md %})
- Art
- [General]({{ site.baseurl }}{% link art/general.md %})
- [Themes]({{ site.baseurl }}{% link art/themes.md %})
- [MCI Codes]({{ site.baseurl }}{% link art/mci.md %})
- Servers
- Login Servers
- [Telnet]({{ site.baseurl }}{% link servers/telnet.md %})
- [SSH]({{ site.baseurl }}{% link servers/ssh.md %})
- [WebSocket]({{ site.baseurl }}{% link servers/websocket.md %})
- Build your own
- Content Servers
- [Web]({{ site.baseurl }}{% link servers/web-server.md %})
- Modding
- [Local Doors]({{ site.baseurl }}{% link modding/local-doors.md %})
- [Door Servers]({{ site.baseurl }}{% link modding/door-servers.md %})
- DoorParty
- BBSLink
- Combatnet
- Exodus
- [Existing Mods]({{ site.baseurl }}{% link modding/existing-mods.md %})
- [Oputil]({{ site.baseurl }}{% link oputil/index.md %})
- Troubleshooting
- [Monitoring Logs]({{ site.baseurl }}{% link troubleshooting/monitoring-logs.md %})

View File

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">
{% seo %}
</head>
<body>
<a href="https://github.com/NuSkooler/enigma-bbs"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"></a>
<div class="sidebar" id="sidebar">
<div class="container">
<a href="{{ site.baseurl }}"><img src="{{ '/assets/images/enigma-logo.png' | relative_url }}" class="logo" /></a>
</div>
{% capture nav_include %}{% include nav.md %}{% endcapture %}
{{ nav_include | markdownify }}
</div>
<div class="main_area">
<div class="container">
<section id="main_content">
{{ content }}
</section>
</div>
</div>
{% if site.google_analytics %}
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '{{ site.google_analytics }}', 'auto');
ga('send', 'pageview');
</script>
{% endif %}
</body>
</html>

8
docs/_layouts/page.html Normal file
View File

@ -0,0 +1,8 @@
---
layout: default
---
<div class="page">
<h1 class="page-title">{{ page.title }}</h1>
{{ content }}
</div>

25
docs/_layouts/post.html Normal file
View File

@ -0,0 +1,25 @@
---
layout: default
---
<div class="post">
<h1 class="post-title">{{ page.title }}</h1>
<span class="post-date">{{ page.date | date_to_string }}</span>
{{ content }}
</div>
<div class="related">
<h2>Related Posts</h2>
<ul class="related-posts">
{% for post in site.related_posts limit:3 %}
<li>
<h3>
<a href="{{ post.url }}">
{{ post.title }}
<small>{{ post.date | date_to_string }}</small>
</a>
</h3>
</li>
{% endfor %}
</ul>
</div>

View File

@ -0,0 +1,16 @@
$apple-blossom: #ac4142;
$alto: #d0d0d0;
$bouquet: #aa759f;
$enigma-purple: #8900aa;
$chelsea-cucumber: #90a959;
$cod-grey: #151515;
$conifer: #b5e853;
$dove-grey: #666;
$gallery: #eaeaea;
$grey: #888;
$gulf-stream: #75b5aa;
$hippie-blue: #6a9fb5;
$potters-clay: #8f5536;
$rajah: #f4bf75;
$raw-sienna: #d28445;
$silver-chalice: #aaa;

View File

@ -0,0 +1,326 @@
@import "rouge-base16-dark";
@import "default_colors";
$body-background: $cod-grey !default;
$body-foreground: $gallery !default;
$header: $conifer !default;
$blockquote-color: $silver-chalice !default;
$blockquote-border: $dove-grey !default;
body {
margin: 0;
padding: 0;
background: $body-background url("../images/bkg.png") 0 0;
color: $body-foreground;
font-size: 16px;
line-height: 1.5;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
}
/* General & 'Reset' Stuff */
.container {
width: 90%;
/*max-width: 1000px;*/
margin: 0 auto;
}
section {
display: block;
margin: 0 0 20px 0;
}
h1, h2, h3, h4, h5, h6 {
margin: 0 0 20px;
}
li {
line-height: 1.4 ;
}
/* Header, <header>
header - container
h1 - project name
h2 - project description
*/
header {
background: rgba(0, 0, 0, 0.1);
width: 100%;
border-bottom: 1px dashed $conifer; //header;
padding: 20px 0;
margin: 0 0 40px 0;
text-align: center;
}
header h1 {
font-size: 30px;
line-height: 1.5;
margin: 0 0 0 -40px;
font-weight: bold;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
color: $conifer;//$header;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1),
0 0 5px rgba(181, 232, 83, 0.1),
0 0 10px rgba(181, 232, 83, 0.1);
letter-spacing: -1px;
-webkit-font-smoothing: antialiased;
}
header h1:before {
content: "./ ";
font-size: 24px;
}
header h2 {
font-size: 18px;
font-weight: 300;
color: #666;
}
header img {
padding: 0px;
margin: 0px;
max-width: 100%;
}
#downloads .btn {
display: inline-block;
text-align: center;
margin: 0;
}
/* Main Content
*/
.sidebar {
position: fixed;
top: 0;
left: 0;
bottom: 0;
width: 22rem;
height: 100%;
text-align: left;
border-right: 1px dashed $conifer; //header;
overflow-y: scroll;
display: block;
float: left;
.logo {
padding-top: 20px;
max-width: 100%;
}
ul {
padding-bottom: 0px;
}
ul li {
margin-bottom: 0px;
padding-top: 5px;
}
}
.main_area {
padding-left: 22em;
padding-top: 20px;
}
#main_content {
-webkit-font-smoothing: antialiased;
}
section img {
max-width: 100%
}
h1, h2, h3, h4, h5, h6 {
font-weight: normal;
font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
color: $header;
letter-spacing: -0.03em;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1),
0 0 5px rgba(181, 232, 83, 0.1),
0 0 10px rgba(181, 232, 83, 0.1);
}
#main_content h1 {
font-size: 30px;
}
#main_content h2 {
font-size: 24px;
}
#main_content h3 {
font-size: 18px;
}
#main_content h4 {
font-size: 14px;
}
#main_content h5 {
font-size: 12px;
text-transform: uppercase;
margin: 0 0 5px 0;
}
#main_content h6 {
font-size: 12px;
text-transform: uppercase;
color: #999;
margin: 0 0 5px 0;
}
dt {
font-style: italic;
font-weight: bold;
}
ul {
padding-bottom: 5px;
}
ul li {
list-style-image:url('../images/bullet.png');
margin-bottom: 10px;
padding-top: 10px;
}
nav {
text-align: left;
ul {
list-style: none;
margin-left: 0;
padding-left: 0;
margin-top: 20;
margin-bottom: 0;
padding-bottom: 0;
li {
display: inline-block;
margin-left: 0.5em;
padding-right: 20px;
a {
color: $enigma-purple;
text-decoration: none;
}
a:hover {
color: $bouquet;
}
}
}
}
blockquote {
color: $blockquote-color;
padding-left: 10px;
border-left: 1px dotted $blockquote-border;
}
pre {
background: rgba(0, 0, 0, 0.9);
border: 1px solid rgba(255, 255, 255, 0.15);
padding: 10px;
font-size: 16px;
color: #b5e853;
border-radius: 2px;
text-wrap: normal;
overflow: auto;
overflow-y: hidden;
}
code.highlighter-rouge {
background: rgba(0,0,0,0.9);
border: 1px solid rgba(255, 255, 255, 0.15);
padding: 0px 3px;
margin: 0px -3px;
color: #aa759f;
border-radius: 2px;
}
table {
width: 100%;
margin: 0 0 20px 0;
}
th {
text-align: left;
border-bottom: 1px dashed #b5e853;
padding: 5px 10px;
}
td {
padding: 5px 10px;
}
hr {
height: 0;
border: 0;
border-bottom: 1px dashed #b5e853;
color: #b5e853;
}
/* Buttons
*/
.btn {
display: inline-block;
background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.3), rgba(35, 35, 35, 0.3) 50%, rgba(10, 10, 10, 0.3) 50%, rgba(0, 0, 0, 0.3));
padding: 8px 18px;
border-radius: 50px;
border: 2px solid rgba(0, 0, 0, 0.7);
border-bottom: 2px solid rgba(0, 0, 0, 0.7);
border-top: 2px solid rgba(0, 0, 0, 1);
color: rgba(255, 255, 255, 0.8);
font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 13px;
text-decoration: none;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.75);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}
.btn:hover {
background: -webkit-linear-gradient(top, rgba(40, 40, 40, 0.6), rgba(35, 35, 35, 0.6) 50%, rgba(10, 10, 10, 0.8) 50%, rgba(0, 0, 0, 0.8));
}
.btn .icon {
display: inline-block;
width: 16px;
height: 16px;
margin: 1px 8px 0 0;
float: left;
}
.btn-github .icon {
opacity: 0.6;
background: url("../images/blacktocat.png") 0 0 no-repeat;
}
/* Links
a, a:hover, a:visited
*/
a {
color: #63c0f5;
text-shadow: 0 0 5px rgba(104, 182, 255, 0.5);
}
/* Clearfix */
.cf:before, .cf:after {
content:"";
display:table;
}
.cf:after {
clear:both;
}
.cf {
zoom:1;
}

View File

@ -0,0 +1,87 @@
/*
generated by rouge http://rouge.jneen.net/
original base16 by Chris Kempson (https://github.com/chriskempson/base16)
*/
@import "default_colors";
.highlight {
$plaintext: $alto !default;
$string: $chelsea-cucumber !default;
$literal: $chelsea-cucumber !default;
$keyword: $bouquet !default;
$error-foreground: $cod-grey !default;
$error-background: $apple-blossom !default;
$comment: $grey !default;
$preprocessor: $rajah !default;
$name-space: $rajah !default;
$name-attribute: $hippie-blue !default;
$operator: $rajah !default;
$keyword-type: $raw-sienna !default;
$regex: $gulf-stream !default;
$string-escape: $potters-clay !default;
$deleted: $apple-blossom !default;
$header: $hippie-blue !default;
color: $plaintext;
table td { padding: 5px; }
table pre { margin: 0; }
.w {
color: $plaintext;
}
.err {
color: $error-foreground;
background-color: $error-background;
}
.c, .cd, .cm, .c1, .cs {
color: $comment;
}
.cp {
color: $preprocessor;
}
.o, .ow {
color: $operator;
}
.p, .pi {
color: $plaintext;
}
.gi {
color: $string;
}
.gd {
color: $deleted;
}
.gh {
color: $header;
font-weight: bold;
}
.k, .kn, .kp, .kr, .kv {
color: $keyword;
}
.kc, .kt, .kd {
color: $keyword-type;
}
.s, .sb, .sc, .sd, .s2, .sh, .sx, .s1 {
color: $string;
}
.sr {
color: $regex;
}
.si, .se {
color: $string-escape;
}
.nt, .nn, .nc, .no{
color: $name-space;
}
.na {
color: $name-attribute;
}
.m, .mf, .mh, .mi, .il, .mo, .mb, .mx {
color: $literal;
}
.ss {
color: $string;
}
}

View File

@ -1,19 +0,0 @@
# About ENiGMA½
## High Level Feature Overview
* 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
* MCI support for lightbars, toggles, input areas, and so on plus many other other bells and whistles
* Telnet & **SSH** 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
* [SAUCE](http://www.acid.org/info/sauce/sauce.htm) support
* 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](doors.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), and [DoorParty](http://forums.throwbackbbs.com/) support!
* [Bunyan](https://github.com/trentm/node-bunyan) logging
* [Message networks](msg_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export
* [Gazelle](https://github.com/WhatCD/Gazelle) inspirted File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](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!

6
docs/art/general.md Normal file
View File

@ -0,0 +1,6 @@
---
layout: page
title: General
---
General art lives in the `art/general` directory. 'General' art is ANSI you want to stay consistent across themes,
such as a welcome ANSI or a rotation of logoff ANSIs.

135
docs/art/mci.md Normal file
View File

@ -0,0 +1,135 @@
---
layout: page
title: MCI Codes
---
ENiGMA½ supports a variety of MCI codes. Some **predefined** codes produce information about the current user, system,
or other statistics while others are used to instantiate a **View**. MCI codes are two characters in length and are
prefixed with a percent (%) symbol. Some MCI codes have additional options that may be set directly from the code itself
while others -- and more advanced options -- are controlled via the current theme. Standard (non-focus) and focus colors
are set by placing duplicate codes back to back in art files.
## Predefined MCI Codes
There are many predefined MCI codes that can be used anywhere on the system (placed in any art file). More are added all
the time so also check out [core/predefined_mci.js](https://github.com/NuSkooler/enigma-bbs/blob/master/core/mci_view_factory.js)
for a full listing. Many codes attempt to pay homage to Oblivion/2,
iNiQUiTY, etc.
| Code | Description |
|------|--------------|
| `BN` | Board Name |
| `VL` | Version *label*, e.g. "ENiGMA½ v0.0.3-alpha" |
| `VN` | Version *number*, eg.. "0.0.3-alpha" |
| `SN` | SysOp username |
| `SR` | SysOp real name |
| `SL` | SysOp location |
| `SA` | SysOp affiliations |
| `SS` | SysOp sex |
| `SE` | SysOp email address |
| `UN` | Current user's username |
| `UI` | Current user's user ID |
| `UG` | Current user's group membership(s) |
| `UR` | Current user's real name |
| `LO` | Current user's location |
| `UA` | Current user's age |
| `BD` | Current user's birthdate (using theme date format) |
| `US` | Current user's sex |
| `UE` | Current user's email address |
| `UW` | Current user's web address |
| `UF` | Current user's affiliations |
| `UT` | Current user's *theme ID* (e.g. "luciano_blocktronics") |
| `UC` | Current user's login/call count |
| `ND` | Current user's connected node number |
| `IP` | Current user's IP address |
| `ST` | Current user's connected server name (e.g. "Telnet" or "SSH") |
| `FN` | Current user's active file base filter name |
| `DN` | Current user's number of downloads |
| `DK` | Current user's download amount (formatted to appropriate bytes/megs/etc.) |
| `UP` | Current user's number of uploads |
| `UK` | Current user's upload amount (formatted to appropriate bytes/megs/etc.) |
| `NR` | Current user's upload/download ratio |
| `KR` | Current user's upload/download *bytes* ratio |
| `MS` | Current user's account creation date (using theme date format) |
| `PS` | Current user's post count |
| `PC` | Current user's post/call ratio |
| `MD` | Current user's status/viewing menu/activity |
| `MA` | Current user's active message area name |
| `MC` | Current user's active message conference name |
| `ML` | Current user's active message area description |
| `CM` | Current user's active message conference description |
| `SH` | Current user's term height |
| `SW` | Current user's term width |
| `DT` | Current date (using theme date format) |
| `CT` | Current time (using theme time format) |
| `OS` | System OS (Linux, Windows, etc.) |
| `OA` | System architecture (x86, x86_64, arm, etc.) |
| `SC` | System CPU model |
| `NV` | System underlying Node.js version |
| `AN` | Current active node count |
| `TC` | Total login/calls to system |
| `RR` | Displays a random rumor |
| `SD` | Total downloads, system wide |
| `SO` | Total downloaded amount, system wide (formatted to appropriate bytes/megs/etc.) |
| `SU` | Total uploads, system wide |
| `SP` | Total uploaded amount, system wide (formatted to appropriate bytes/megs/etc.) |
A special `XY` MCI code may also be utilized for placement identification when creating menus.
## Views
A **View** is a control placed on a **form** that can display variable data or collect input. One example of a View is
a Vertical Menu (`%VM`): Old-school BBSers may recognize this as a lightbar menu.
| Code | Name | Description |
|------|----------------------|------------------|
| `TL` | Text Label | Displays text |
| `ET` | Edit Text | Collect user input |
| `ME` | Masked Edit Text | Collect user input using a *mask* |
| `MT` | Multi Line Text Edit | Multi line edit control |
| `BT` | Button | A button |
| `VM` | Vertical Menu | A vertical menu aka a vertical lightbar |
| `HM` | Horizontal Menu | A horizontal menu aka a horizontal lightbar |
| `SM` | Spinner Menu | A spinner input control |
| `TM` | Toggle Menu | A toggle menu commonly used for Yes/No style input |
| `KE` | Key Entry | A *single* key input control |
Peek at [/core/mci_view_factory.js](https://github.com/NuSkooler/enigma-bbs/blob/master/core/mci_view_factory.js) to
see additional information.
## Properties & Theming
Predefined MCI codes and other Views can have properties set via `menu.hjson` and further *themed* via `theme.hjson`.
### Common Properties
| Property | Description |
|-------------|--------------|
| `textStyle` | Sets the standard (non-focus) text style. See **Text Styles** below |
| `focusTextStyle` | Sets focus text style. See **Text Styles** below. |
| `itemSpacing` | Used to separate items in menus such as Vertical Menu and Horizontal Menu Views. |
| `height` | Sets the height of views such as menus that may be > 1 character in height |
| `width` | Sets the width of a view |
| `focus` | If set to `true`, establishes initial focus |
| `text` | (initial) text of a view |
| `submit` | If set to `true` any `accept` action upon this view will submit the encompassing **form** |
These are just a few of the properties set on various views. *Use the source Luke*, as well as taking a look at the default
`menu.hjson` and `theme.hjson` files!
### Text Styles
Standard style types available for `textStyle` and `focusTextStyle`:
| Style | Description |
|----------|--------------|
| `normal` | Leaves text as-is. This is the default. |
| `upper` | ENIGMA BULLETIN BOARD SOFTWARE |
| `lower` | enigma bulletin board software |
| `title` | Enigma Bulletin Board Software |
| `first lower` | eNIGMA bULLETIN bOARD sOFTWARE |
| `small vowels` | eNiGMa BuLLeTiN BoaRD SoFTWaRe |
| `big vowels` | EniGMa bUllEtIn bOArd sOftwArE |
| `small i` | ENiGMA BULLETiN BOARD SOFTWARE |
| `mixed` | EnIGma BUlLEtIn BoaRd SOfTWarE (randomly assigned) |
| `l33t` | 3n1gm4 bull371n b04rd 50f7w4r3 |

25
docs/art/themes.md Normal file
View File

@ -0,0 +1,25 @@
---
layout: page
title: Themes
---
:warning: ***IMPORTANT!*** It is recommended you don't make any customisations to the included
`luciano_blocktronics' theme. Create your own and make changes to that instead:
1. Copy `/art/themes/luciano_blocktronics` to `art/themes/your_board_theme`
2. Update the `info` block at the top of the theme.hjson file:
info: {
name: Awesome Theme
author: Cool Artist
group: Sick Group
enabled: true
}
3. Specify it in the `defaults` section of `config.hjson`. The name supplied should match the name of the
directory you created in step 1:
```hjson
defaults: {
theme: your_board_theme
}
```

View File

@ -0,0 +1,4 @@
---
---
@import 'jekyll-theme-hacker';

BIN
docs/assets/images/bkg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,4 +1,7 @@
# File Archives & Archivers
---
layout: page
title: Archivers
---
ENiGMA½ can detect and process various archive formats such as zip and arj for a variety of tasks from file upload processing to EchoMail bundle compress/decompression. The `archives` section of `config.hjson` is used to override defaults, add new handlers, and so on.
## Archivers

View File

@ -1,6 +1,7 @@
# Configuration
Configuration files in ENiGMA½ are simple UTF-8 encoded [HJSON](http://hjson.org/) files. HJSON is just like JSON but simplified and much more resilient to human error.
---
layout: page
title: config.hjson
---
## System Configuration
The main system configuration file, `config.hjson` both overrides defaults and provides additional configuration such as message areas. The default path is `/enigma-bbs-install-path/config/config.hjson` though you can override the `config.hjson` location with the `--config` parameter when invoking `main.js`. Values found in `core/config.js` may be overridden by simply providing the object members you wish replace.
@ -31,12 +32,6 @@ general: {
While not everything that is available in your `config.hjson` file can be found defaulted in `core/config.js`, a lot is. [Poke around and see what you can find](https://github.com/NuSkooler/enigma-bbs/blob/master/core/config.js)!
### Specific Areas of Interest
* [Message Conferences](msg_conf_area.md)
* [Message Networks](msg_networks.md)
* [File Base](file_base.md)
* [File Archives & Archivers](archives.md)
* [Web Server](web_server.md)
### A Sample Configuration
Below is a **sample** `config.hjson` illustrating various (but certainly not all!) elements that can be configured / tweaked.
@ -125,9 +120,3 @@ Below is a **sample** `config.hjson` illustrating various (but certainly not all
}
}
```
## See Also
* [Modding](modding.md)
* [Doors](doors.md)
* [MCI Codes](mci.md)
* [Menu System docs](menu_system.md)

View File

@ -0,0 +1,27 @@
---
layout: page
title: Creating Initial Config Files
---
Configuration files in ENiGMA½ are simple UTF-8 encoded [HJSON](http://hjson.org/) files. HJSON is just
like JSON but simplified and much more resilient to human error.
## config.hjson
Your initial configuration skeleton can be created using the `oputil.js` command line utility. From your
enigma-bbs root directory:
```
./oputil.js config new
```
You will be asked a series of questions to create an initial configuration.
## menu.hjson and prompt.hjson
Create your own copy of `/config/menu.hjson` and `/config/prompt.hjson`, and specify it in the
`general` section of `config.hjson`:
````hjson
general: {
menuFile: my-menu.hjson
promptFile: my-prompt.hjson
}
````

View File

@ -0,0 +1,20 @@
---
layout: page
title: Directory Structure
---
All paths mentioned here are relative to the ENiGMA½ checkout directory.
| Directory | Description |
|---------------------|-----------------------------------------------------------------------------------------------------------|
| `/art/general` | Non-theme art - welcome ANSI, logoff ANSI, etc. See [General Art]({{ site.baseurl }}{% link art/general.md %}).
| `/art/themes` | Theme art. Themes should be in their own subdirectory and contain a theme.hjson. See [Themes]({{ site.baseurl }}{% link art/themes.md %}).
| `/config` | config.hjson, [menu.hjson]({{ site.baseurl }}{% link configuration/menu-hjson.md %}) and prompt.hjson storage. Also default path for SSL certs and public/private keys
| `/db` | All ENiGMA½ databases in Sqlite3 format
| `/docs` | These docs ;-)
| `/dropfiles` | Dropfiles created for [local doors]({{ site.baseurl }}{% link modding/local-doors.md %})
| `/logs` | Logs. See [Monitoring Logs]({{ site.baseurl }}{% link troubleshooting/monitoring-logs.md %})
| `/misc` | Stuff with no other home; reset password templates, common password lists, other random bits
| `/mods` | User mods. See [Modding]({{ site.baseurl }}{% link modding/existing-mods.md %})
| `/node_modules` | External libraries required by ENiGMA½, installed when you run `npm install`
| `/util` | Various tools used in running/debugging ENiGMA½
| `/www` | ENiGMA½'s built in webserver root directory

View File

@ -0,0 +1,16 @@
---
layout: page
title: Editing Hjson
---
Hjson is a syntax extension to JSON. It's NOT a proposal to replace JSON or to incorporate it into the JSON spec itself.
It's intended to be used like a user interface for humans, to read and edit before passing the JSON data to the machine.
You can find more info at the [Hjson.org website](http://hjson.org/).
## Editor Plugins
### Visual Studio Code
[Visual Studio Code](https://code.visualstudio.com/) has a nice Hjson extension that can be installed from
within the IDE. It provides syntax highlighting to make it clear when you've made a syntax mistake within
a config file.

View File

@ -0,0 +1,101 @@
---
layout: page
title: menu.hjson
---
:warning: ***IMPORTANT!*** Before making any customisations, create your own copy of `/config/menu.hjson`, and specify it in the
`general` section of `config.hjson`:
````hjson
general: {
menuFile: my-menu.hjson
}
````
This document and others will refer to `menu.hjson`. This should be seen as an alias to `yourboardname.hjson`
## The Basics
Like all configuration within ENiGMA½, menu configuration is done in [HJSON](https://hjson.org/) format.
Entries in `menu.hjson` are objects defining a menu. A menu in this sense is something the user can see
or visit. Examples include but are not limited to:
* Classical Main, Messages, and File menus
* Art file display
* Module driven menus such as door launchers
Each entry in `menu.hjson` defines an object that represents a menu. These objects live within the `menus`
parent object. Each object's *key* is a menu name you can reference within other menus in the system.
## Example
Let's look a couple basic menu entries:
```hjson
telnetConnected: {
art: CONNECT
next: matrix
options: { nextTimeout: 1500 }
}
```
The above entry `telnetConnected` is set as the Telnet server's first menu entry (set by `firstMenu` in
the Telnet server's config).
An art pattern of `CONNECT` is set telling the system to look for `CONNECT<n>.*` where `<n>` represents
a optional integer in art files to cause randomness, e.g. `CONNECT1.ANS`, `CONNECT2.ANS`, and so on. If
desired, you can also be explicit by supplying a full filename with an extention such as `CONNECT.ANS`.
The entry `next` sets up the next menu, by name, in the stack (`matrix`) that we'll go to after
`telnetConnected`.
Finally, an `options` object may contain various common options for menus. In this case, `nextTimeout`
tells the system to proceed to the `next` entry automatically after 1500ms.
Now let's look at `matrix`, the `next` entry from `telnetConnected`:
```hjson
matrix: {
art: matrix
desc: Login Matrix
form: {
0: {
VM: {
mci: {
VM1: {
submit: true
focus: true
items: [ "login", "apply", "log off" ]
argName: matrixSubmit
}
}
submit: {
*: [
{
value: { matrixSubmit: 0 }
action: @menu:login
}
{
value: { matrixSubmit: 1 },
action: @menu:newUserApplication
}
{
value: { matrixSubmit: 2 },
action: @menu:logoff
}
]
}
}
}
}
}
```
In the above entry, you'll notice `form`. This defines a form(s) object. In this case, a single form
by ID of `0`. The system is then told to use a block only when the resulting art provides a `VM`
(*VerticalMenuView*) MCI entry. `VM1` is then setup to `submit` and start focused via `focus: true`
as well as have some menu entries ("login", "apply", ...) defined. We provide an `argName` for this
action as `matrixSubmit`.
The `submit` object tells the system to attempt to apply provided match entries from any view ID (`*`).
Upon submit, the first match will be executed. For example, if the user selects "login", the first entry
with a value of `{ matrixSubmit: 0 }` will match causing `action` of `@menu:login` to be executed (go
to `login` menu).

View File

@ -0,0 +1,6 @@
---
layout: page
title: SysOp Setup
---
SySop privileges will be granted to the first user to log into a fresh ENiGMA½ installation.

View File

@ -1,89 +0,0 @@
# File Bases
Starting with version 0.0.4-alpha, ENiGMA½ has support for File Bases! Documentation below covers setup of file area(s), but first some information on what to expect:
## A Different Approach
ENiGMA½ has strayed away from the old familure setup here and instead takes a more modern approach:
* [Gazelle](https://whatcd.github.io/Gazelle/) inspired system for searching & browsing files
* No File Conferences (just areas!)
* File Areas are still around but should generally be used less. Instead, files can have one or more tags. Think things like `dos.retro`, `pc.warez`, `games`, etc.
* Temporary web (http:// or https://) download links in additional to standard X/Y/Z protocol support
* Users can star rate files & search/filter by ratings
* Concept of user defined filters
## Other bells and whistles
* A given area can span one to many physical storage locations
* Upload processor can extract and use `FILE_ID.DIZ`/`DESC.SDI`, for standard descriptions as well as `README.TXT`, `*.NFO`, and so on for longer descriptions
* Upload processor also attempts release year estimation by scanning prementioned description file(s)
* Fast indexed Full Text Search (FTS)
* Duplicates validated by SHA-256
## Configuration
Like many things in ENiGMA½, configuration of file base(s) is handled via `config.hjson` -- specifically in the `fileBase` section.
```hjson
fileBase: {
areaStoragePrefix: /path/to/somewhere/
storageTags: {
/* ... */
}
areas: {
/* ... */
}
}
```
(Take a look at `core/config.js` for additional keys that may be overridden)
### Storage tags
**Storage Tags** define paths to a physical (file) storage location that can later be referenced in a file *Area* entry. Each entry may be either a fully qualified path or a relative path. Relative paths are relative to the value set by the `areaStoragePrefix` key. Below is an example defining a both a relative and fully qualified path each attached to a storage tag:
```hjson
storageTags: {
retro_pc: "retro_pc" // relative
retro_pc_bbs: "retro_pc/bbs" // still relative!
bbs_stuff: "/path/to/bbs_stuff_storage" // fully qualified
}
```
### Areas
File base **Areas** are configured using the `fileBase::areas` configuration block in `config.hjson`. Each entry within `areas` must contain a `name`, `desc`, and `storageTags`. Remember that in ENiGMA½ while areas are important, they should generally be used less than in tradditional BBS software. It is recommended to favor the use of more **tags** over more areas.
Example areas section:
```hjson
areas: {
retro_pc: {
name: Retro PC
desc: Oldschool PC/DOS
storageTags: [ "retro_pc", "retro_pc_bbs" ]
acs: {
write: GM[users] /* optional, see ACS below */
}
}
}
```
#### ACS
If no `acs` block is supplied, the following defaults apply to an area:
* `read` (list, download, etc.): `GM[users]`
* `write` (upload): `GM[sysops]`
To override read and/or write ACS, supply a valid `acs` member.
#### Uploads
Note that `storageTags` may contain *1:n* storage tag references. **Uploads in a particular area are stored in the first storage tag path**.
## 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`. The full URL given to users is built using `contentServers::web::domain` and will default to HTTPS (http://) 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.
## oputil
The `oputil.js` +op utilty `fb` command has tools for managing file bases. For example, to import existing files found within **all** storage locations tied to an area and set tags `tag1` and `tag2` to each import:
```bash
oputil.js fb scan some_area --tags tag1,tag2
```
See `oputil.js fb --help` for additional information.

25
docs/filebase/acs.md Normal file
View File

@ -0,0 +1,25 @@
---
layout: page
title: ACS
---
If no `acs` block is supplied in a file area definition, the following defaults apply to an area:
* `read` (list, download, etc.): `GM[users]`
* `write` (upload): `GM[sysops]`
To override read and/or write ACS, supply a valid `acs` member.
## Example File Area Config with ACS
```hjson
areas: {
retro_pc: {
name: Retro PC
desc: Oldschool PC/DOS
storageTags: [ "retro_pc", "retro_pc_bbs" ]
acs: {
write: GM[users]
}
}
}
```

View File

@ -0,0 +1,71 @@
---
layout: page
title: Configuring a File Base
---
## ENiGMA½ File Base Key Concepts
Like many things in ENiGMA½, configuration of file base(s) is handled via `config.hjson` -- specifically
in the `fileBase` section. First, there are a couple of concepts you should understand.
### Storage tags
**Storage Tags** define paths to a physical (file) storage locations that are referenced in a
file *Area* entry. Each entry may be either a fully qualified path or a relative path. Relative paths
are relative to the value set by the `areaStoragePrefix` key (defaults to `<enigma_install_dir/file_base`).
Below is an example defining a both a relative and fully qualified path each attached to a storage tag:
```hjson
storageTags: {
retro_pc: "retro_pc" // relative
retro_pc_bbs: "retro_pc/bbs" // still relative!
bbs_stuff: "/path/to/bbs_stuff_storage" // fully qualified
}
```
Note that on their own, storage tags don't do anything - they are simply pointers to storage locations on
your system.
### Areas
File base **Areas** are configured using the `fileBase::areas` configuration block in `config.hjson`.
Each entry within `areas` must contain a `name`, `desc`, and `storageTags`. Remember that in ENiGMA½
while areas are important, they should generally be used less than in tradditional BBS software. It is
recommended to favor the use of more **tags** over more areas.
Example areas section:
```hjson
areas: {
retro_pc: {
name: Retro PC
desc: Oldschool PC/DOS
storageTags: [ "retro_pc", "retro_pc_bbs" ]
}
}
```
## Example Configuration
This combines the two concepts described above. When viewing the file areas from ENiGMA½ a user will
only see the "Retro PC" area, but the files in the area are stored in the two locations defined in the
`storageTags` section.
```hjson
fileBase: {
areaStoragePrefix: /enigma-bbs/file_base
storageTags: {
retro_pc: "retro_pc"
retro_pc_bbs: "retro_pc/bbs"
}
areas: {
retro_pc: {
name: Retro PC
desc: Oldschool PC/DOS
storageTags: [ "retro_pc", "retro_pc_bbs" ]
}
}
}
```

19
docs/filebase/index.md Normal file
View File

@ -0,0 +1,19 @@
---
layout: page
title: About File Areas
---
## A Different Approach
ENiGMA½ has strayed away from the old familure setup here and instead takes a more modern approach:
* [Gazelle](https://whatcd.github.io/Gazelle/) inspired system for searching & browsing files
* No File Conferences (just areas!)
* File Areas are still around but should generally be used less. Instead, files can have one or more tags. Think things like `dos.retro`, `pc.warez`, `games`, etc.
* Temporary web (http:// or https://) download links in additional to standard X/Y/Z protocol support
* Users can star rate files & search/filter by ratings
* Concept of user defined filters
## Other bells and whistles
* A given area can span one to many physical storage locations
* Upload processor can extract and use `FILE_ID.DIZ`/`DESC.SDI`, for standard descriptions as well as `README.TXT`, `*.NFO`, and so on for longer descriptions
* Upload processor also attempts release year estimation by scanning prementioned description file(s)
* Fast indexed Full Text Search (FTS)
* Duplicates validated by SHA-256

View File

@ -0,0 +1,100 @@
---
layout: page
title: TIC Support
---
ENiGMA½ supports TIC files. This is handled 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:
```hjson
{
scannerTossers: {
ftn_bso: {
nodes: {
"46:*": {
packetPassword: mypass
encoding: cp437
archiveType: zip
tic: {
password: TESTY-TEST
uploadBy: Agoranet TIC
allowReplace: true
}
}
}
}
}
}
```
You then need to configure the mapping between TIC areas you want to carry, and the file
base area and storage tag for them to be tossed to. Optionally you can also add hashtags to the tossed
files to assist users in searching for files:
````hjson
ticAreas: {
agn_node: {
areaTag: msgNetworks
storageTag: msg_network
hashTags: agoranet,nodelist
}
}
````
Multiple TIC areas can be mapped to a single file base area.
## Example Configuration
An example configuration linking filebase areas, FTN BSO node configuration and TIC area configuration.
````hjson
fileBase: {
areaStoragePrefix: /home/bbs/file_areas/
storageTags: {
msg_network: "msg_network"
}
areas: {
msgNetworks: {
name: Message Networks
desc: Message networks news & info
storageTags: [
"msg_network"
]
}
}
}
scannerTossers: {
ftn_bso: {
nodes: {
"46:*": {
packetPassword: mypass
encoding: cp437
archiveType: zip
tic: {
password: TESTY-TEST
uploadBy: Agoranet TIC
allowReplace: true
}
}
}
}
}
ticAreas: {
agn_node: {
areaTag: msgNetworks
storageTag: msg_network
hashTags: agoranet,nodelist
}
agn_info: {
areaTag: msgNetworks
storageTag: msg_network
hashTags: agoranet,infopack
}
}
````

8
docs/filebase/uploads.md Normal file
View File

@ -0,0 +1,8 @@
---
layout: page
title: Uploads
---
Note that `storageTags` may contain *1:n* storage tag references.
**Uploads in a particular area are stored in the first storage tag defined in an area.**

View File

@ -0,0 +1,11 @@
---
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:
`https://xibalba.l33t.codes:44512/f/h7JK`
See [Web Server](web_server.md) for more information.

View File

@ -1,129 +1,27 @@
# Introduction
ENiGMA½ is a modern from scratch BBS package written in Node.js.
---
layout: default
title: Home
---
![ENiGMA½ BBS](images/enigma-bbs.png "ENiGMA½ BBS")
# Quickstart
Unless you have a compelling reason to do otherwise, please use **The Easy Way** below.
## The Easy Way
Under most Linux/UNIX like environments (Linux, BSD, OS X, ...) new users can simply execute the `install.sh` script to get everything up and running. Simply cut + paste the following into your terminal:
```
curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash
```
For other environments such as Windows, see **The Manual Way** below.
## The Manual Way (aka Advanced)
For Windows environments or if you simply like to do things manually, read on...
### Prerequisites
* [Node.js](https://nodejs.org/) version **v6.x or higher**
* :information_source: It is **highly** suggested to use [nvm](https://github.com/creationix/nvm) to manage your Node/io.js installs
* [Python](https://www.python.org/downloads/) 2.7.x
* 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 OK) for Windows users. Note that you **should only need the Visual C++ component**.
ENiGMA½ is a modern BBS software with a nostalgic flair!
### New to Node
If you're new to Node.js and/or do not care about Node itself and just want to get ENiGMA½ running these steps should get you going on most \*nix type environments (Please consider the `install.sh` approach unless you really want to manually install!):
```bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
nvm install 6
nvm use 6
```
If the above 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/).
### Clone
```bash
git clone https://github.com/NuSkooler/enigma-bbs.git
```
### Install Node Modules
```bash
cd enigma-bbs
npm install
```
## Generate a SSH Private Key
To utilize the SSH server, a SSH Private Key will need generated. This step can be skipped if you do not wish to enable SSH access.
```bash
openssl genrsa -des3 -out ./config/ssh_private_key.pem 2048
```
### Create a Minimal Config
The main system configuration is handled via `/enigma-bbs-install-path/config/config.hjson`. This is a [HJSON](http://hjson.org/) file (compiliant JSON is also OK). See [Configuration](config.md) for more information.
#### Via oputil.js
`oputil.js` can be utilized to generate your **initial** configuration. **This is the recommended way for all new users**:
```bash
./oputil.js config new
```
(You will be asked a series of basic questions)
#### Example Starting Configuration
Below is an _example_ configuration. It is recommended that you at least **start with a generated configuration using oputil.js described above**.
```hjson
{
general: {
boardName: Super Awesome BBS
}
loginServers: {
ssh: {
privateKeyPass: YOUR_PK_PASS
enabled: true /* set to false to disable the SSH server */
}
telnet: {
port: 8888
}
}
messageConferences: {
local_general: {
name: Local
desc: Local Discussions
default: true
areas: {
local_music: {
name: Music Discussion
desc: Music, bands, etc.
default: true
}
}
}
}
}
```
## Launch!
```bash
./main.js
```
Read the Points of Interest below for more info. Also check-out all the other documentation files in the [docs](.) directory.
## Points of Interest
* **The first user you create via register/applying (user ID = 1) will be automatically be added to the `sysops` group, and thus becomes SysOp.** (aka root)
* Default port for Telnet is 8888 and for SSH 8889
* 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.
* All data is stored by default in Sqlite3 database files, within the `db` sub folder. Including user data, messages, system logs and file meta data.
* You may want to tail the logfile with Bunyan. See Monitoring Logs below.
## Monitoring Logs
Logs are produced by Bunyan which outputs each entry as a JSON object. To tail logs in a colorized and pretty pretty format, issue the following command:
tail -F /path/to/enigma-bbs/logs/enigma-bbs.log | /path/to/enigma-bbs/node_modules/bunyan/bin/bunyan
ENiGMA½ does not produce much to standard out. See below for tailing the log file to see what's going on.
# Advanced Installation
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. Additionally, it is suggested that you run as a specific more locked down user (e.g. 'enigma').
## 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
* 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
* Full [SAUCE](http://www.acid.org/info/sauce/sauce.htm) support
* 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!
* [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) inspirted 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!
* 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

@ -0,0 +1,21 @@
---
layout: page
title: Docker
---
**You'll need Docker installed before going any further. How to do so are out of scope of these docs, but you can find full instructions
for every operating system on the [Docker website](https://docs.docker.com/engine/installation/).**
## Quick Start
Download and run the ENiGMA½ BBS image:
docker run -d \
-p 8888:8888 \
davestephens\enigma-bbs
As no config has been supplied the container will use a basic one so that it starts successfully. Note that as no persistence
directory has been supplied, once the container stops any changes made will be lost!
## Customised Docker Setup
TBC using Docker Compose

View File

@ -0,0 +1,16 @@
---
layout: page
title: Install Script
---
Under most Linux/UNIX like environments (Linux, BSD, OS X, ...) new users can simply execute the
`install.sh` script to get everything up and running. Cut + paste the following into your terminal:
```
curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash
```
It is recommended you review the [installation script](https://github.com/NuSkooler/enigma-bbs/blob/master/misc/install.sh)
on GitHub before running it.
The script will install nvm, Node.js 6 and grab the latest ENiGMA BBS from GitHub. It will also guide you
through creating a basic configuration file, and recommend some packages to install.

View File

@ -0,0 +1,13 @@
---
layout: page
title: Installation Methods
---
There are multiple ways of installing ENiGMA BBS, depending on your level of experience and desire to do
things manually versus have it automated for you.
| Method | Operating System Compatibility | Notes |
|----------------------------------------|------------------------------------------------|---------------------------------------------------------------------------------------------|
| [Installation Script](install-script) | Linux, BSD, OSX | Quick and easy installation under most Linux/UNIX like environments (Linux, BSD, OS X, ...) |
| [Docker Images](docker) | Linux, BSD, OSX, Windows | Easy upgrades, compatible with all operating systems, no dependencies to install |
| [Manual Installation](manual) | Linux, Windows (probably others but untested! | If you like doing things manually, or are running Windows |

View File

@ -0,0 +1,74 @@
---
layout: page
title: Manual Installation
---
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 **v6.x or higher**
* :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
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
If you're new to Node.js and/or do not care about Node itself and just want to get ENiGMA½ running
these steps should get you going on most \*nix type environments:
```bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
nvm install 6
nvm use 6
```
If the above 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/).
## ENiGMA BBS
```bash
git clone https://github.com/NuSkooler/enigma-bbs.git
```
## Install Node Packages
```bash
cd enigma-bbs
npm install
```
## Other Recommended Packages
ENiGMA BBS makes use of a few packages for unarchiving and modem 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 system path.
| Package | Description | Ubuntu Package | CentOS Package Name | Windows Package |
|------------|-----------------------------------|--------------------------------------------|---------------------------------------------------|------------------------------------------------------------------|
| arj | Unpacking arj archives | `arj` | n/a, binaries [here](http://arj.sourceforge.net/) | [ARJ](http://arj.sourceforge.net/) |
| 7zip | Unpacking zip, rar, lha archives | `p7zip-full` | `p7zip-full` | [7-zip](http://www.7-zip.org/) |
| lrzsz | sz/rz: X/Y/Z modem support | `lrzsz` | `lrzsz` | Unknown |
| sexyz | SexyZ modem support | [sexyz](https://l33t.codes/outgoing/sexyz) | [sexyz](https://l33t.codes/outgoing/sexyz) | Available with [Synchronet](http://wiki.synchro.net/install:win) |
- exiftool & other external tools
## 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:
```bash
./oputil.js config new
```
Follow the prompts!

View File

@ -0,0 +1,6 @@
---
layout: page
title: Network Setup
---
:zap: This page is to describe general information on how to set your router to forward traffic to ENiGMA. It
needs fleshing out, please submit a PR if you'd like to help!

View File

@ -1,21 +1,15 @@
# Raspberry Pi
---
layout: page
title: OS & Hardware Specific Information
---
## Raspberry Pi
ENiGMA½ can run under your Linux / RPi installation! The following instructions should help get you started.
## Tested RPi Models
### Model A
Works, but fairly slow when browsing message areas (Node itself is not the fastest on this device). May work better overlocked, etc.
### v2 Model B
Works well with Raspbian!
Keep in mind, compiling the dependencies with `npm install` will take some time and appear to hang. Just be patient.
## Example Configuration: RPi Model A + Raspbian Stretch Lite
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.
### Basic Instructions
1. Download [Raspbian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/). Follow the instructions
on the [Raspbian site](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) regarding how
to get it written to an SD card.
@ -29,6 +23,10 @@ to get it written to an SD card.
4. Install required packages: `sudo apt install lrzsz p7zip-full`
5. Follow the [Quickstart](docs/index.md) instructions to install ENiGMA½.
5. Follow the [installation instructions](/installation) to install ENiGMA½.
6. Profit!
## Windows
Needs more info, please submit a PR!

View File

@ -0,0 +1,12 @@
---
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.
[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.
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

@ -0,0 +1,44 @@
---
layout: page
title: Testing Your Installation
---
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._
```bash
./main.js
```
If everything went OK:
```bash
ENiGMA½ Copyright (c) 2014-2018 Bryan Ashby
_____________________ _____ ____________________ __________\_ /
\__ ____/\_ ____ \ /____/ / _____ __ \ / ______/ // /___jp!
// __|___// | \// |// | \// | | \// \ /___ /_____
/____ _____| __________ ___|__| ____| \ / _____ \
---- \______\ -- |______\ ------ /______/ ---- |______\ - |______\ /__/ // ___/
/__ _\
<*> ENiGMA½ // HTTPS://GITHUB.COM/NUSKOOLER/ENIGMA-BBS <*> /__/
-------------------------------------------------------------------------------
System started!
```
Grab your favourite telnet client, connect to localhost:8888 and test out your installation.
## 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
[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.
## Telnet Software
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)

View File

@ -1,113 +0,0 @@
# MCI Codes
## Introduction
ENiGMA½ supports a variety of MCI codes. Some **predefined** codes produce information about the current user, system, or other statistics while others are used to instanciate a **View**. MCI codes are two characters in length and are prefixed with a percent (%) symbol. Some MCI codes have additional options that may be set directly from the code itself while others -- and more advanced options -- are controlled via the current theme. Standard (non-focus) and focus colors are set by placing duplicate codes back to back in art files.
## Views
A **View** is a control placed on a **form** that can display variable data or collect input. One example of a View is a Vertical Menu (`%VM`): Oldschool BBSers may recognize this as a lightbar menu.
### Available Views
* Text Label (`TL`): Displays text
* Edit Text (`ET`): Collect user input
* Masked Edit Text (`ME`): Collect user input using a *mask*
* Multi Line Text Edit (`MT`): Multi line edit control
* Button (`BT`): A button
* Vertical Menu (`VM`): A vertical menu aka a vertical lightbar
* Horizontal Menu (`HM`): A horizontal menu aka a horizontal lightbar
* Spinner Menu (`SM`): A spinner input control
* Toggle Menu (`TM`): A toggle menu commonly used for Yes/No style input
* Key Entry (`KE`): A *single* key input control
(Peek at `core/mci_view_factory.js` to see additional information on these)
## Predefined
There are many predefined MCI codes that can be used anywhere on the system (placed in any art file). More are added all the time so also check out `core/predefined_mci.js` for a full listing. Many codes attempt to pay homage to Oblivion/2, iNiQUiTY, etc.
* `BN`: Board Name
* `VL`: Version *label*, e.g. "ENiGMA½ v0.0.3-alpha"
* `VN`: Version *number*, eg.. "0.0.3-alpha"
* `SN`: SysOp username
* `SR`: SysOp real name
* `SL`: SysOp location
* `SA`: SysOp affiliations
* `SS`: SysOp sex
* `SE`: SysOp email address
* `UN`: Current user's username
* `UI`: Current user's user ID
* `UG`: Current user's group membership(s)
* `UR`: Current user's real name
* `LO`: Current user's location
* `UA`: Current user's age
* `BD`: Current user's birthdate (using theme date format)
* `US`: Current user's sex
* `UE`: Current user's email address
* `UW`: Current user's web address
* `UF`: Current user's affiliations
* `UT`: Current user's *theme ID* (e.g. "luciano_blocktronics")
* `UC`: Current user's login/call count
* `ND`: Current user's connected node number
* `IP`: Current user's IP address
* `ST`: Current user's connected server name (e.g. "Telnet" or "SSH")
* `FN`: Current user's active file base filter name
* `DN`: Current user's number of downloads
* `DK`: Current user's download amount (formatted to appropriate bytes/megs/etc.)
* `UP`: Current user's number of uploads
* `UK`: Current user's upload amount (formatted to appropriate bytes/megs/etc.)
* `NR`: Current user's upload/download ratio
* `KR`: Current user's upload/download *bytes* ratio
* `MS`: Current user's account creation date (using theme date format)
* `PS`: Current user's post count
* `PC`: Current user's post/call ratio
* `MD`: Current user's status/viewing menu/activity
* `MA`: Current user's active message area name
* `MC`: Current user's active message conference name
* `ML`: Current user's active message area description
* `CM`: Current user's active message conference description
* `SH`: Current user's term height
* `SW`: Current user's term width
* `DT`: Current date (using theme date format)
* `CT`: Current time (using theme time format)
* `OS`: System OS (Linux, Windows, etc.)
* `OA`: System architecture (x86, x86_64, arm, etc.)
* `SC`: System CPU model
* `NV`: System underlying Node.js version
* `AN`: Current active node count
* `TC`: Total login/calls to system
* `RR`: Displays a random rumor
* `SD`: Total downloads, system wide
* `SO`: Total downloaded amount, system wide (formatted to appropriate bytes/megs/etc.)
* `SU`: Total uploads, system wide
* `SP`: Total uploaded amount, system wide (formatted to appropriate bytes/megs/etc.)
A special `XY` MCI code may also be utilized for placement identification when creating menus.
## Properties & Theming
Predefined MCI codes and other Views can have properties set via `menu.hjson` and further *themed* via `theme.hjson`.
### Common Properties
* `textStyle`: Sets the standard (non-focus) text style. See **Text Styles** below
* `focusTextStyle`: Sets focus text style. See **Text Styles** below.
* `itemSpacing`: Used to separate items in menus such as Vertical Menu and Horizontal Menu Views.
* `height`: Sets the height of views such as menus that may be > 1 character in height
* `width`: Sets the width of a view
* `focus`: If set to `true`, establishes initial focus
* `text`: (initial) text of a view
* `submit`: If set to `true` any `accept` action upon this view will submit the encompassing **form**
These are just a few of the properties set on various views. *Use the source Luke*, as well as taking a look at the default `menu.hjson` and `theme.hjson` files!
#### Text Styles
Standard style types available for `textStyle` and `focusTextStyle`:
* `normal`: Leaves text as-is. This is the default.
* `upper`: ENIGMA BULLETIN BOARD SOFTWARE
* `lower`: enigma bulletin board software
* `title`: Enigma Bulletin Board Software
* `first lower`: eNIGMA bULLETIN bOARD sOFTWARE
* `small vowels`: eNiGMa BuLLeTiN BoaRD SoFTWaRe
* `big vowels`: EniGMa bUllEtIn bOArd sOftwArE
* `small i`: ENiGMA BULLETiN BOARD SOFTWARE
* `mixed`: EnIGma BUlLEtIn BoaRd SOfTWarE (randomly assigned)
* `l33t`: 3n1gm4 bull371n b04rd 50f7w4r3

View File

@ -1,86 +0,0 @@
# Menu System
ENiGMA½'s menu system is highly flexible and moddable. The possibilities are almost endless!
This document and others will refer to `menu.hjson`. This should be seen as an alias to `yourboardname.hjson` (or whatever you reference in `config.hjson` using the `menuFile` property — see below). By modifying your `menu.hjson` you will be able to create a custom experience unique to your board.
The default `menu.hjson` file lives within the `config` directory. It is **highly recommended** to specify another file by setting the `menuFile` property in your `config.hjson` file:
```hjson
general: {
/* Can also specify a full path */
menuFile: yourboardname.hjson
}
```
You can start by copying the default `mods/menu.hjson` to `yourboardname.hjson`.
## The Basics
Like all configuration within ENiGMA½, menu configuration is done in [HJSON](https://hjson.org/) format.
Entries in `menu.hjson` are objects defining a menu. A menu in this sense is something the user can see or visit. Examples include but are not limited to:
* Classical Main, Messages, and File menus
* Art file display
* Module driven menus such as door launchers
Each entry in `menu.hjson` defines an object that represents a menu. These objects live within the `menus` parent object. Each object's *key* is a menu name you can reference within other menus in the system.
## Example
Let's look a couple basic menu entries:
```hjson
telnetConnected: {
art: CONNECT
next: matrix
options: { nextTimeout: 1500 }
}
```
The above entry `telnetConnected` is set as the Telnet server's first menu entry (set by `firstMenu` in the Telnet server's config).
An art pattern of `CONNECT` is set telling the system to look for `CONNECT<n>.*` where `<n>` represents a optional integer in art files to cause randomness, e.g. `CONNECT1.ANS`, `CONNECT2.ANS`, and so on. If desired, you can also be explicit by supplying a full filename with an extention such as `CONNECT.ANS`.
The entry `next` sets up the next menu, by name, in the stack (`matrix`) that we'll go to after `telnetConnected`.
Finally, an `options` object may contain various common options for menus. In this case, `nextTimeout` tells the system to proceed to the `next` entry automatically after 1500ms.
Now let's look at `matrix`, the `next` entry from `telnetConnected`:
```hjson
matrix: {
art: matrix
desc: Login Matrix
form: {
0: {
VM: {
mci: {
VM1: {
submit: true
focus: true
items: [ "login", "apply", "log off" ]
argName: matrixSubmit
}
}
submit: {
*: [
{
value: { matrixSubmit: 0 }
action: @menu:login
}
{
value: { matrixSubmit: 1 },
action: @menu:newUserApplication
}
{
value: { matrixSubmit: 2 },
action: @menu:logoff
}
]
}
}
}
}
}
```
In the above entry, you'll notice `form`. This defines a form(s) object. In this case, a single form by ID of `0`. The system is then told to use a block only when the resulting art provides a `VM` (*VerticalMenuView*) MCI entry. `VM1` is then setup to `submit` and start focused via `focus: true` as well as have some menu entries ("login", "apply", ...) defined. We provide an `argName` for this action as `matrixSubmit`.
The `submit` object tells the system to attempt to apply provided match entries from any view ID (`*`). Upon submit, the first match will be executed. For example, if the user selects "login", the first entry with a value of `{ matrixSubmit: 0 }` will match causing `action` of `@menu:login` to be executed (go to `login` menu).

View File

@ -0,0 +1,74 @@
---
layout: page
title: BSO Import / Export
---
The scanner/tosser module `ftn_bso` provides **B**inkley **S**tyle **O**utbound (BSO) import/toss and
scan/export of messages EchoMail and NetMail messages. Configuration is supplied in `config.hjson`
under `scannerTossers::ftn_bso`.
| Config Item | Required | Description |
|-------------------------|----------|---------------------------------------------------------------------------------|
| `defaultZone` | :+1: | Sets the default BSO outbound zone
| `defaultNetwork` | :-1: | Sets the default network name from `messageNetworks.ftn.networks`. **Required if more than one network is defined**.
| `paths` | :-1: | Override default paths set by the system. This section may contain `outbound`, `inbound`, and `secInbound`.
| `packetTargetByteSize` | :-1: | Overrides the system *target* packet (.pkt) size of 512000 bytes (512k)
| `bundleTargetByteSize` | :-1: | Overrides the system *target* ArcMail bundle size of 2048000 bytes (2M)
| `schedule` | :+1: | See Scheduling
| `nodes` | :+1: | See Nodes
## Scheduling
Schedules can be defined for importing and exporting via `import` and `export` under `schedule`.
Each entry is allowed a "free form" text and/or special indicators for immediate export or watch
file triggers.
* `@immediate`: A message will be immediately exported if this trigger is defined in a schedule. Only used for `export`.
* `@watch:/path/to/file`: This trigger watches the path specified for changes and will trigger an import or export when such events occur. Only used for `import`.
* Free form text can be things like `at 5:00 pm` or `every 2 hours`.
See [Later text parsing documentation](http://bunkat.github.io/later/parsers.html#text) for more information.
### Example Configuration
```hjson
{
scannerTossers: {
ftn_bso: {
schedule: {
import: every 1 hours or @watch:/path/to/watchfile.ext
export: every 1 hours or @immediate
}
}
}
}
```
## Nodes
The `nodes` section defines how to export messages for one or more uplinks.
A node entry starts with a FTN style address (up to 5D) **as a key** in `config.hjson`. This key may
contain wildcard(s) for net/zone/node/point/domain.
| Config Item | Required | Description |
|------------------|----------|---------------------------------------------------------------------------------|
| `packetType` | :-1: | `2`, `2.2`, or `2+`. Defaults to `2+` for modern mailer compatiability |
| `packetPassword` | :-1: | Password for the packet |
| `encoding` | :-1: | Encoding to use for message bodies; Defaults to `utf-8` |
| `archiveType` | :-1: | Specifies the archive type for ArcMail bundles. Must be a valid archiver name such as `zip` (See archiver configuration) |
**Example**:
```hjson
{
scannerTossers: {
ftn_bso: {
nodes: {
"46:*": {
packetType: 2+
packetPassword: mypass
encoding: cp437
archiveType: zip
}
}
}
}
}
```

View File

@ -0,0 +1,65 @@
---
layout: page
title: Configuring a Message Area
---
**Message Conferences** and **Areas** allow for grouping of message base topics.
## Message Conferences
Message Conferences are the top level container for 1:n Message Areas via the `messageConferences` section
in `config.hjson`. Common message conferences may include a local conference and one or more conferences
each dedicated to a particular message network such as FsxNet, AgoraNet, etc.
Each conference is represented by a entry under `messageConferences`. **The areas key is the conferences tag**.
| Config Item | Required | Description |
|-------------|----------|---------------------------------------------------------------------------------|
| `name` | :+1: | Friendly conference name |
| `desc` | :+1: | Friendly conference description |
| `sort` | :-1: | If supplied, provides a key used for sorting |
| `default` | :-1: | Specify `true` to make this the default conference (e.g. assigned to new users) |
| `areas` | :+1: | Container of 1:n areas described below |
### Example
```hjson
{
messageConferences: {
local: {
name: Local
desc: Local discussion
sort: 1
default: true
}
}
}
```
## Message Areas
Message Areas are topic specific containers for messages that live within a particular conference. #
**The area's key is its area tag**. For example, "General Discussion" may live under a Local conference
while an AgoraNet conference may contain "BBS Discussion".
| Config Item | Required | Description |
|-------------|----------|---------------------------------------------------------------------------------|
| `name` | :+1: | Friendly area name |
| `desc` | :+1: | Friendly area discription |
| `sort` | :-1: | If supplied, provides a key used for sorting |
| `default` | :-1: | Specify `true` to make this the default area (e.g. assigned to new users) |
### Example
```hjson
messageConferences: {
local: {
// ... see above ...
areas: {
enigma_dev: { // Area tag - required elsewhere!
name: ENiGMA 1/2 Development
desc: ENiGMA 1/2 discussion!
sort: 1
default: true
}
}
}
}
```

View File

@ -0,0 +1,67 @@
---
layout: page
title: Message Networks
---
Configuring message networks in ENiGMA½ requires three specific pieces of config - the network and your
assigned address on it, the message areas (echos) of the network you wish to map to ENiGMA½ message areas,
then the schedule and routes to send mail packets on the network.
## FTN Networks
FTN networks are configured under the `messageNetworks::ftn` section of `config.hjson`.
The `networks` section contains a sub section for each network you wish you join your board to.
Each entry's key name is referenced elsewhere in `config.hjson` for FTN oriented configurations.
### Example Configuration
```hjson
{
messageNetworks: {
ftn: {
networks: {
agoranet: {
localAddress: "46:3/102"
}
fsxnet: {
localAddress: "21:4/333"
}
}
}
}
}
```
## Message Areas
The `areas` section describes a mapping of local **area tags** configured in your `messageConferences` (see
[Configuring a Message Area][/messageareas/configuring-a-message-area]) to a message network (described
above), a FTN specific area tag, and remote uplink address(s).
This section can be thought of similar to the *AREAS.BBS* file used by other BBS packages.
When ENiGMA½ imports messages, they will be placed in the local area that matches key under `areas`.
| Config Item | Required | Description |
|-------------|----------|----------------------------------------------------------|
| `network` | :+1: | Associated network from the `networks` section above |
| `tag` | :+1: | FTN area tag |
| `uplinks` | :+1: | An array of FTN address uplink(s) for this network |
### Example Configuration
```hjson
{
messageNetworks: {
ftn: {
areas: {
agoranet_bbs: { // tag found within messageConferences
network: agoranet
tag: AGN_BBS
uplinks: "46:1/100"
}
}
}
}
}
```

View File

@ -0,0 +1,38 @@
---
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.
## 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.
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:
````hjson
scannerTossers: {
/* other scannerTosser config removed for clarity */
ftn_bso: {
netMail: {
routes: {
"21:*" : {
address: "21:1/100"
network: fsxnet
}
"46:*" : {
address: "46:1/100"
network: agoranet
}
}
}
}
}
````
The `network` tag must match the networks defined in `messageNetworks::ftn::networks` within `config.hjson`.

View File

@ -1,15 +0,0 @@
# Modding
## General Configuraiton
See [Configuration](config.md)
## Menus
See [Menu System](menu_system.md)
## Theming
Take a look at how the default `luciano_blocktronics` theme found under `art/themes` works!
TODO document me!
## Add-On Modules
See [Mods](mods.md)

View File

@ -0,0 +1,61 @@
---
layout: page
title: Door Servers
---
## The bbs_link Module
Native support for [BBSLink](http://www.bbslink.net/) doors is provided via the `bbs_link` module.
Configuration for a BBSLink door is straight forward. Take a look at the following example for launching Tradewars 2002:
```hjson
doorTradeWars2002BBSLink: {
desc: Playing TW 2002 (BBSLink)
module: bbs_link
config: {
sysCode: XXXXXXXX
authCode: XXXXXXXX
schemeCode: XXXXXXXX
door: tw
}
}
```
Fill in your credentials in `sysCode`, `authCode`, and `schemeCode` and that's it!
## The door_party Module
The module `door_party` provides native support for [DoorParty!](http://www.throwbackbbs.com/) Configuration is quite easy:
```hjson
doorParty: {
desc: Using DoorParty!
module: door_party
config: {
username: XXXXXXXX
password: XXXXXXXX
bbsTag: XX
}
}
```
Fill in `username`, `password`, and `bbsTag` with credentials provided to you and you should be in business!
## The CombatNet Module
The `combatnet` module provides native support for [CombatNet](http://combatnet.us/). Add the following to your menu config:
````hjson
combatNet: {
desc: Using CombatNet
module: combatnet
config: {
bbsTag: CBNxxx
password: XXXXXXXXX
}
}
````
Update `bbsTag` (in the format CBNxxx) and `password` with the details provided when you register, then
you should be ready to rock!
## The Exodus Module
TBC

View File

@ -0,0 +1,11 @@
---
layout: page
title: Existing Mods
---
| Name | Author | Description |
|-----------------------------|-------------|-------------|
| Married Bob Fetch Event | NuSkooler | An event for fetching the latest Married Bob ANSI's for display on you board. ACiDic release [ACD-MB4E.ZIP](https://l33t.codes/outgoing/ACD/ACD-MB4E.ZIP). Can also be [found on GitHub](https://github.com/NuSkooler/enigma-bbs-married_bob_evt) |
| Latest Files Announcement | NuSkooler | An event for posting the latest file arrivals of your board to message areas such as FTN style networks. ACiDic release [ACD-LFA1.ZIP](https://l33t.codes/outgoing/ACD/ACD-LFA1.ZIP). Also [found on GitHub](https://github.com/NuSkooler/enigma-bbs-latest_files_announce_evt) |
| Message Post Event | NuSkooler | An event for posting messages/ads to networks. ACiDic release [ACD-MP4E.ZIP](https://l33t.codes/outgoing/ACD/ACD-MP4E.ZIP) |
See also [ACiDic BBS Mods by NuSkooler](https://l33t.codes/acidic-mods-by-myself/)

View File

@ -1,8 +1,7 @@
# Doors
ENiGMA½ supports a variety of methods for interacting with doors — not limited to:
* `abracadabra` module: Standard in/out (stdio) capture or temporary socket server that can be used with [DOSEMU](http://www.dosemu.org/), [DOSBox](http://www.dosbox.com/), [QEMU](http://wiki.qemu.org/Main_Page), etc.
* `bbs_link` module for interaction with [BBSLink](http://www.bbslink.net/)
---
layout: page
title: Local Doors
---
## The abracadabra Module
The `abracadabra` module provides a generic and flexible solution for many door types. Through this module you can execute native processes & scripts directly, and process I/O through stdio or a temporary TCP server.
@ -133,7 +132,7 @@ Note the `qemu-system-i386` line. We're telling QEMU to launch and use localtime
For doors that do not *require* a FOSSIL driver, it is recommended to not load or use one unless you are having issues.
#### Step 4: Create a menu entry
#### Step 3: Create a menu entry
Finally we can create a `menu.hjson` entry using the `abracadabra` module:
```hjson
doorLORD: {
@ -155,70 +154,15 @@ doorLORD: {
}
```
## The bbs_link Module
Native support for [BBSLink](http://www.bbslink.net/) doors is provided via the `bbs_link` module.
Configuration for a BBSLink door is straight forward. Take a look at the following example for launching Tradewars 2002:
```hjson
doorTradeWars2002BBSLink: {
desc: Playing TW 2002 (BBSLink)
module: bbs_link
config: {
sysCode: XXXXXXXX
authCode: XXXXXXXX
schemeCode: XXXXXXXX
door: tw
}
}
```
Fill in your credentials in `sysCode`, `authCode`, and `schemeCode` and that's it!
## The door_party Module
The module `door_party` provides native support for [DoorParty!](http://www.throwbackbbs.com/) Configuration is quite easy:
```hjson
doorParty: {
desc: Using DoorParty!
module: door_party
config: {
username: XXXXXXXX
password: XXXXXXXX
bbsTag: XX
}
}
```
Fill in `username`, `password`, and `bbsTag` with credentials provided to you and you should be in business!
## The CombatNet Module
The `combatnet` module provides native support for [CombatNet](http://combatnet.us/). Add the following to your menu config:
````hjson
combatNet: {
desc: Using CombatNet
module: combatnet
config: {
bbsTag: CBNxxx
password: XXXXXXXXX
}
}
````
Update `bbsTag` (in the format CBNxxx) and `password` with the details provided when you register, then
you should be ready to rock!
# Resources
## Resources
### DOSBox
* Custom DOSBox builds http://home.arcor.de/h-a-l-9000/
## Door Downloads & Support Sites
### General
### Door Downloads & Support Sites
#### General
* http://bbsfiles.com/
* http://bbstorrents.bbses.info/
### L.O.R.D.
#### L.O.R.D.
* http://lord.lordlegacy.com/

View File

@ -1,9 +0,0 @@
# Mods
Custom mods should be added to `/enigma-install-path/mods`.
## Existing Mods
* **Married Bob Fetch Event**: An event for fetching the latest Married Bob ANSI's for display on you board. ACiDic release [ACD-MB4E.ZIP](https://l33t.codes/outgoing/ACD/ACD-MB4E.ZIP). Can also be [found on GitHub](https://github.com/NuSkooler/enigma-bbs-married_bob_evt)
* **Latest Files Announcement**: An event for posting the latest file arrivals of your board to message areas such as FTN style networks. ACiDic release [ACD-LFA1.ZIP](https://l33t.codes/outgoing/ACD/ACD-LFA1.ZIP) Also [found on GitHub](https://github.com/NuSkooler/enigma-bbs-latest_files_announce_evt)
* **Message Post Event**: An event for posting messages/ads to networks. ACiDic release [ACD-MP4E.ZIP](https://l33t.codes/outgoing/ACD/ACD-MP4E.ZIP)
See also [ACiDic BBS Mods by Myself](https://l33t.codes/acidic-mods-by-myself/)

View File

@ -1,57 +0,0 @@
# Message Conferences & Areas
**Message Conferences** and **Areas** allow for grouping of message base topics.
## Message Conferences
Message Conferences are the top level container for 1:n Message Areas via the `messageConferences` section in `config.hjson`. Common message conferences may include a local conference and one or more conferences each dedicated to a particular message network such as FidoNet, AgoraNet, etc.
Each conference is represented by a entry under `messageConferences`. **The areas key is the conferences tag**.
**Members**:
* `name` (required): Friendly conference name
* `desc` (required): Friendly conference description
* `sort` (optional): If supplied, provides a key used for sorting
* `default` (optional): Specify `true` to make this the default conference (e.g. assigned to new users)
* `areas`: Container of 1:n areas described below
**Example**:
```hjson
{
messageConferences: {
local: {
name: Local
desc: Local discussion
sort: 1
default: true
}
}
}
```
## Message Areas
Message Areas are topic specific containers for messages that live within a particular conference. **The areas key is it's areas tag**. For example, "General Discussion" may live under a Local conference while an AgoraNet conference may contain "BBS Discussion".
**Members**:
* `name` (required): Friendly area name
* `desc` (required): Friendly area discription
* `sort` (optional): If supplied, provides a key used for sorting
* `default` (optional): Specify `true` to make this the default area (e.g. assigned to new users)
**Example**:
```hjson
messageConferences: {
local: {
// ... see above ...
areas: {
local_enigma_dev: {
name: ENiGMA 1/2 Development
desc: Discussion related to features and development of ENiGMA 1/2!
sort: 1
default: true
}
}
}
}
```
## Message Networks
ENiGMA½ has the ability to network with other systems via [Message Networks](msg_networks.md). Message **area tags** (described above) are utilized to map foreign areas with locally defined areas.

View File

@ -1,196 +0,0 @@
# Message Networks
Message networks are configured in `messageNetworks` section of `config.hjson`. Each network type has it's own sub section such as `ftn` for FidoNet Technology Network (FTN) style networks. Message Networks tie directly with [Message Areas](msg_conf_area.md) that are also defined in `config.hjson`.
**Members**:
* `ftn`: Configure FTN networks (described below)
* `originLine` (optional): Overrwrite the default origin line for networks that support it. For example: `originLine: Xibalba - xibalba.l33t.codes:44510`
## FidoNet Technology Network (FTN)
FTN networks are configured under the `messageNetworks.ftn` section of `config.hjson`.
### Networks
The `networks` section contains a sub section for network(s) you wish you join your board with. Each entry's key name can be referenced elsewhere in `config.hjson` for FTN oriented configurations.
**Members**:
* `localAddress` (required): FTN address of **your local system**
**Example**:
```hjson
{
messageNetworks: {
ftn: {
networks: {
agoranet: {
localAddress: "46:3/102"
}
}
}
}
}
```
### Areas
The `areas` section describes a mapping of local **area tags** found in your `messageConferences` to a message network (from `networks` described previously), a FTN specific area tag, and remote uplink address(s). This section can be thought of similar to the *AREAS.BBS* file used by other BBS packages (In fact you can import AREAS.BBS using `oputil.js`!)
When importing, messages will be placed in the local area that matches key under `areas`.
**Members**:
* `network` (required): Associated network from the `networks` section
* `tag` (required): FTN area tag
* `uplinks`: An array of FTN address uplink(s) for this network
**Example**:
```hjson
{
messageNetworks: {
ftn: {
areas: {
agoranet_bbs: { /* found within messageConferences */
network: agoranet
tag: AGN_BBS
uplinks: "46:1/100"
}
}
}
}
}
```
### BSO Import / Export
The scanner/tosser module `ftn_bso` provides **B**inkley **S**tyle **O**utbound (BSO) import/toss & scan/export of messages EchoMail and NetMail messages. Configuration is supplied in `config.hjson` under `scannerTossers.ftn_bso`.
**Members**:
* `defaultZone` (required): Sets the default BSO outbound zone
* `defaultNetwork` (optional): Sets the default network name from `messageNetworks.ftn.networks`. **Required if more than one network is defined**.
* `paths` (optional): Override default paths set by the system. This section may contain `outbound`, `inbound`, and `secInbound`.
* `packetTargetByteSize` (optional): Overrides the system *target* packet (.pkt) size of 512000 bytes (512k)
* `bundleTargetByteSize` (optional): Overrides the system *target* ArcMail bundle size of 2048000 bytes (2M)
* `schedule` (required): See Scheduling
* `nodes` (required): See Nodes
#### Nodes
The `nodes` section defines how to export messages for one or more uplinks.
A node entry starts with a FTN style address (up to 5D) **as a key** in `config.hjson`. This key may contain wildcard(s) for net/zone/node/point/domain.
**Members**:
* `packetType` (optional): `2`, `2.2`, or `2+`. Defaults to `2+` for modern mailer compatiability
* `packetPassword` (optional): Password for the packet
* `encoding` (optional): Encoding to use for message bodies; Defaults to `utf-8`
* `archiveType` (optional): Specifies the archive type for ArcMail bundles. Must be a valid archiver name such as `zip` (See archiver configuration)
**Example**:
```hjson
{
scannerTossers: {
ftn_bso: {
nodes: {
"46:*": {
packetType: 2+
packetPassword: mypass
encoding: cp437
archiveType: zip
}
}
}
}
}
```
#### TIC Support
ENiGMA½ supports TIC files. This is handled by mapping TIC areas to local file areas.
Under a given node (like the one configured above), TIC configuration may be supplied:
```hjson
{
scannerTossers: {
ftn_bso: {
nodes: {
"46:*": {
packetType: 2+
packetPassword: mypass
encoding: cp437
archiveType: zip
tic: {
password: TESTY-TEST
uploadBy: Agoranet TIC
allowReplace: true
}
}
}
}
}
}
```
You then need to configure the mapping between TIC areas you want to carry, and the file
base area for them to be tossed to. Start by creating a storage tag and file base, if you haven't
already:
````hjson
fileBase: {
areaStoragePrefix: /home/bbs/file_areas/
storageTags: {
msg_network: "msg_network"
}
areas: {
msgNetworks: {
name: Message Networks
desc: Message networks news & info
storageTags: [
"msg_network"
]
}
}
}
````
and then create the mapping between the TIC area and the file area created:
````hjson
ticAreas: {
agn_node: {
areaTag: msgNetworks
hashTags: agoranet,nodelist
storageTag: msg_network
}
agn_info: {
areaTag: msgNetworks
hashTags: agoranet,infopack
storageTag: msg_network
}
}
````
Multiple TIC areas can be mapped to a single file base area.
#### Scheduling
Schedules can be defined for importing and exporting via `import` and `export` under `schedule`. Each entry is allowed a "free form" text and/or special indicators for immediate export or watch file triggers.
* `@immediate`: A message will be immediately exported if this trigger is defined in a schedule. Only used for `export`.
* `@watch:/path/to/file`: This trigger watches the path specified for changes and will trigger an import or export when such events occur. Only used for `import`.
* Free form text can be things like `at 5:00 pm` or `every 2 hours`.
See [Later text parsing documentation](http://bunkat.github.io/later/parsers.html#text) for more information.
**Example**:
```hjson
{
scannerTossers: {
ftn_bso: {
schedule: {
import: every 1 hours or @watch:/path/to/watchfile.ext
export: every 1 hours or @immediate
}
}
}
}
```
## More Information
* [ENiGMA 1/2 + Binkd on CentOS 7](https://www.l33t.codes/enigma-12-binkd-on-centos-7/)

17
docs/oputil/index.md Normal file
View File

@ -0,0 +1,17 @@
---
layout: page
title: oputil
---
oputil is the ENiGMA½ command line utility for maintaining users, file areas and message areas, as well as
generating your initial ENiGMA½ config.
## File areas
The `oputil.js` +op utilty `fb` command has tools for managing file bases. For example, to import existing
files found within **all** storage locations tied to an area and set tags `tag1` and `tag2` to each import:
```bash
oputil.js fb scan some_area --tags tag1,tag2
```
See `oputil.js fb --help` for additional information.

36
docs/servers/ssh.md Normal file
View File

@ -0,0 +1,36 @@
---
layout: page
title: SSH Server
---
## Generate a SSH Private Key
To utilize the SSH server, an SSH Private Key will need generated. From the ENiGMA installation directory:
```bash
openssl genrsa -des3 -out ./config/ssh_private_key.pem 2048
```
You then need to enable the SSH server in your `config.hjson`:
```hjson
{
loginServers: {
ssh: {
enabled: true
port: 8889
privateKeyPass: YOUR_PK_PASS
}
}
}
```
### SSH Server Options
| Option | Description
|---------------------|--------------------------------------------------------------------------------------|
| `privateKeyPem` | Path to private key file
| `privateKeyPass` | Password to private key file
| `firstMenu` | First menu an SSH connected user is presented with
| `firstMenuNewUser` | Menu presented to user when logging in with `users::newUserNames` in your config.hjson (defaults to `new` and `apply`)
| `enabled` | Enable/disable SSH server
| `port` | Configure a custom port for the SSH server

4
docs/servers/telnet.md Normal file
View File

@ -0,0 +1,4 @@
---
layout: page
title: Telnet Server
---

View File

@ -1,6 +1,10 @@
# Web Server
---
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, 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!
[File Bases](file_base.md) registers routes for file downloads, 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
@ -40,6 +44,9 @@ contentServers: {
}
```
If no certificate paths are supplied, ENiGMA½ will assume the defaults of `/config/https_cert.pem` and
`/config/https_cert_key.pem` accordingly.
### Static Routes
Static files live relative to the `contentServers::web::staticRoot` path which defaults to `enigma-bbs/www`.

View File

@ -1,3 +1,7 @@
---
layout: page
title: Web Socket / Web Interface Server
---
# VTX Web Client
ENiGMA supports the VTX websocket client for connecting to your BBS from a web page. Example usage can be found at
[Xibalba](https://l33t.codes/vtx/xibalba.html) and [fORCE9](https://bbs.force9.org/vtx/force9.html).
@ -82,6 +86,6 @@ webserver, and unpack it to a temporary directory.
otherwise.
9. If you navigate to http://your-hostname.here/vtx.html, you should see a splash screen like the following:
![VTXClient](images/vtxclient.png "VTXClient")
![VTXClient](../images/vtxclient.png "VTXClient")

View File

@ -0,0 +1,15 @@
---
layout: page
title: Monitoring Logs
---
ENiGMA½ does not produce much to stdout. Logs are produced by Bunyan which outputs each entry as a
JSON object.
Start by installing bunyan and making it available on your path:
npm install bunyan -g
To tail logs in a colorized and pretty format, issue the following command:
tail -F /path/to/enigma-bbs/logs/enigma-bbs.log | bunyan