Merge branch 'master' of github.com:NuSkooler/enigma-bbs into 0.0.9-alpha
This commit is contained in:
commit
6d13c19f94
|
@ -6,3 +6,6 @@ logs/
|
||||||
db/
|
db/
|
||||||
dropfiles/
|
dropfiles/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
docs/_site/
|
||||||
|
docs/.sass-cache/
|
||||||
|
`
|
|
@ -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>
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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 %})
|
|
@ -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>
|
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<h1 class="page-title">{{ page.title }}</h1>
|
||||||
|
{{ content }}
|
||||||
|
</div>
|
|
@ -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>
|
|
@ -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;
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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!
|
|
|
@ -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.
|
|
@ -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 |
|
|
@ -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
|
||||||
|
}
|
||||||
|
```
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
@import 'jekyll-theme-hacker';
|
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 |
|
@ -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.
|
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
|
## Archivers
|
|
@ -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
|
## 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.
|
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)!
|
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
|
### A Sample Configuration
|
||||||
Below is a **sample** `config.hjson` illustrating various (but certainly not all!) elements that can be configured / tweaked.
|
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)
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
````
|
|
@ -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
|
|
@ -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.
|
||||||
|
|
|
@ -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).
|
|
@ -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.
|
||||||
|
|
|
@ -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.
|
|
|
@ -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]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -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" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
|
@ -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
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
````
|
|
@ -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.**
|
|
@ -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.
|
150
docs/index.md
150
docs/index.md
|
@ -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
|
ENiGMA½ is a modern BBS software with a nostalgic flair!
|
||||||
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**.
|
|
||||||
|
|
||||||
|
|
||||||
### New to Node
|
## Features Available Now
|
||||||
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!):
|
* 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"!)
|
||||||
```bash
|
* **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](docs/mods.md)
|
||||||
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
|
* [MCI support](docs/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles
|
||||||
nvm install 6
|
* Telnet, **SSH**, and both secure and non-secure [WebSocket](https://en.wikipedia.org/wiki/WebSocket) access built in! Additional servers are easy to implement
|
||||||
nvm use 6
|
* [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
|
||||||
If the above completed without errors, you should now have `nvm`, `node`, and `npm` installed and in your environment.
|
* Renegade style pipe color codes
|
||||||
|
* [SQLite](http://sqlite.org/) storage of users, message areas, and so on
|
||||||
For Windows nvm-like systems exist ([nvm-windows](https://github.com/coreybutler/nvm-windows), ...) or [just download the installer](https://nodejs.org/en/download/).
|
* 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
|
||||||
### Clone
|
* [Message networks](docs/msg_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export
|
||||||
```bash
|
* [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!
|
||||||
git clone https://github.com/NuSkooler/enigma-bbs.git
|
* 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
|
||||||
|
|
||||||
### 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').
|
|
||||||
|
|
|
@ -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
|
|
@ -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.
|
|
@ -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 |
|
||||||
|
|
|
@ -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!
|
|
@ -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!
|
|
@ -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.
|
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
|
||||||
## Tested RPi Models
|
complete.
|
||||||
### 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
|
|
||||||
|
|
||||||
### Basic Instructions
|
### Basic Instructions
|
||||||
|
|
||||||
|
|
||||||
1. Download [Raspbian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/). Follow the 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
|
on the [Raspbian site](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) regarding how
|
||||||
to get it written to an SD card.
|
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`
|
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!
|
6. Profit!
|
||||||
|
|
||||||
|
## Windows
|
||||||
|
|
||||||
|
Needs more info, please submit a PR!
|
|
@ -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!
|
|
@ -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)
|
113
docs/mci.md
113
docs/mci.md
|
@ -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
|
|
|
@ -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).
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
|
@ -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`.
|
|
@ -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)
|
|
|
@ -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
|
|
@ -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/)
|
|
@ -1,8 +1,7 @@
|
||||||
# Doors
|
---
|
||||||
ENiGMA½ supports a variety of methods for interacting with doors — not limited to:
|
layout: page
|
||||||
* `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.
|
title: Local Doors
|
||||||
* `bbs_link` module for interaction with [BBSLink](http://www.bbslink.net/)
|
---
|
||||||
|
|
||||||
## The abracadabra Module
|
## 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.
|
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.
|
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:
|
Finally we can create a `menu.hjson` entry using the `abracadabra` module:
|
||||||
```hjson
|
```hjson
|
||||||
doorLORD: {
|
doorLORD: {
|
||||||
|
@ -155,70 +154,15 @@ doorLORD: {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Resources
|
||||||
## 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
|
|
||||||
|
|
||||||
### DOSBox
|
### DOSBox
|
||||||
* Custom DOSBox builds http://home.arcor.de/h-a-l-9000/
|
* Custom DOSBox builds http://home.arcor.de/h-a-l-9000/
|
||||||
|
|
||||||
## Door Downloads & Support Sites
|
### Door Downloads & Support Sites
|
||||||
### General
|
#### General
|
||||||
* http://bbsfiles.com/
|
* http://bbsfiles.com/
|
||||||
* http://bbstorrents.bbses.info/
|
* http://bbstorrents.bbses.info/
|
||||||
|
|
||||||
### L.O.R.D.
|
#### L.O.R.D.
|
||||||
* http://lord.lordlegacy.com/
|
* http://lord.lordlegacy.com/
|
|
@ -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/)
|
|
|
@ -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.
|
|
|
@ -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/)
|
|
|
@ -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.
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: Telnet Server
|
||||||
|
---
|
|
@ -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
|
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
|
## Configuration
|
||||||
By default the web server is not enabled. To enable it, you will need to at a minimum configure two keys in
|
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 Routes
|
||||||
Static files live relative to the `contentServers::web::staticRoot` path which defaults to `enigma-bbs/www`.
|
Static files live relative to the `contentServers::web::staticRoot` path which defaults to `enigma-bbs/www`.
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: Web Socket / Web Interface Server
|
||||||
|
---
|
||||||
# VTX Web Client
|
# VTX Web Client
|
||||||
ENiGMA supports the VTX websocket client for connecting to your BBS from a web page. Example usage can be found at
|
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).
|
[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.
|
otherwise.
|
||||||
|
|
||||||
9. If you navigate to http://your-hostname.here/vtx.html, you should see a splash screen like the following:
|
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")
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue