Skip to content

kc1awv/RetiBBS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RetiBBS

Screenshot

An ALPHA bulletin board system (BBS) implementation for Reticulum networks.

RetiBBS allows users to communicate through message boards in a secure manner.

Features

  • User authentication and authorization with Reticulum
  • Multiple message boards support
  • User display names
  • Admin privileges for board management
  • Simple text-based command interface
  • Ephemeral chat room support

Reference Implementation

A reference RetiBBS server implementation is hosted by me, at Kaizen.

Its identity hash is: b40428672a09c6c100ca82c10e5d945f or you can wait for the server to announce itself. The server is connected to the Beleth RNS Hub, which in turn is connected to the Reticulum Testnet.

I will try to keep this reference implementation up to date, usually within a couple hours of any PR merges. This means that the reference server may be unavailable for a short time while the updates are applied.

Installation

  1. Clone this repository:
git clone https://github.com/kc1awv/RetiBBS.git
cd RetiBBS

It is strongly suggested to use this alpha software in its own Python virtual environment.

python -m venv .venv
source .venv/bin/activate
  1. Install Reticulum Network Stack, LXMF, Textual, and Flask:
pip install rns lxmf textual flask
  1. Install a WSGI server of your choice for the web server:
pip install gunicorn||uWSGI

Usage

Running the Server

cd server
python retibbs_server.py [OPTIONS]

Server options:

  • --reticulum-config: Path to alternative Reticulum config directory (optional)
  • --identity-file: Path to store/load server identity (default: server_identity.pem)
  • --config-file: Path to server config file (default: server_config.json)

WSGI Web Server:

If you wish to run the web server through a WSGI server, set the configuration options in the server config, and run the web server separately. For example, using gunicorn:

gunicorn --bind 0.0.0.0:5000 wsgi:retibbs_web

Running the Client

cd client
python retibbs_textual.py [OPTIONS]

Client options

  • --reticulum-config: Path to alternative Reticulum config directory (optional)
  • --identity-file: Path to store/load client identity (optional, default: {RNS.Reticulum.storagepath}/retibbs_client_identity)
  • --server: Hexadecimal hash of the RetiBBS server to connect to (optional)

Basic Commands

Once connected:

Main Menu:

  ?  | help                       - Show help text and available commands
  h  | hello                      - Check authorization status
  n  | name <name>                - Set your display name
  d  | destination <LXMF Address> - Set LXMF destination for board alerts
  td | testdestination            - Send a test LXMF message
  b  | boards                     - Switch to message boards area
  c  | chat                       - Switch to chat room area
  lo | logout                     - Log out from the system

### Admin Commands
  lu | listusers          - List users in DB
  a  | admin <user_hash>  - Grant admin rights to a user

Each area has its own set of commands. Use ? or help to get a list of commands for the area you are in.

Configuration

Server Configuration (server_config.json)

{
    "server_name": "changeme",
    "announce_interval": 300,
    "theme": "default",
    "enable_web_server": false,
    "use_wsgi": false
}

Server Themes

Included with the base code is a default theme in server/themes/default that can be copied to a new folder in order to create a new 'theme' for the BBS. Simply:

cd server/themes
cp -r default/ new_theme/
cd new_theme

And edit the text files within. Make sure to update the server_config.json file to point towards the new theme directory.

Rich Text support for colors and other styles is available from commit 26bc656 in the client.

Using Rich Text Markup in the theme files is probably the easiest way to utilize colors. For example:

[bold italic]Welcome to[/]
[bold red]
 _  __     _
| |/ /__ _(_)_______ _ __
| ' // _` | |_  / _ \ '_ \
| . \ (_| | |/ /  __/ | | |
|_|\_\__,_|_/___\___|_| |_| 改善
[/]
A Reference RetiBBS Server Instance
-----------------------------------

will produce this on the client:

Client with color

Clients not up to date with at least commit 26bc656 will show the markup. If you see the markup code where colors are expected, please pull the latest commit.

Web Interface

The RetiBBS Server has an optional read-only web server for viewing message boards, and the messages within. To enable the web server, you must at least set the configuration option enable_web_server to True, and optionally enable WSGI operation (more stable this way) with the use_wsgi configuration option set to True.

Client Address Book (address_book.json)

Saved servers are stored in JSON format with server names and hashes.

Example:

{
    "019e6ad5a0e47048413c9f7578e83393": {
        "display_name": "Beleth Test",
        "hash": "019e6ad5a0e47048413c9f7578e83393",
        "timestamp": "2025-01-01 13:31:08"
    }
}

Development

The codebase is organized into these main components:

  • Server (server): Handles client connections, message boards, and user management
  • Client (client): Provides the user interface and server connection handling

Security

RetiBBS utilizes Reticulum's built-in encryption and authentication mechanisms to ensure secure communication between clients and servers.

Requirements

About

BBS over Reticulum!

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published