20 Commits
v1.1.1 ... main

Author SHA1 Message Date
Ben Allfree
b60527d92a fix: ingore @ mention in slash commands (closes #9) 2026-02-18 04:22:38 -08:00
Ben Allfree
06f032476d chore: formatting 2026-02-18 04:19:59 -08:00
Ben Allfree
907f22b22c v1.2.1 2025-12-09 11:26:02 -08:00
Ben Allfree
219dc25925 chore: update module registration and variable naming for consistency 2025-12-09 11:10:54 -08:00
Ben Allfree
6e99739bef v1.2.0 release 2025-12-09 09:04:32 -08:00
Ben Allfree
8e288d9b0d chore: update changelog 2025-12-09 08:50:47 -08:00
Ben Allfree
f30f83e607 feat: admin + first user functionality 2025-12-08 10:38:44 -08:00
Ben Allfree
a8a5727bd1 refactor: replace manual memory management with LoDb::freeRecords in LoBBSModule 2025-12-08 05:11:08 -08:00
Ben Allfree
763d976fd0 feat: edd extern declaration for lobbsPlugin in LoBBSModule and update pragma in plugin.h 2025-12-08 05:08:43 -08:00
Ben Allfree
64f2913c16 Revise README to update license and add disclaimer
Updated README to remove troubleshooting section and add disclaimer about project independence.
2025-12-07 13:02:08 -08:00
Ben Allfree
ad85958853 Update project title for clarity 2025-12-07 12:52:43 -08:00
Ben Allfree
3963e53dfe Fix typos in README for plugin manager naming 2025-12-07 12:52:09 -08:00
Ben Allfree
6c6d653c04 Update README to remove build warning
Removed warning about requirements for building LoBBS.
2025-12-07 12:50:40 -08:00
Ben Allfree
dcbf96bcc7 Update README to enhance walkthrough visibility
Reformatted the 'Watch the Walkthrough' section for clarity.
2025-12-07 12:46:53 -08:00
Ben Allfree
4645c80cec Fix duplicate link in README
Removed duplicate link to the walkthrough video.
2025-12-07 12:42:21 -08:00
Ben Allfree
5f27602379 Add walkthrough video link to README
Added a link to the walkthrough video for better visibility.
2025-12-07 12:39:57 -08:00
Ben Allfree
416ce3ce71 Add video thumbnail link to README
Updated README to include a video thumbnail link for LoBBS walkthrough.
2025-12-07 12:38:54 -08:00
Ben Allfree
189aeba41c Update README to change video embed to link
Replaced embedded YouTube iframe with a direct link.
2025-12-07 12:37:45 -08:00
Ben Allfree
a6ba122df2 Update README with new links and iframe 2025-12-07 12:37:08 -08:00
Ben Allfree
ab0ef08768 feat: add logo assets with logo.pxd and logo.webp files 2025-12-06 18:53:54 -08:00
9 changed files with 764 additions and 659 deletions

63
CHANGELOG.md Normal file
View File

@@ -0,0 +1,63 @@
# Changelog
All notable changes to LoBBS will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.2.1] - 2025-12-09
### Patch
- Updated module registration from `#pragma MPM_MODULE` to `MPM_REGISTER_MESHTASTIC_MODULE` comment directive
- Renamed module variable from `lobbsPlugin` to `lobbsModule` for consistency
## [1.2.0] - 2025-12-09
### Minor
- Logo assets with logo.pxd and logo.webp files
- Admin user functionality - first registered user automatically becomes administrator
### Patch
- Walkthrough video link in README
- Updated README with improved documentation, license information, and links
- Replaced manual memory management with LoDb::freeRecords() in LoBBSModule
- Added extern declaration for lobbsPlugin and updated MPM module pragma
## [1.1.1] - 2025-12-05
### Patch
- Refactored header structure: removed LoBBS and meta headers, updated include paths, introduced new plugin header
## [1.1.0] - 2025-12-05
### Minor
- MPM plugin compatibility
### Patch
- Direct messages now properly filter out broadcasts
## [1.0.1] - 2025-12-05
### Patch
- Enhanced installation documentation with Mesh Forge method
- Updated installation instructions for MPM integration
## [1.0.0] - 2025-11-28
### Major
- Initial release of LoBBS (LoDB Bulletin Board System)
- User registration and authentication
- Bulletin board messaging system
- Direct messaging between users
- Session management
- User directory and search functionality
[Unreleased]: https://github.com/MeshEnvy/lobbs/compare/v1.2.1...HEAD
[1.2.1]: https://github.com/MeshEnvy/lobbs/compare/v1.2.0...v1.2.1
[1.2.0]: https://github.com/MeshEnvy/lobbs/compare/v1.1.1...v1.2.0
[1.1.1]: https://github.com/MeshEnvy/lobbs/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/MeshEnvy/lobbs/compare/v1.0.1...v1.1.0
[1.0.1]: https://github.com/MeshEnvy/lobbs/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/MeshEnvy/lobbs/compare/c911244...v1.0.0

View File

