Releases: radioactive-bbs/Meshcore-BBSng
Release list
260805
Nachrichten-Antwort (RS/SBR)
RS<n>/ANTWORT<n>(private Nachricht beantworten) undSBR<n>/BULLETINANTWORT<n>(Board-Bulletin beantworten) akzeptieren jetzt sowohlRS<n>|Text(Pipe) als auchRS<n> Textbzw.RS <n> Text(Leerzeichen) gleichwertig - manche Mesh-Client-Tastaturen tippen|nur umstaendlich.- Reine Nummer ohne Text (z. B.
RS51oderRS 51) liefert jetzt einen konkreten Format-Hinweis statt der nichtssagenden "Unbekannt"-Meldung.
Logging
- MeshCore-Companion-Push-Frame
0x88(RF-Mithoerlogs, bewusst ignorierbar) wird nicht mehr als "unbekannter Push-Frame" geloggt - machte laut 48h-Journal-Review ueber 95 % aller solcher Meldungen aus. Eigener Zweig, auf DEBUG statt INFO protokolliert, damit echte unbekannte Frame-Typen kuenftiger Firmware-Versionen im Journal auffallen.
260805-2
Antwort-Befehle: Entdeckbarkeit und Konsistenz
Kritische Durchsicht der Befehlssyntax (RS/SBR und Nachbarschaft), alle Befunde behoben:
R<n>zeigt jetzt beim Lesen einer eigenen privaten Nachricht direkt den HinweisRS<n>|Text zum Antworten- analog zum bereits vorhandenen Hinweis bei Board-Nachrichten. Vorher war die Antwort-Syntax nur ueber den UmwegNT<n>sichtbar. Die Push-Benachrichtigung bei einer neuen Nachricht bekommt denselben Hinweis.- Das Nachrichten-Menue nennt jetzt
RS/ANTWORT(vorher nur im Board-Menue fuerSBRvorhanden). Unbekannt: RS/SBRbei deaktiviertem Feature zeigt jetzt die tatsaechlich getippte Form (RSoderANTWORTbzw.SBRoderBULLETINANTWORT).- Formatpruefung laeuft jetzt einheitlich vor der Pubkey-Sicherheitsabfrage (
S,SB,RS,SBR) - ein Tippfehler loest nicht mehr erst den Sicherheitshinweis-Dialog aus. - Format-Hinweise bei
LESEN,LOESCHEN,BOARDLISTE,BOARDTHREAD,NACHRICHTENLISTE,NACHRICHTENTHREADnennen jetzt auch die angehaengte Kurzform (z. B.R5), vorher nur die Leerzeichen-Form. - README und Cheatsheet dokumentieren die neue
RS<n> Text/SBR<n> Text-Syntax (siehe letztes Release) jetzt vollstaendig, inklusive kurzer Erklaerung der drei Trennzeichen-Regeln im BBS.
260730
Board- und Nachrichten-Threads
- Board-Bulletins (
SB/SBR) und private Nachrichten (S/RS) werden jetzt zu Threads gruppiert.BL/NLzeigen einen Eintrag je Thread mit Zaehler(gesamt)bzw. bei neuer Aktivitaet(gesamt/neu), z. B.(5/4). - Neue Befehle
BT<n>/BOARDTHREADundNT<n>/NACHRICHTENTHREADklappen den Verlauf eines Threads auf.NT<n>markiert den ganzen Verlauf als gelesen. SBRbenachrichtigt jetzt alle bisherigen Thread-Teilnehmer statt nur den Autor des Anfangs.- Board-Aufbewahrung rechnet threadweise ab der letzten Aktivitaet statt pro Einzelnachricht.
Hauptmenue
- Neuer Board-Badge (
[B]oard (n neu)) analog zum bestehenden Nachrichten-Badge, basierend auf dem Zeitpunkt des letztenBL-Aufrufs. - Kurzbefehle werden dort, wo der Buchstabe wirklich zum deutschen Wort passt, jetzt als
[X]wortangezeigt (z. B.[N]achrichten), z. B. nicht bei aus dem Packet-Radio-Jargon stammenden Kuerzeln wieR/K/WX.
Performance-Fix
- Benachrichtigungen an Dritte (neue Nachricht, Thread-Antworten, SysOp-Hinweise, Loesch-/Inaktivitaets-Erinnerungen) blockierten bisher die eigentliche Befehlsantwort, da der DM-Versand ueber den Node seriell ist und pro Empfaenger 10-90s dauern kann. Laufen jetzt als Hintergrund-Task.
Sonstiges
- Kaputtes Info-Symbol im Menue (fehlender Font-Glyph auf dem Geraet) ersetzt.
260727
Änderungen seit 260723-3
- Feature-Nutzungsstatistik im Web-Admin (Statistik-Seite): neue Tabelle zeigt je Befehl, wie oft er genutzt wird — heute, im gewählten Zeitraum und als Verlauf.
- Pubkey-Bestätigung robuster: klarere, getrennte Fehlermeldungen bei falschem Bestätigungscode bzw. bei einem nicht mehr gültigen Code (z. B. nach einem BBS-Neustart) — vorher liefen beide Fälle in eine generische "Unbekannter Befehl"-Antwort.
- Ein kleines verstecktes Easter Egg hat den Weg ins BBS gefunden. 🙂
260723
Aenderungen seit 260721
Fix
- DM-Chunking zerschnitt Umlaute/Emojis und kappte lange Antworten: Die Aufteilung langer Nachrichten in mehrere Funkpakete zaehlte bisher Zeichen statt UTF-8-Bytes - bei Umlauten/Emojis konnte ein 150-Zeichen-Chunk deutlich ueber dem 150-Byte-Firmware-Limit liegen und wurde dann mitten in einer Mehrbyte-Sequenz abgeschnitten. Zusaetzlich wurden lange Einzeltexte (u.a. die Willkommens-/Bestaetigungs-DM nach erfolgreicher Registrierung) gar nicht in mehrere Pakete aufgeteilt und dadurch bei 150 Byte hart gekappt. Beides jetzt byte-genau korrekt.
- cmd_kill (K/ND) ermoeglichte Aufzaehlen fremder Postfach-Nachrichten: Wer eine private Nachricht nicht loeschen durfte, bekam "Keine Berechtigung" (verraet: ID existiert) statt "nicht gefunden" - damit liess sich per Durchprobieren erkennen, welche fremden Nachrichten-IDs existieren. Jetzt dieselbe Maskierung wie beim Lesen (R<n>): wer eine private Nachricht nicht einmal lesen darf, bekommt "nicht gefunden".
- Watchdog-Reinitialisierung wird beim Shutdown jetzt sauber abgebrochen (war zuvor ein ungetrackter Task); Nachrichtenabruf vom Node bricht ab, sobald "keine weiteren Nachrichten" gemeldet wird, statt immer 20 Anfragen zu senden.
Performance
- Board-/Nachrichtenliste (BL/NL) laden nicht mehr die komplette Tabelle: Filterung und Seitenweise-Anzeige laufen jetzt per SQL-Query (WHERE/LIMIT/OFFSET) statt die gesamte messages-Tabelle in den Speicher zu laden. Bei der Board-Liste wurden dabei bisher auch alle privaten Nachrichten aller User unnoetig entschluesselt, nur um sie anschliessend wegzufiltern - das entfaellt jetzt komplett.
Sicherheit / Haertung
- TLS-Cipher-Suiten eingeschraenkt: Das Web-Admin-Zertifikat verhandelt jetzt nur noch Forward-Secret-AEAD-Suiten (ECDHE/DHE + AES-GCM/ChaCha20); ungenutzte PSK-/SRP-Suiten (keine PSK-Identity konfiguriert, reine Angriffsflaeche) sind ausgeschlossen. TLS 1.3 ist davon unberuehrt.
- TLS-Private-Key-Datei: Dateirechte (0600) werden jetzt auch bei bereits vorhandenen Dateien (z.B. nach manuellem Kopieren oder Backup-Wiederherstellung) explizit erzwungen, nicht nur bei Neuanlage.
- AES-GCM-Entschluesselung faengt jetzt gezielt ungueltige Tags/defektes Base64 ab, statt pauschal jede Ausnahme (auch z.B. MemoryError) stillschweigend zu verschlucken.
- scrypt-Passwort-Hashing hat jetzt eine explizite Speicherobergrenze (maxmem), damit ein manipulierter Hash mit ueberhoehten Parametern keinen Speicher-DoS ausloesen kann.
- Web-Admin-Login: Konstantzeit-Vergleich gegen unbekannte Zusatz-Admin-Benutzernamen (verhindert Enumeration ueber die Antwortzeit); Sessions werden jetzt regelmaessig bereinigt statt unbegrenzt zu wachsen.
Sonstiges
datetime.utcnow()durch die zukunftssicherenow_utc()-Hilfsfunktion ersetzt (utcnow()ist ab Python 3.12 deprecated), Speicherformat/Verhalten unveraendert.- Kleinere Code-Aufraeumungen (gemeinsamer E-Mail-Validator, konsolidierte Imports).
260723-3
Aenderungen seit 260723-2
Sicherheit
cryptographyvon 42.0.8 auf 49.0.0 angehoben. Ein Dependency-Scan (pip-audit) fand 6 bekannte Advisories gegen die zuvor gepinnte Version, darunter mehrere im gebuendelten OpenSSL descryptography-Wheels (betrifft den TLS-Server des Web-Admin und alle AES-GCM-Operationen unabhaengig von der aufgerufenen Python-API).requirements.txthatte eine zu enge Obergrenze (<43.0), die ein Update auf eine gefixte Version verhindert hat - jetzt>=49.0,<50.0. Vor dem Rollout mit einem 8-Punkte-Regressionstest (scrypt-Hashing, AES-GCM, TLS-Handshake, Cipher-Haertung, Zertifikatsvalidierung) auf QA und Live gegen die echte installierte Version verifiziert: identisches Verhalten zu vorher.- Gitignored Config-Dateien (
secrets.yaml,config.local.yaml,webconfig.yaml) waren teils world-readable. Ursache:setup_pi.shlegt sie per einfachemcpan (keinchmod), und die Web-Admin-Oberflaeche schriebwebconfig.yamlbei jeder Einstellungsaenderung neu, ohne die Rechte danach zu erzwingen - einmal falsche Rechte blieben dauerhaft falsch. Jetzt:main.pykorrigiert beim Start automatisch auf 0600 (mit Log-Warnung, falls etwas korrigiert wurde), das Web-Admin erzwingt 0600 bei jedem Schreiben, undsetup_pi.shsetzt die Rechte bereits bei der Ersterzeugung.
Docs
- README grundlegend ueberarbeitet: deutsche Langform-Aliase, Bestaetigungs-Anforderungen bei
REMOVE/K/ND,SBR-Bulletin-Antwort und weitere Verhaltensaenderungen der letzten Sessions dokumentiert. - Druckbares Kreditkarten-Cheatsheet (
docs/cheatsheet.html) umSBR<nr>|Textund Rueckfrage-Hinweise bei Loeschen/Abmelden ergaenzt.
260723-2
Aenderungen seit 260723
Neu: Deutschsprachige Langform-Aliase
Jeder Kurzbefehl hat jetzt eine ausfuehrlichere deutsche Alternative, die zusaetzlich (nicht ersetzend) funktioniert - fuer Nutzer, die sich mit den Kuerzeln schwertun:
N/NACHRICHTEN,B/BOARD,I/INFO,A/ACCOUNT(Menues)WX1/MORGEN,WX3/DREITAGE,SI/SYSINFO,O/ONLINE,LU/USERLISTE,PK/PUBKEYR<n>/LESEN <n>,S+SP/SENDEN,SB/BULLETIN,K+ND/LOESCHEN <n>MI/MEINEINFO,MC/MAILRS<n>|Textauch alsANTWORT<n>|Text,SBR<n>|Textauch alsBULLETINANTWORT<n>|Text
Bonus: BL/BLO und NL/NLO sind zusammengefuehrt - BL/NL nehmen jetzt selbst ein optionales Zahlenargument fuer die Folgeseite entgegen. BLO/NLO bleiben als funktionierende Alt-Formen erhalten, sind aber nicht mehr noetig.
Neu: Board-Bulletin-Antwort (SBR)
SBR<n>|Text (bzw. BULLETINANTWORT<n>|Text) beantwortet ein Board-Bulletin als neues Bulletin mit "Re: "-Betreff - bisher gab es dafuer keinen Shortcut, nur fuer private Nachrichten (RS<n>|Text).
Verbessert: Usability-Haertung nach User-Feedback
Basierend auf einer Bewertung aus Sicht eines MeshCore-Users:
- Zustellungs-Feedback beim Senden:
S/SENDENprueft jetzt, ob der Empfaenger registriert ist. Vorher sah eine Nachricht an ein vertipptes oder nicht (mehr) registriertes Rufzeichen exakt gleich aus wie eine echte Zustellung - der Absender hatte keine Moeglichkeit, das zu erkennen. - Bestaetigung vor destruktiven Befehlen:
REMOVE(Account loeschen) undK/ND/LOESCHEN(Nachricht loeschen) fuehren nicht mehr sofort aus, sondern verlangen dieselbe Eingabe innerhalb eines kurzen Zeitfensters (2 Min. bzw. 1 Min.) ein zweites Mal. Die Berechtigungspruefung beiK/ND(inkl. Maskierung nicht existierender/fremder privater Nachrichten als "nicht gefunden") laeuft dabei unveraendert VOR der Rueckfrage, damit kein neues Enumerations-Leck entsteht. - Automatischer Sende-Replay nach Pubkey-Bestaetigung: Ein durch den Pubkey-Sicherheitshinweis blockierter Sendeversuch (
S/SB/RS/SBR) wird nach erfolgreicherOK <Code>-Bestaetigung automatisch nachgeholt, statt verworfen zu werden - der User muss seine Nachricht nicht erneut eintippen. - Nachrichtenliste: abgeschnittene Betreffs zeigen jetzt "..." (analog zur Board-Liste) statt sie stillschweigend zu kuerzen.
- PING-Repeaterliste gedeckelt:
PINGohne Argument zeigt hoechstens 15 Repeater (mit Tipp aufPING <Teilname>) statt bei vielen bekannten Repeatern unbegrenzt viele Nachrichten zu verschicken. - Klarere Formathinweise:
S/SB-Fehlermeldungen erwaehnen jetzt, dass Betreff/Thema kein|enthalten darf (sonst wird der Text an der falschen Stelle geteilt). - Wettermeldungen: "Home Assistant"/"HA" durch generisches "Wetterdienst" in allen nutzersichtbaren Texten ersetzt (internes Implementierungsdetail ohne Bedeutung fuer den Mesh-User); interne Log-Meldungen behalten "HA" fuer die Sysop-Diagnose.
Fix
/stats500-Fehler behoben: Eine lokale Variablequote(ACK-Quote in Prozent) ueberschattete den Modul-Importurllib.parse.quote, sobald fuer mindestens einen User Routing-Statistikdaten vorlagen - trat erst auf, nachdem genug echte Mesh-Aktivitaet Routing-Daten angesammelt hatte.
Docs
- README grundlegend ueberarbeitet: alle neuen Aliase, Bestaetigungs-Anforderungen und Verhaltensaenderungen dokumentiert.
260721
Aenderungen seit 260718
Neu
- Registrierungs-Modi: Self-Service-Registrierung ueber den Kanal-Befehl
addjetzt in drei Modi waehlbar (Web-Admin -> Einstellungen -> Registrierung):challenge(Status quo): Bestaetigungscode per Direktnachrichtopen: sofort aktiv, ohne Pubkey-Pruefungsysop_approval: Antrag wartet im Web-Admin auf manuelle Freischaltung durch den SysOp (mit Hinweis-DM)
- Inaktivitaets-Bereinigung: User ohne jede BBS-Aktivitaet werden nach konfigurierbarer Frist (Default 60 Tage) automatisch entfernt, mit bis zu 3 frei einstellbaren Erinnerungs-DMs vorher (Default 10/5/1 Tage vor der Entfernung)
- Getrenntes Nachrichten-Loeschverhalten bei jeder Art der User-Entfernung (Inaktivitaet, Web-Admin Entfernen/Sperren, Self-Service
REMOVE): empfangene private Nachrichten werden immer geloescht, gesendete private Nachrichten bzw. eigene Board-Bulletins einzeln per Web-Admin-Einstellung steuerbar
Fix
- Hop-Statistik zeigte nie echte Multihop-Direktzustellungen: Die Node-Firmware unterscheidet "Pfad unbekannt" von "bestaetigter Direktnachbar (0 Hops)" - der Code hat beide Faelle bisher zusammengefasst und dadurch faelschlich immer "1 Hop" angenommen. Jetzt korrekt unterschieden, Statistik zeigt jetzt auch echte Mehrhop-Direktzustellungen, sobald der Node einen Pfad kennt.
Docs
- README um die neuen Features ergaenzt (Registrierungs-Modi, Inaktivitaets-Bereinigung, Senderecht-Verwaltung, praezisere Routing-Klassifizierung)
260718
Neu
- Pubkey-Sicherheitshinweis vor dem ersten Senden: Namen im Mesh sind faelschbar/duplizierbar, nur der Pubkey beweist Identitaet. Jeder User (auch Bestandsuser) muss dies per Direktnachricht-Challenge (
OK <6-stelliger Code>, 15 Min. gueltig) einmalig bestaetigen, bevorS/SBfreigeschaltet werden. Andere Befehle bleiben waehrend der Wartezeit normal nutzbar. - Neuer Befehl
PK:PKzeigt den eigenen vollen Pubkey (64 Hex) zur Weitergabe an andere,PK <Name>den vollen Pubkey eines Kontakts zum Abgleich vor dem Senden. - Senderecht-Verwaltung im Web-Admin (Seite "Benutzer"): zeigt je User den Bestaetigungsstatus (Bestaetigt / Unbestaetigt / Gesperrt) und erlaubt dem SysOp, das Senderecht manuell zu setzen, zu entziehen oder einen User dauerhaft vom Senden zu sperren (uebersticht eine bereits vorhandene Bestaetigung, laesst sich nicht per erneuter Challenge umgehen).
Migration
Neue Spalten pubkey_ack_confirmed und send_locked in mc_contacts werden beim ersten Start automatisch angelegt (Default: unbestaetigt/entsperrt fuer alle Bestandsuser).
260717
Security
- Pubkey-Challenge fuer Self-Service-Registrierung (
add): verhindert Name-Squatting — ein zufaelliger Bestaetigungscode wird per Direktnachricht an den behaupteten Pubkey geschickt, erst eine korrekte Antwort DAVON schliesst die Registrierung ab. Zusaetzlich Rate-Limit gegen Squatting-Flooding. - Registrierungs-Versuchslimit: nach 5 falschen Bestaetigungscodes wird die Registrierung sofort verworfen statt bis zum 10-Minuten-Timeout weiter raten zu lassen.
- Optionaler Proxy-IP-Trust (
web.trust_proxy_headers, Default aus) fuer das Login-Brute-Force-Lockout hinter einem Reverse-Proxy. - Passwortrichtlinie verschaerft: Mindestlaenge von 8 auf 12 Zeichen erhoeht, neue Blockliste gegen triviale/haeufige Passwoerter, Wiederholungszeichenfolgen und auf-/absteigende Ziffernfolgen — einheitlich in Web-UI und CLI-Skript.
Ergebnis eines vollstaendigen Sicherheitsaudits (SQL/XSS/CSRF/Auth/TLS/MeshCore-Paket-Parsing).
Neue Features
- Co-SysOps: weitere Rufzeichen mit SysOp-Rechten (z.B. Nachrichten anderer User loeschen), ueber Web-Admin → Einstellungen pflegbar.
- Mehrere Web-Admin-Konten: zusaetzlich zum festen Konto
adminbeliebig viele weitere Benutzername/Passwort-Logins anlegbar, gleichberechtigt. - Private Nachrichten werden per Push-DM sofort mit vollem Inhalt zugestellt (nicht mehr nur ein Hinweis).
- Statistik unterscheidet Direktpfad-Nachrichten jetzt nach Hop-Zahl (1 / 2-5 / >5 Hops).
- Unregistrierte Pubkey-Prefixe erscheinen in der Statistik als "Vorregistrierung" statt als kryptischer Hex-String.
- Neuer Befehl
ND<n>als sprechenderer Alias zuK<n>; Zahlenargument-Befehle akzeptieren jetzt auch die angehaengte Form (K5).
Fixes
- Nachrichten-Loeschrecht korrigiert: private Nachrichten loescht jetzt der Empfaenger (vorher faelschlich nur der Absender); SysOp/Co-SysOps duerfen immer.
- Nutzeridentitaet wird ueber den Pubkey aufgeloest statt ueber den (aenderbaren) Node-Kontaktnamen — behebt Faelle, in denen NL faelschlich "keine Nachrichten" zeigte.
- Statistik-Events nutzen den stabilen registrierten Namen statt des Live-Kontaktnamens (keine doppelten User-Eintraege mehr bei Namensaenderungen).
- Kontakt-Hinzufuegen-URI-Format korrigiert (Pubkey als Pfadsegment statt Query-Parameter).
Docs
- README fuer Self-Service-Registrierung (Pubkey-Challenge-Ablauf) und
ND<n>/Empfaenger-Loeschrecht aktualisiert.