secubox-deb/packages/secubox-meshtastic/api
CyberMind-FR e9a4c604bd feat(meshtastic): channel join link + offline QR (the 'lien')
GET /api/v1/meshtastic/channel-url returns the device's sharable Meshtastic
channel URL (localNode.getURL — encodes name + PSK + LoRa config) plus an
offline inline-SVG QR (segno, Recommends). Open/scan it on a phone or second
node to JOIN the SecuBox mesh. The URL discloses the channel key → JWT-gated,
and the daemon logs each disclosure to journald. _SerialRadio.channel_url()
reads it from the live iface; MockRadio mirrors it. Panel: a 'Générer le lien
de jonction' button on the Channels tab renders the URL + QR (inline SVG,
CSP-safe, no data: URI).

+3 web tests (67 total). Live-verified on gk2: /channel-url returns the URL +
a 2.4KB QR SVG, panel loads 200.

Co-Authored-By: Gerald KERMA <devel@cybermind.fr>
2026-07-29 07:53:07 +02:00
..
__init__.py
bridge.py fix(meshtastic): daemon survives an unreachable MQTT broker at startup (ref #897) 2026-07-22 10:36:42 +02:00
cache.py fix(meshtastic): radio 'absent' despite a working radio — leaf-dir ownership drift (ref #918) 2026-07-29 07:32:11 +02:00
config.py
ctl.py fix(meshtastic): task-9 review — egress drop-in to /etc/nftables.d + accurate comments (ref #897) 2026-07-22 08:13:52 +02:00
daemon.py feat(meshtastic): channel join link + offline QR (the 'lien') 2026-07-29 07:53:07 +02:00
gridpolicy.py feat(meshtastic): grid policy + nft egress allow-list 2026-07-22 07:37:56 +02:00
model.py feat(meshtastic): seed local node + peers, record sent messages, live node events 2026-07-29 07:43:29 +02:00
passive.py feat(meshtastic): passive capture pipeline 2026-07-22 07:41:36 +02:00
radio.py feat(meshtastic): channel join link + offline QR (the 'lien') 2026-07-29 07:53:07 +02:00
web.py feat(meshtastic): channel join link + offline QR (the 'lien') 2026-07-29 07:53:07 +02:00