Skip to content

Releases: radioactive-bbs/Meshcore-BBSng

260805

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 05 Aug 18:40

Nachrichten-Antwort (RS/SBR)

  • RS<n>/ANTWORT<n> (private Nachricht beantworten) und SBR<n>/BULLETINANTWORT<n> (Board-Bulletin beantworten) akzeptieren jetzt sowohl RS<n>|Text (Pipe) als auch RS<n> Text bzw. RS <n> Text (Leerzeichen) gleichwertig - manche Mesh-Client-Tastaturen tippen | nur umstaendlich.
  • Reine Nummer ohne Text (z. B. RS51 oder RS 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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 05 Aug 18:58

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 Hinweis RS<n>|Text zum Antworten - analog zum bereits vorhandenen Hinweis bei Board-Nachrichten. Vorher war die Antwort-Syntax nur ueber den Umweg NT<n> sichtbar. Die Push-Benachrichtigung bei einer neuen Nachricht bekommt denselben Hinweis.
  • Das Nachrichten-Menue nennt jetzt RS/ANTWORT (vorher nur im Board-Menue fuer SBR vorhanden).
  • Unbekannt: RS/SBR bei deaktiviertem Feature zeigt jetzt die tatsaechlich getippte Form (RS oder ANTWORT bzw. SBR oder BULLETINANTWORT).
  • 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, NACHRICHTENTHREAD nennen 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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 30 Jul 20:22

Board- und Nachrichten-Threads

  • Board-Bulletins (SB/SBR) und private Nachrichten (S/RS) werden jetzt zu Threads gruppiert. BL/NL zeigen einen Eintrag je Thread mit Zaehler (gesamt) bzw. bei neuer Aktivitaet (gesamt/neu), z. B. (5/4).
  • Neue Befehle BT<n>/BOARDTHREAD und NT<n>/NACHRICHTENTHREAD klappen den Verlauf eines Threads auf. NT<n> markiert den ganzen Verlauf als gelesen.
  • SBR benachrichtigt 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 letzten BL-Aufrufs.
  • Kurzbefehle werden dort, wo der Buchstabe wirklich zum deutschen Wort passt, jetzt als [X]wort angezeigt (z. B. [N]achrichten), z. B. nicht bei aus dem Packet-Radio-Jargon stammenden Kuerzeln wie R/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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 27 Jul 20:08

Ä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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 23 Jul 16:55

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 zukunftssichere now_utc()-Hilfsfunktion ersetzt (utcnow() ist ab Python 3.12 deprecated), Speicherformat/Verhalten unveraendert.
  • Kleinere Code-Aufraeumungen (gemeinsamer E-Mail-Validator, konsolidierte Imports).

260723-3

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 23 Jul 19:01

Aenderungen seit 260723-2

Sicherheit

  • cryptography von 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 des cryptography-Wheels (betrifft den TLS-Server des Web-Admin und alle AES-GCM-Operationen unabhaengig von der aufgerufenen Python-API). requirements.txt hatte 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.sh legt sie per einfachem cp an (kein chmod), und die Web-Admin-Oberflaeche schrieb webconfig.yaml bei jeder Einstellungsaenderung neu, ohne die Rechte danach zu erzwingen - einmal falsche Rechte blieben dauerhaft falsch. Jetzt: main.py korrigiert beim Start automatisch auf 0600 (mit Log-Warnung, falls etwas korrigiert wurde), das Web-Admin erzwingt 0600 bei jedem Schreiben, und setup_pi.sh setzt 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) um SBR<nr>|Text und Rueckfrage-Hinweise bei Loeschen/Abmelden ergaenzt.

260723-2

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 23 Jul 18:24

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/PUBKEY
  • R<n>/LESEN <n>, S+SP/SENDEN, SB/BULLETIN, K+ND/LOESCHEN <n>
  • MI/MEINEINFO, MC/MAIL
  • RS<n>|Text auch als ANTWORT<n>|Text, SBR<n>|Text auch als BULLETINANTWORT<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/SENDEN prueft 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) und K/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 bei K/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 erfolgreicher OK <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: PING ohne Argument zeigt hoechstens 15 Repeater (mit Tipp auf PING <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

  • /stats 500-Fehler behoben: Eine lokale Variable quote (ACK-Quote in Prozent) ueberschattete den Modul-Import urllib.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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 21 Jul 19:40

Aenderungen seit 260718

Neu

  • Registrierungs-Modi: Self-Service-Registrierung ueber den Kanal-Befehl add jetzt in drei Modi waehlbar (Web-Admin -> Einstellungen -> Registrierung):
    • challenge (Status quo): Bestaetigungscode per Direktnachricht
    • open: sofort aktiv, ohne Pubkey-Pruefung
    • sysop_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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 20 Jul 20:46

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, bevor S/SB freigeschaltet werden. Andere Befehle bleiben waehrend der Wartezeit normal nutzbar.
  • Neuer Befehl PK: PK zeigt 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

Choose a tag to compare

@radioactive-bbs radioactive-bbs released this 17 Jul 20:27

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 admin beliebig 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 zu K<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.