@@ -1,7 +1,17 @@
# LoBBS - Meshtastic BBS on the Firmware
# LoBBS - Firmware-based BBS for Meshtastic
**A Meshtastic firmware plugin providing a full bulletin board system**
------
### Watch the Walkthrough
https://www.youtube.com/watch?v=FwtDY1QBXpQ
[![LoBBS Walkthrough](https://img.youtube.com/vi/FwtDY1QBXpQ/0.jpg)](https://www.youtube.com/watch?v=FwtDY1QBXpQ)
-------
LoBBS is a Meshtastic plugin that runs a complete bulletin board system entirely inside the Meshtastic firmware. Once installed and built into your node, you can create user accounts, exchange private mail, broadcast news posts, and remotely administer the device without any sidecar services or host computer.
## Features
@@ -16,15 +26,13 @@ LoBBS is a Meshtastic plugin that runs a complete bulletin board system entirely
### Using Mesh Forge (easy)
Use our [Mesh Forge build profile](https://meshforge.org/builds/new/835766d9e1b1c56c45d00d03f9ae96f376f2cf9e4d73c18a929b9849b9e88d42) to flash a LoBBS-enabled version of Meshtastic to your device.
Use our [Mesh Forge build profile](https://meshforge.org/builds/new/?plugin=lobbs) to flash a LoBBS-enabled version of Meshtastic to your device.
### Build it yourself (experimental)
> Warning: This requires
LoBBS is a [Meshtastic plugin](https://meshforge.org/plugins) that is automatically discovered and integrated by the [Mesh Plugin Manager](https://pypi.org/project/mesh-plugin-manager/) (MPM). To install LoBBS:
LoBBS is a [Meshtastic plugin](https://registry.meshforge.org) that is automatically discovered and integrated by the [Meshtastic Plugin Manager](https://pypi.org/project/mesh-plugin-manager/) (MPM). To install LoBBS:
1. **Install the Meshtastic Plugin Manager:**
1. **Install the Mesh Plugin Manager:**
```bash
pip install mesh-plugin-manager
@@ -42,7 +50,7 @@ mpm install lobbs
3. **Build and flash:**
The Meshtastic Plugin Manager automatically discovers both plugins, generates protobuf files, and integrates them into the build. Simply build and flash as usual:
The Mesh Plugin Manager automatically discovers both plugins, generates protobuf files, and integrates them into the build. Simply build and flash as usual:
```bash
pio run -e esp32 -t upload
@@ -66,12 +74,10 @@ LoBBS replies inline with human-readable summaries. Unread content is flagged wi
All user, mail, and news data is persisted via LoDB in the device filesystem. Clearing the filesystem, reflashing without preserving SPIFFS/LittleFS, or performing a full factory reset will delete the BBS contents. Regular backups of the filesystem are recommended for production deployments.
## Troubleshooting
- Verify your node clock is roughly correct. Timestamps in mail and news rely on the RTC and GPS time sources provided by the firmware.
- Confirm that your node stays logged in (no `/bye` issued) if you expect to receive `@mentions`. Unauthenticated nodes receive only the login help banner.
- If protobuf generation fails, ensure both LoBBS and LoDB plugins are properly installed in `src/plugins/` and that the Meshtastic Plugin Manager can discover them.
## License
LoBBS is distributed under the MIT license. See the accompanying `LICENSE` file within this module for full text.
LoBBS is distributed under the MIT license. See the accompanying `LICENSE` file within this module for full text. While LoBBS is MIT, it must be combined with Meshtastic source code which is GPL. You must therefore follow all GPL guidelines regarding the combined source and binary distributions of Meshtastic. The LoBBS source code may be distributed independently under MIT.
## Disclaimer
LoBBS and MeshForge are independent projects not endorsed by or affiliated with the Meshtastic organization.

BIN
logo.pxd Normal file

Binary file not shown.

BIN
logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -138,19 +138,23 @@ bool LoBBSDal::createUser(const char *username, const char *password, uint32_t n
// Calculate UUID first (username with host node ID as salt)
lodb_uuid_t userUuid = usernameToUuid(username, hostNodeId);
// Check if this is the first user (no existing users)
bool isFirstUser = (db->count("users") == 0);
// Create user record
meshtastic_LoBBSUser user = meshtastic_LoBBSUser_init_zero;
strncpy(user.username, username, sizeof(user.username) - 1);
user.uuid = userUuid;
user.password_hash.size = 32;
hashPassword(password, user.password_hash.bytes);
user.is_admin = isFirstUser;
LoDbError err = db->insert("users", userUuid, &user);
if (err != LODB_OK) {
LOG_ERROR("Failed to create user: %s", username);
return false;
}
LOG_INFO("Created user: %s", username);
LOG_INFO("Created user: %s (admin: %s)", username, isFirstUser ? "yes" : "no");
// Log in the user (create session)
return loginUser(username, nodeId);

File diff suppressed because it is too large Load Diff

View File

@@ -35,4 +35,6 @@ class LoBBSModule : public SinglePortModule
LoBBSDal *dal;
void sendReply(NodeNum to, const std::string &msg);
};
};
extern LoBBSModule *lobbsModule;

View File

@@ -22,6 +22,11 @@ message LoBBSUser {
* User UUID - deterministic hash derived from username
*/
uint64 uuid = 3;
/*
* Whether this user is an administrator
*/
bool is_admin = 4;
}
/*

View File

@@ -1,9 +1,14 @@
#pragma once
#define LOBBS_VERSION "1.1.1"
#define LOBBS_VERSION "1.2.1"
#define LOBBS_HEADER "LoBBS v" LOBBS_VERSION "\nCommands:\n"
#include "LoBBSModule.h"
#pragma MPM_MODULE(LoBBSModule)
/**
* This plugin registers a Module with Meshtastic. Modules are the primary way
* to extend Meshtastic with new functionality. Modules are registered with the
* MPM_REGISTER_MESHTASTIC_MODULE comment directive below.
*/
// MPM_REGISTER_MESHTASTIC_MODULE: LoBBSModule, lobbsModule, []