====== Titan BBS ====== :!: Abandoned Project The software was written by Andrew Pamment (apam), development has ceased and he is is now working on Talisman BBS. Titan BBS was an experimental BBS written in C++ for Linux and Windows. It utilized parts of C++17 found in Visual Studio 2019 (and recent versions of Visual Studio 2017) and GCC 8+. On Linux CMake was used to configure. Titan used sqlite3 for messages, user bases, file bases etc. It came with it's own FTN message tosser (TitanFTN). Titan also relied on third party utilities for some features. SEXYZ for file transfers and InfoZIP for archiving. Titan was configured using JSON files. Art files for menus etc are plain text files which can include special CTRL-A codes for colour for those users that want to use it. A utility ans2ctrla is included to convert .ANS files to CTRL-A text files. ===== Installing Titan on Linux ===== ==== Building Titan BBS ==== **Prerequisites:** * GCC 8 or Clang 7 or higher * libssh + development headers * libsqlite3 + development headers * Info ZIP and UNZIP * SEXYZ * CMake * Git Titan uses the C++17 filesystem library, and will therefore require **GCC 8 or higher, or clang 7 or higher**. === Step 1. Clone the repository === git clone https://gitlab.com/apamment/Titan.git === Step 2. Build Titan === cd Titan/Titan mkdir build cd build cmake .. make ==== Create Titan Files & Directorys ==== Create somewhere to store your data files. For example: /home/user/bbs mkdir /home/user/bbs Copy the gfiles directory from Titan/Titan to /home/user/bbs cp -r ../Titan/Titan/gfiles /home/user/bbs Create other needed directories mkdir /home/user/bbs/dbs mkdir /home/user/bbs/temp mkdir /home/user/bbs/keys mkdir /home/user/bbs/logs Create SSH keys ssh-keygen -f /home/user/bbs/keys/ssh_host_rsa_key -N '' -t rsa ssh-keygen -f /home/user/bbs/keys/ssh_host_dsa_key -N '' -t dsa Configure Titan using the paths above. ===== Installing Titan on Windows ===== Download the latest installer snapshot from ?? Run the installer. Answer the questions. Configuring Titan is done with a single JSON file. ===== Configuring Titan ===== ==== Main ==== * **MaxNodes** The Maximum number of nodes the system supports * **TelnetPort** The Port to listen for Telnet Connections * **RloginPort** The Port to listen for rlogin connections * **SSHPort** The Port to listen for SSH connections * **SystemName** Your BBS Name * **SysopName** The USERNAME of the sysop account * **LogLevel** The level of severity to use for the log file ==== Paths ==== * **GFiles** Path to the directory where txt files sent as menus are stored * **Databases** Path to database files * **Temp** Path to node directories where temporary files are placed. * **SEXYZ** Path and Filename of SEXYZ, used for file transfers. * **ExternalEditor** Path and Filename of a batchfile/script that will launch an external editor. * **SSHRSAKey** Path and filename of SSH Host RSA key * **SSHDSAKey** Path and filename of SSH Host DSA key * **LogFile** Path and filename of Log file * **MailSemaphore** Path and filename of semaphore to create when a mail is entered. ==== MessageBases ==== * **name** The name of the message base. * **id** The id used for the message base in the database. * **readlevel** The security level a user must be to read the base. * **writelevel** The security level a user must be to post (or reply). ==== MessageConferences ==== * **name** The name of the message conference. * **id** The id used for the message conference in the database. * **areas** an array of message base ids * **accesslevel** The security level a user must be to see the message conference. ==== Doors ==== * **name** The name of the door. * **hotkey** The hotkey to press on the door menu to launch the door. * **command** The name of a batch file/script to launch the door. * **accesslevel** The security level a user must be to launch the door. **Note:** Batch files and scripts used for doors and the external editor are passed 2 arguments, the first is the node number, the second is the socket. The socket is unused on Linux, as it only supports stdio doors on that platform. ==== FileBases ==== * **index** Index of the filebase must be unique * **name** The name of the file base * **filepath** The path to the actual files for this filebase (used for uploads) * **database** The path and filename of the database in which the file entries are stored. * **uploadlevel** The security level a user must be to upload from this area. * **downloadlevel** The security level a user must be to download from this area. ==== TextFiles ==== * **title** The title of the text file * **filepath** The path and filename of the text file to display. * **pause** True to use a pause prompt, false to not. * **hotkey** The hotkey used to display the text file from the Text file menu. * **accesslevel** The security level a user must be to view this text file. ===== Example Configuration File ===== { "Main": { "MaxNodes": 5, "TelnetPort": 23, "RloginPort": 513, "SSHPort": 22, "SystemName": "A New Titan BBS", "SysopName": "Sysop", "LogLevel": "Info" }, "Paths": { "GFiles": "C:/bbs/gfiles", "Databases": "C:/bbs/dbs", "Temp": "C:/bbs/temp", "SEXYZ": "C:/bbs/sexyz.exe", "ExternalEditor": "C:/bbs/doors/oedit.bat", "SSHRSAKey": "C:/bbs/keys/ssh_host_rsa_key", "SSHDSAKey": "C:/bbs/keys/ssh_host_dsa_key", "LogFile": "C:/bbs/logs/Titan.log", "MailSemaphore": "C:/bbs/mail.out" }, "MessageBases": [ { "name": "General", "readlevel": 10, "writelevel": 10, "id": 0 }, { "name": "Testing", "readlevel": 10, "writelevel": 10, "id": 1 }, { "name": "General", "readlevel": 10, "writelevel": 10, "id": 100 }, { "name": "BBS Discussion", "readlevel": 10, "writelevel": 10, "id": 101 }, { "name": "Mystic Discussion", "readlevel": 10, "writelevel": 10, "id": 102 }, { "name": "Magicka Discussion", "readlevel": 10, "writelevel": 10, "id": 103 }, { "name": "ENiGMA 1/2 Discussion", "readlevel": 10, "writelevel": 10, "id": 104 }, { "name": "Cryptographic Posts", "readlevel": 10, "writelevel": 10, "id": 105 }, { "name": "Automated RoBOT Posts", "readlevel": 10, "writelevel": 10, "id": 106 } ], "MessageConferences": [ { "name": "Local Mail", "id": 0, "accesslevel": 10, "areas": [ 0, 1 ] }, { "name": "FSXNet", "id": 2, "accesslevel": 10, "areas": [ 100, 101, 102, 103, 104, 105, 106 ] } ], "Doors": [ { "name": "Galactic Dynasty", "hotkey": "1", "accesslevel": 10, "command": "C:/bbs/doors/gd.bat" }, { "name": "For Honour", "hotkey": "2", "accesslevel": 10, "command": "C:/bbs/doors/fh.bat" } ], "FileBases": [ { "index": 1, "name": "General Files", "filepath": "C:/bbs/files/general", "database": "C:/bbs/files/general.db3", "uploadlevel": 10, "downloadlevel": 10 }, { "index": 2, "name": "BBS Related Files", "filepath": "C:/bbs/files/bbs", "database": "C:/bbs/files/bbs.db3", "uploadlevel": 10, "downloadlevel": 10 } ], "TextFiles": [ { "title": "AF Downs Scores", "filepath": "C:/bbs/doors/afdowns2/scores.txt", "pause": "true", "accesslevel": 10, "hotkey": "1" }, { "title": "AF Slots Scores", "filepath": "C:/bbs/doors/afslots2/scores.txt", "pause": "true", "accesslevel": 10, "hotkey": "2" } ] } ===== Related Links ===== Titan BBS - https://gitlab.com/apamment/Titan