diff --git a/plugin_manager.py b/plugin_manager.py index d1c81af..3b688b7 100644 --- a/plugin_manager.py +++ b/plugin_manager.py @@ -9,6 +9,7 @@ License: GPL-3.0 # Built-in imports import io +import ssl import sys import json import shutil @@ -20,6 +21,7 @@ from pathlib import Path from typing import Any, cast # External library imports +import certifi from PySide6.QtCore import QObject, QUrl, Signal from PySide6.QtGui import QDesktopServices from PySide6.QtWidgets import QMainWindow, QMenu, QMessageBox @@ -27,6 +29,11 @@ from PySide6.QtWidgets import QMainWindow, QMenu, QMessageBox from src.shared.shareddata import APP_NAME, CURRENT_VERSION, PLATFORM_NAME +def get_ssl_context() -> ssl.SSLContext: + """Returns a cross-platform SSL context configured with certifi's CA bundle.""" + return ssl.create_default_context(cafile=certifi.where()) + + def get_current_platform_id() -> str: """Returns standardized platform identifier (win_x64, darwin_arm64, etc.).""" sys_name = sys.platform @@ -282,7 +289,7 @@ class PluginManager(QObject): url, headers={"User-Agent": f"{APP_NAME}-PluginManager"}, ) - with urllib.request.urlopen(req, timeout=5) as response: + with urllib.request.urlopen(req, timeout=5, context=get_ssl_context()) as response: if response.status == 200: raw_data = response.read().decode("utf-8") data = json.loads(raw_data) @@ -305,7 +312,7 @@ class PluginManager(QObject): headers={"User-Agent": f"{APP_NAME}-PluginManager"}, ) - with urllib.request.urlopen(req, timeout=15) as response: + with urllib.request.urlopen(req, timeout=15, context=get_ssl_context()) as response: if response.status != 200: raise RuntimeError(f"Download failed with HTTP status code {response.status}") diff --git a/src/shared/shareddata.py b/src/shared/shareddata.py index fb7592d..dd42f94 100644 --- a/src/shared/shareddata.py +++ b/src/shared/shareddata.py @@ -13,7 +13,7 @@ import sys import platform -CURRENT_VERSION = "1.7.1" +CURRENT_VERSION = "1.7.2" APP_NAME = "flares" APP_NAME_EXPANDED = "fNIRS Lightweight Analysis, Research, & Evaluation Suite" API_URL = f"https://git.research.dezeeuw.ca/api/v1/repos/tyler/{APP_NAME}/releases"