commit
fe535977a5
|
@ -6,3 +6,6 @@ logs/
|
|||
db/
|
||||
dropfiles/
|
||||
node_modules/
|
||||
docs/_site/
|
||||
docs/.sass-cache/
|
||||
`
|
|
@ -150,7 +150,10 @@ exports.getModule = class BBSListModule extends MenuModule {
|
|||
self.database.run(
|
||||
`INSERT INTO bbs_list (bbs_name, sysop, telnet, www, location, software, submitter_user_id, notes)
|
||||
VALUES(?, ?, ?, ?, ?, ?, ?, ?);`,
|
||||
[ formData.value.name, formData.value.sysop, formData.value.telnet, formData.value.www, formData.value.location, formData.value.software, self.client.user.userId, formData.value.notes ],
|
||||
[
|
||||
formData.value.name, formData.value.sysop, formData.value.telnet, formData.value.www,
|
||||
formData.value.location, formData.value.software, self.client.user.userId, formData.value.notes
|
||||
],
|
||||
err => {
|
||||
if(err) {
|
||||
self.client.log.error( { err : err }, 'Error adding to BBS list');
|
||||
|
|
|
@ -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.
|
||||
|
||||
## 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
|
||||
The main system configuration file, `config.hjson` both overrides defaults and provides additional configuration such as message areas. The default path is `/enigma-bbs-install-path/config/config.hjson` though you can override the `config.hjson` location with the `--config` parameter when invoking `main.js`. Values found in `core/config.js` may be overridden by simply providing the object members you wish replace.
|
||||
|
||||
|
@ -31,12 +32,6 @@ general: {
|
|||
|
||||
While not everything that is available in your `config.hjson` file can be found defaulted in `core/config.js`, a lot is. [Poke around and see what you can find](https://github.com/NuSkooler/enigma-bbs/blob/master/core/config.js)!
|
||||
|
||||
### Specific Areas of Interest
|
||||
* [Message Conferences](msg_conf_area.md)
|
||||
* [Message Networks](msg_networks.md)
|
||||
* [File Base](file_base.md)
|
||||
* [File Archives & Archivers](archives.md)
|
||||
* [Web Server](web_server.md)
|
||||
|
||||
### A Sample Configuration
|
||||
Below is a **sample** `config.hjson` illustrating various (but certainly not all!) elements that can be configured / tweaked.
|
||||
|
@ -125,9 +120,3 @@ Below is a **sample** `config.hjson` illustrating various (but certainly not all
|
|||
}
|
||||
}
|
||||
```
|
||||
|
||||
## See Also
|
||||
* [Modding](modding.md)
|
||||
* [Doors](doors.md)
|
||||
* [MCI Codes](mci.md)
|
||||
* [Menu System docs](menu_system.md)
|
|
@ -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
|
||||
Unless you have a compelling reason to do otherwise, please use **The Easy Way** below.
|
||||
|
||||
## The Easy Way
|
||||
Under most Linux/UNIX like environments (Linux, BSD, OS X, ...) new users can simply execute the `install.sh` script to get everything up and running. Simply cut + paste the following into your terminal:
|
||||
|
||||
```
|
||||
curl -o- https://raw.githubusercontent.com/NuSkooler/enigma-bbs/master/misc/install.sh | bash
|
||||
```
|
||||
|
||||
For other environments such as Windows, see **The Manual Way** below.
|
||||
|
||||
## The Manual Way (aka Advanced)
|
||||
For Windows environments or if you simply like to do things manually, read on...
|
||||
|
||||
### Prerequisites
|
||||
* [Node.js](https://nodejs.org/) version **v6.x or higher**
|
||||
* :information_source: It is **highly** suggested to use [nvm](https://github.com/creationix/nvm) to manage your Node/io.js installs
|
||||
* [Python](https://www.python.org/downloads/) 2.7.x
|
||||
* A compiler such as Clang or GCC for Linux/UNIX systems or a recent copy of Visual Studio ([Visual Studio Express](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) editions OK) for Windows users. Note that you **should only need the Visual C++ component**.
|
||||
ENiGMA½ is a modern BBS software with a nostalgic flair!
|
||||
|
||||
|
||||
### New to Node
|
||||
If you're new to Node.js and/or do not care about Node itself and just want to get ENiGMA½ running these steps should get you going on most \*nix type environments (Please consider the `install.sh` approach unless you really want to manually install!):
|
||||
|
||||
```bash
|
||||
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
|
||||
nvm install 6
|
||||
nvm use 6
|
||||
```
|
||||
|
||||
If the above completed without errors, you should now have `nvm`, `node`, and `npm` installed and in your environment.
|
||||
|
||||
For Windows nvm-like systems exist ([nvm-windows](https://github.com/coreybutler/nvm-windows), ...) or [just download the installer](https://nodejs.org/en/download/).
|
||||
|
||||
|
||||
### Clone
|
||||
```bash
|
||||
git clone https://github.com/NuSkooler/enigma-bbs.git
|
||||
```
|
||||
|
||||
### Install Node Modules
|
||||
```bash
|
||||
cd enigma-bbs
|
||||
npm install
|
||||
```
|
||||
|
||||
## Generate a SSH Private Key
|
||||
To utilize the SSH server, a SSH Private Key will need generated. This step can be skipped if you do not wish to enable SSH access.
|
||||
```bash
|
||||
openssl genrsa -des3 -out ./config/ssh_private_key.pem 2048
|
||||
```
|
||||
|
||||
### Create a Minimal Config
|
||||
The main system configuration is handled via `/enigma-bbs-install-path/config/config.hjson`. This is a [HJSON](http://hjson.org/) file (compiliant JSON is also OK). See [Configuration](config.md) for more information.
|
||||
|
||||
#### Via oputil.js
|
||||
`oputil.js` can be utilized to generate your **initial** configuration. **This is the recommended way for all new users**:
|
||||
|
||||
```bash
|
||||
./oputil.js config new
|
||||
```
|
||||
|
||||
(You will be asked a series of basic questions)
|
||||
|
||||
#### Example Starting Configuration
|
||||
Below is an _example_ configuration. It is recommended that you at least **start with a generated configuration using oputil.js described above**.
|
||||
|
||||
```hjson
|
||||
{
|
||||
general: {
|
||||
boardName: Super Awesome BBS
|
||||
}
|
||||
|
||||
loginServers: {
|
||||
ssh: {
|
||||
privateKeyPass: YOUR_PK_PASS
|
||||
enabled: true /* set to false to disable the SSH server */
|
||||
}
|
||||
telnet: {
|
||||
port: 8888
|
||||
}
|
||||
}
|
||||
|
||||
messageConferences: {
|
||||
local_general: {
|
||||
name: Local
|
||||
desc: Local Discussions
|
||||
default: true
|
||||
areas: {
|
||||
local_music: {
|
||||
name: Music Discussion
|
||||
desc: Music, bands, etc.
|
||||
default: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Launch!
|
||||
```bash
|
||||
./main.js
|
||||
```
|
||||
|
||||
Read the Points of Interest below for more info. Also check-out all the other documentation files in the [docs](.) directory.
|
||||
|
||||
## Points of Interest
|
||||
* **The first user you create via register/applying (user ID = 1) will be automatically be added to the `sysops` group, and thus becomes SysOp.** (aka root)
|
||||
* Default port for Telnet is 8888 and for SSH 8889
|
||||
* Note that on *nix systems port such as telnet/23 are privileged (e.g. require root). See [this SO article](http://stackoverflow.com/questions/16573668/best-practices-when-running-node-js-with-port-80-ubuntu-linode) for some tips on using these ports on your system if desired.
|
||||
* All data is stored by default in Sqlite3 database files, within the `db` sub folder. Including user data, messages, system logs and file meta data.
|
||||
* You may want to tail the logfile with Bunyan. See Monitoring Logs below.
|
||||
|
||||
## Monitoring Logs
|
||||
Logs are produced by Bunyan which outputs each entry as a JSON object. To tail logs in a colorized and pretty pretty format, issue the following command:
|
||||
|
||||
tail -F /path/to/enigma-bbs/logs/enigma-bbs.log | /path/to/enigma-bbs/node_modules/bunyan/bin/bunyan
|
||||
|
||||
ENiGMA½ does not produce much to standard out. See below for tailing the log file to see what's going on.
|
||||
|
||||
# Advanced Installation
|
||||
If you've become convinced you would like a "production" BBS running ENiGMA½ a more advanced installation may be in order.
|
||||
|
||||
[PM2](https://github.com/Unitech/pm2) is an excellent choice for managing your running ENiGMA½ instances. Additionally, it is suggested that you run as a specific more locked down user (e.g. 'enigma').
|
||||
## Features Available Now
|
||||
* Multi platform: Anywhere [Node.js](https://nodejs.org/) runs likely works (known to work under Linux, FreeBSD, OpenBSD, OS X and Windows)
|
||||
* Unlimited multi node support (for all those BBS "callers"!)
|
||||
* **Highly** customizable via [HJSON](http://hjson.org/) based configuration, menus, and themes in addition to JavaScript based [mods](docs/mods.md)
|
||||
* [MCI support](docs/mci.md) for lightbars, toggles, input areas, and so on plus many other other bells and whistles
|
||||
* Telnet, **SSH**, and both secure and non-secure [WebSocket](https://en.wikipedia.org/wiki/WebSocket) access built in! Additional servers are easy to implement
|
||||
* [CP437](http://www.ascii-codes.com/) and UTF-8 output
|
||||
* [SyncTerm](http://syncterm.bbsdev.net/) style font and baud emulation support. Display PC/DOS and Amiga style artwork as it's intended! In general, ANSI-BBS / [cterm.txt](http://cvs.synchro.net/cgi-bin/viewcvs.cgi/*checkout*/src/conio/cterm.txt?content-type=text%2Fplain&revision=HEAD) / [bansi.txt](http://www.bbsdocumentary.com/library/PROGRAMS/GRAPHICS/ANSI/bansi.txt) are followed for expected BBS behavior
|
||||
* Full [SAUCE](http://www.acid.org/info/sauce/sauce.htm) support
|
||||
* Renegade style pipe color codes
|
||||
* [SQLite](http://sqlite.org/) storage of users, message areas, and so on
|
||||
* Strong [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2) backed password encryption
|
||||
* [Door support](docs/doors.md) including common dropfile formats for legacy DOS doors. Built in [BBSLink](http://bbslink.net/), [DoorParty](http://forums.throwbackbbs.com/), [Exodus](https://oddnetwork.org/exodus/) and [CombatNet](http://combatnet.us/) support!
|
||||
* [Bunyan](https://github.com/trentm/node-bunyan) logging
|
||||
* [Message networks](docs/msg_networks.md) with FidoNet Type Network (FTN) + BinkleyTerm Style Outbound (BSO) message import/export
|
||||
* [Gazelle](https://github.com/WhatCD/Gazelle) inspirted File Bases including fast fully indexed full text search (FTS), #tags, and HTTP(S) temporary download URLs using a built in [web server](docs/web_server.md). Legacy X/Y/Z modem also supported!
|
||||
* Upload processor supporting [FILE_ID.DIZ](https://en.wikipedia.org/wiki/FILE_ID.DIZ) and [NFO](https://en.wikipedia.org/wiki/.nfo) extraction, year estimation, and more!
|
||||
* ANSI support in the Full Screen Editor (FSE), file descriptions, and so on
|
||||
|
|
|
@ -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.
|
||||
|
||||
## Tested RPi Models
|
||||
### Model A
|
||||
Works, but fairly slow when browsing message areas (Node itself is not the fastest on this device). May work better overlocked, etc.
|
||||
|
||||
### v2 Model B
|
||||
Works well with Raspbian!
|
||||
|
||||
Keep in mind, compiling the dependencies with `npm install` will take some time and appear to hang. Just be patient.
|
||||
|
||||
## Example Configuration: RPi Model A + Raspbian Stretch Lite
|
||||
All Raspberry Pi models work great with ENiGMA½! Keep in mind compiling the dependencies with
|
||||
`npm install` will take some time and *may* appear to hang. It's still working - just be patient and let it
|
||||
complete.
|
||||
|
||||
### Basic Instructions
|
||||
|
||||
|
||||
1. Download [Raspbian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/). Follow the instructions
|
||||
on the [Raspbian site](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) regarding how
|
||||
to get it written to an SD card.
|
||||
|
@ -29,6 +23,10 @@ to get it written to an SD card.
|
|||
|
||||
4. Install required packages: `sudo apt install lrzsz p7zip-full`
|
||||
|
||||
5. Follow the [Quickstart](docs/index.md) instructions to install ENiGMA½.
|
||||
5. Follow the [installation instructions](/installation) to install ENiGMA½.
|
||||
|
||||
6. Profit!
|
||||
|
||||
## Windows
|
||||
|
||||
Needs more info, please submit a PR!
|
|
@ -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:
|
||||
* `abracadabra` module: Standard in/out (stdio) capture or temporary socket server that can be used with [DOSEMU](http://www.dosemu.org/), [DOSBox](http://www.dosbox.com/), [QEMU](http://wiki.qemu.org/Main_Page), etc.
|
||||
* `bbs_link` module for interaction with [BBSLink](http://www.bbslink.net/)
|
||||
|
||||
---
|
||||
layout: page
|
||||
title: Local Doors
|
||||
---
|
||||
## The abracadabra Module
|
||||
The `abracadabra` module provides a generic and flexible solution for many door types. Through this module you can execute native processes & scripts directly, and process I/O through stdio or a temporary TCP server.
|
||||
|
||||
|
@ -133,7 +132,7 @@ Note the `qemu-system-i386` line. We're telling QEMU to launch and use localtime
|
|||
|
||||
For doors that do not *require* a FOSSIL driver, it is recommended to not load or use one unless you are having issues.
|
||||
|
||||
#### Step 4: Create a menu entry
|
||||
#### Step 3: Create a menu entry
|
||||
Finally we can create a `menu.hjson` entry using the `abracadabra` module:
|
||||
```hjson
|
||||
doorLORD: {
|
||||
|
@ -155,70 +154,15 @@ doorLORD: {
|
|||
}
|
||||
```
|
||||
|
||||
|
||||
## The bbs_link Module
|
||||
Native support for [BBSLink](http://www.bbslink.net/) doors is provided via the `bbs_link` module.
|
||||
|
||||
Configuration for a BBSLink door is straight forward. Take a look at the following example for launching Tradewars 2002:
|
||||
|
||||
```hjson
|
||||
doorTradeWars2002BBSLink: {
|
||||
desc: Playing TW 2002 (BBSLink)
|
||||
module: bbs_link
|
||||
config: {
|
||||
sysCode: XXXXXXXX
|
||||
authCode: XXXXXXXX
|
||||
schemeCode: XXXXXXXX
|
||||
door: tw
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Fill in your credentials in `sysCode`, `authCode`, and `schemeCode` and that's it!
|
||||
|
||||
## The door_party Module
|
||||
The module `door_party` provides native support for [DoorParty!](http://www.throwbackbbs.com/) Configuration is quite easy:
|
||||
|
||||
```hjson
|
||||
doorParty: {
|
||||
desc: Using DoorParty!
|
||||
module: door_party
|
||||
config: {
|
||||
username: XXXXXXXX
|
||||
password: XXXXXXXX
|
||||
bbsTag: XX
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Fill in `username`, `password`, and `bbsTag` with credentials provided to you and you should be in business!
|
||||
|
||||
## The CombatNet Module
|
||||
The `combatnet` module provides native support for [CombatNet](http://combatnet.us/). Add the following to your menu config:
|
||||
|
||||
````hjson
|
||||
combatNet: {
|
||||
desc: Using CombatNet
|
||||
module: combatnet
|
||||
config: {
|
||||
bbsTag: CBNxxx
|
||||
password: XXXXXXXXX
|
||||
}
|
||||
}
|
||||
````
|
||||
Update `bbsTag` (in the format CBNxxx) and `password` with the details provided when you register, then
|
||||
you should be ready to rock!
|
||||
|
||||
# Resources
|
||||
## Resources
|
||||
|
||||
### DOSBox
|
||||
* Custom DOSBox builds http://home.arcor.de/h-a-l-9000/
|
||||
|
||||
## Door Downloads & Support Sites
|
||||
### General
|
||||
### Door Downloads & Support Sites
|
||||
#### General
|
||||
* http://bbsfiles.com/
|
||||
* http://bbstorrents.bbses.info/
|
||||
|
||||
### L.O.R.D.
|
||||
#### L.O.R.D.
|
||||
* http://lord.lordlegacy.com/
|
|
@ -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
|
||||
[File Bases](file_base.md) registers routes for file downloads, and static files can also be served for your BBS. Other features will likely come in the future or you can easily write your own!
|
||||
[File Bases](file_base.md) registers routes for file downloads, and static files can also be served
|
||||
for your BBS. Other features will likely come in the future or you can easily write your own!
|
||||
|
||||
## Configuration
|
||||
By default the web server is not enabled. To enable it, you will need to at a minimum configure two keys in
|
||||
|
@ -40,6 +44,9 @@ contentServers: {
|
|||
}
|
||||
```
|
||||
|
||||
If no certificate paths are supplied, ENiGMA½ will assume the defaults of `/config/https_cert.pem` and
|
||||
`/config/https_cert_key.pem` accordingly.
|
||||
|
||||
### Static Routes
|
||||
Static files live relative to the `contentServers::web::staticRoot` path which defaults to `enigma-bbs/www`.
|
||||
|
|
@ -1,3 +1,7 @@
|
|||
---
|
||||
layout: page
|
||||
title: Web Socket / Web Interface Server
|
||||
---
|
||||
# VTX Web Client
|
||||
ENiGMA supports the VTX websocket client for connecting to your BBS from a web page. Example usage can be found at
|
||||
[Xibalba](https://l33t.codes/vtx/xibalba.html) and [fORCE9](https://bbs.force9.org/vtx/force9.html).
|
||||
|
@ -82,6 +86,6 @@ webserver, and unpack it to a temporary directory.
|
|||
otherwise.
|
||||
|
||||
9. If you navigate to http://your-hostname.here/vtx.html, you should see a splash screen like the following:
|
||||
![VTXClient](images/vtxclient.png "VTXClient")
|
||||
![VTXClient](../images/vtxclient.png "VTXClient")
|
||||
|
||||
|
|
@ -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