handle SSL errors for self-signed certificates in SSEClient and DAQWorker

This commit is contained in:
2026-06-10 11:28:07 +02:00
parent 78cb160377
commit 37ef7e8381
2 changed files with 27 additions and 2 deletions
+14 -1
View File
@@ -10,7 +10,7 @@ from collections import deque
from typing import cast, Literal
from PySide6.QtCore import Signal, QUrl, Slot, QTimer, QObject, QByteArray
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply, QSslError
from jfjoch_client import ScanResult, ScanResultImagesInner
from aare.common.auth_models import BatonStatus
@@ -120,6 +120,7 @@ class DAQWorker(QObject):
self.__token = token
self.__base_url = base_url
self.__net_manager = QNetworkAccessManager()
self.__net_manager.sslErrors.connect(self._handle_ssl_errors)
self.__timer = QTimer()
self.__timer.setInterval(500)
self.__timer.timeout.connect(self.regular_update)
@@ -326,6 +327,18 @@ class DAQWorker(QObject):
reply = self.__net_manager.get(request)
reply.finished.connect(lambda: self.handle_status_response(reply))
_SELF_SIGNED_ERRORS = {
QSslError.SslError.SelfSignedCertificate,
QSslError.SslError.SelfSignedCertificateInChain,
}
@staticmethod
def _handle_ssl_errors(reply: QNetworkReply, errors: list):
self_signed = [e for e in errors if e.error() in DAQWorker._SELF_SIGNED_ERRORS]
if self_signed:
reply.ignoreSslErrors(self_signed)
@staticmethod
def handle_response(reply: QNetworkReply):
"""
+13 -1
View File
@@ -1,6 +1,6 @@
from typing import Optional, Dict
from PySide6.QtCore import QObject, Signal, Slot, QUrl, QTimer, QByteArray
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PySide6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply, QSslError
class SSEClient(QObject):
@@ -14,6 +14,7 @@ class SSEClient(QObject):
def __init__(self, parent=None):
super().__init__(parent)
self._network_manager = QNetworkAccessManager(self)
self._network_manager.sslErrors.connect(self._handle_ssl_errors)
self._reply: Optional[QNetworkReply] = None
self._reconnect_timer = QTimer(self)
self._reconnect_timer.setSingleShot(True)
@@ -60,6 +61,17 @@ class SSEClient(QObject):
"""Check if connected to SSE"""
return self._connected and self._reply and self._reply.isOpen()
_SELF_SIGNED_ERRORS = {
QSslError.SslError.SelfSignedCertificate,
QSslError.SslError.SelfSignedCertificateInChain,
}
@staticmethod
def _handle_ssl_errors(reply: QNetworkReply, errors: list):
self_signed = [e for e in errors if e.error() in SSEClient._SELF_SIGNED_ERRORS]
if self_signed:
reply.ignoreSslErrors(self_signed)
def _start_connection(self):
"""Start SSE connection"""
request = QNetworkRequest(self._url)