• src/sbbs3/qtmonitor/CMakeLists.txt LICENSE clientwidget.cpp clientwidg

    From Deuc¿@VERT to Git commit to main/sbbs/master on Thu May 7 09:50:21 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/79af1082cafd0d73836adeca
    Added Files:
    src/sbbs3/qtmonitor/CMakeLists.txt LICENSE clientwidget.cpp clientwidget.h loginattemptswidget.cpp loginattemptswidget.h logwidget.cpp logwidget.h main.cpp mainwindow.cpp mainwindow.h mqttclient.cpp mqttclient.h nodewidget.cpp nodewidget.h settingsdialog.cpp settingsdialog.h statswidget.cpp statswidget.h
    Modified Files:
    src/sbbs3/qtmonitor/.gitignore CLAUDE.md README.md
    Removed Files:
    src/sbbs3/qtmonitor/client_widget.py log_widget.py login_attempts_widget.py mainwindow.py mqtt_client.py node_widget.py pyproject.toml qtmonitor.py requirements.txt settings_dialog.py stats_widget.py tls_psk.py
    Log Message:
    qtmonitor: rewrite in C++ with Qt6 Widgets + Qt MQTT

    Replace the Python/PySide6 prototype with a native C++ implementation.
    No Python dependency, no fragile ctypes TLS-PSK hack.

    Uses QSslSocket's native preSharedKeyAuthenticationRequired signal for
    TLS-PSK authentication with broker.js. PSK ciphers filtered from QSslConfiguration::supportedCiphers() since setCiphers(QString) doesn't
    accept OpenSSL directives. TLS managed independently; QMqttClient
    receives the encrypted socket as an IODevice transport.

    SSL certificate errors prompt the user for confirmation; accepted errors
    are remembered for subsequent reconnects within the session.

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net