Skip to content
This repository has been archived by the owner on Sep 4, 2022. It is now read-only.

nuclearsalmon/project-accela

Repository files navigation

forthebadge forthebadge forthebadge forthebadge

Project Accela

A framework for building modular, plugin-driven server software, BBSes and MUDs.

It also includes a purpose built TUI window manager (optional) that plugins can interact with, allowing for a consistent and easy-to-use means of handling concurrent IO to and from client terminals.

Feel free to check out the wiki.

Table of Contents

Background

My end goal with Project Accela is to utilize the framework to create a sandboxed virtual network "game" for hackers to play around in, explore and exploit. I want it to be social, highly strategic and to reward those that think out of the box. It will look and behave somewhat similarly to a BBS or a MUD.

The plugins that will be used to create said environment will be publicly available along with the rest of the project (though probably in a separate repository). I have plenty of plans for this "game", but that is outside the scope of this README.

Notes

  • The full code for the server core and Prismatic will be uploaded at a later date, as it's not quite ready yet and I'm dissatisfied with the current code quality.
  • I plan on adding support for more protocols than just telnet, as well as implementing encryption for all protocols. However, as I'm currently only using it for local testing, unencrypted telnet is more than sufficient.

Dependencies

  • JetBrains annotations (@NotNull & @Nullable)
  • SnakeYAML

Install

TBD.

Usage

TBD.

Modules and Plugins

Plugins are loadable modules that come in the form of .jar files. They provide additional functionality on top of the server core. Plugins can be loaded into the server at any point during runtime and will run in a sandboxed environment where they are only allowed access to certain parts of the framework.

Server Core

The server core provides the essential frameworks and functionality behind the project. Including, but not limited to (keep in mind some of this is not implemented yet):

  • Plugin framework.
  • Service scheduling.
  • Event-based cross-plugin communication separated by channels.
  • Sandbox security features, including a permissions system for limiting plugin access.
  • Basic user data and per-user permissions management.
  • Standard classes for creating Session Providers that add support for network communication through various client-server protocols (such as Telnet). This is so that any future protocols can be easily implemented and interacted with in a standardized fashion.
  • Logging.

Prismatic Window Manager

Prismatic lets multiple plugins simultaneously provide terminal-based I/O to and from users, without the plugins interfering with each other.

It lets you build an interactive user interface similar to how one would do for a GUI program. This includes buttons, dropdown menus, input boxes, etc.

Repo link: Prismatic Window Manager

Telnet Provider

A plugin that adds support for communication through the telnet protocol. It provides users a means of connecting to the system and interacting with it.

The telnet server supports proper telnet negotiation, and can intelligently negotiate for features that the server and client both support or have in common. The plugin can also be configured to listen on multiple ports if needed.

Repo link: Telnet Provider

Credits

Thanks to:

  • SqZ / Ozz Nixon - My main source of advice and insights.