fix(core): 信任系统证书,并添加网络代理地址配置项 #50

This commit is contained in:
DLmaster361
2025-07-13 22:50:04 +08:00
parent 4efbafc174
commit d539c0f808
9 changed files with 104 additions and 13 deletions

View File

@@ -262,6 +262,7 @@ class GlobalConfig(LQConfig):
self.update_ThreadNumb = RangeConfigItem( self.update_ThreadNumb = RangeConfigItem(
"Update", "ThreadNumb", 8, RangeValidator(1, 32) "Update", "ThreadNumb", 8, RangeValidator(1, 32)
) )
self.update_ProxyAddress = ConfigItem("Update", "ProxyAddress", "")
self.update_ProxyUrlList = ConfigItem( self.update_ProxyUrlList = ConfigItem(
"Update", "ProxyUrlList", [], UrlListValidator() "Update", "ProxyUrlList", [], UrlListValidator()
) )
@@ -706,7 +707,7 @@ class GeneralSubConfig(LQConfig):
class AppConfig(GlobalConfig): class AppConfig(GlobalConfig):
VERSION = "4.4.0.5" VERSION = "4.4.0.6"
stage_refreshed = Signal() stage_refreshed = Signal()
PASSWORD_refreshed = Signal() PASSWORD_refreshed = Signal()
@@ -780,7 +781,6 @@ class AppConfig(GlobalConfig):
self.init_logger() self.init_logger()
self.check_data() self.check_data()
self.get_stage()
logger.info("程序初始化完成") logger.info("程序初始化完成")
def init_logger(self) -> None: def init_logger(self) -> None:
@@ -810,8 +810,8 @@ class AppConfig(GlobalConfig):
logger.info("日志记录器初始化完成") logger.info("日志记录器初始化完成")
def get_stage(self) -> None: def get_stage(self) -> None:
"""从MAA服务器获取活动关卡信息"""
# 从MAA服务器获取活动关卡信息
network = Network.add_task( network = Network.add_task(
mode="get", mode="get",
url="https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json", url="https://api.maa.plus/MaaAssistantArknights/api/gui/StageActivity.json",

View File

@@ -30,6 +30,7 @@ from PySide6.QtCore import QObject, QThread, QEventLoop
import re import re
import time import time
import requests import requests
import truststore
from pathlib import Path from pathlib import Path
@@ -51,12 +52,21 @@ class NetworkThread(QThread):
self.url = url self.url = url
self.path = path self.path = path
from .config import Config
self.proxies = {
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
}
self.status_code = None self.status_code = None
self.response_json = None self.response_json = None
self.error_message = None self.error_message = None
self.loop = QEventLoop() self.loop = QEventLoop()
truststore.inject_into_ssl()
@logger.catch @logger.catch
def run(self) -> None: def run(self) -> None:
"""运行网络请求线程""" """运行网络请求线程"""
@@ -73,7 +83,7 @@ class NetworkThread(QThread):
for _ in range(self.max_retries): for _ in range(self.max_retries):
try: try:
response = requests.get(url, timeout=self.timeout) response = requests.get(url, timeout=self.timeout, proxies=self.proxies)
self.status_code = response.status_code self.status_code = response.status_code
self.response_json = response.json() self.response_json = response.json()
self.error_message = None self.error_message = None
@@ -92,7 +102,7 @@ class NetworkThread(QThread):
response = None response = None
try: try:
response = requests.get(url, timeout=10) response = requests.get(url, timeout=10, proxies=self.proxies)
if response.status_code == 200: if response.status_code == 200:
with open(path, "wb") as file: with open(path, "wb") as file:
file.write(response.content) file.write(response.content)

View File

@@ -199,7 +199,16 @@ class Notification(QObject):
params = {"title": title, "desp": content, **options} params = {"title": title, "desp": content, **options}
headers = {"Content-Type": "application/json;charset=utf-8"} headers = {"Content-Type": "application/json;charset=utf-8"}
response = requests.post(url, json=params, headers=headers, timeout=10) response = requests.post(
url,
json=params,
headers=headers,
timeout=10,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
)
result = response.json() result = response.json()
if result.get("code") == 0: if result.get("code") == 0:
@@ -244,6 +253,10 @@ class Notification(QObject):
url=webhook_url, url=webhook_url,
json=data, json=data,
timeout=10, timeout=10,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
) )
info = response.json() info = response.json()
break break
@@ -307,7 +320,7 @@ class Notification(QObject):
image_base64 = ImageUtils.get_base64_from_file(str(image_path)) image_base64 = ImageUtils.get_base64_from_file(str(image_path))
image_md5 = ImageUtils.calculate_md5_from_file(str(image_path)) image_md5 = ImageUtils.calculate_md5_from_file(str(image_path))
except Exception as e: except Exception as e:
logger.error(f"图片编码或MD5计算失败{e}") logger.exception(f"图片编码或MD5计算失败{e}")
self.push_info_bar.emit( self.push_info_bar.emit(
"error", "error",
"企业微信群机器人通知推送异常", "企业微信群机器人通知推送异常",
@@ -327,6 +340,10 @@ class Notification(QObject):
url=webhook_url, url=webhook_url,
json=data, json=data,
timeout=10, timeout=10,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
) )
info = response.json() info = response.json()
break break

View File

@@ -40,6 +40,8 @@ import hashlib
import requests import requests
from urllib import parse from urllib import parse
from app.core import Config
def skland_sign_in(token) -> dict: def skland_sign_in(token) -> dict:
"""森空岛签到""" """森空岛签到"""
@@ -137,7 +139,13 @@ def skland_sign_in(token) -> dict:
# 通过grant code换cred和sign_token # 通过grant code换cred和sign_token
def get_cred(grant): def get_cred(grant):
rsp = requests.post( rsp = requests.post(
cred_code_url, json={"code": grant, "kind": 1}, headers=header_login cred_code_url,
json={"code": grant, "kind": 1},
headers=header_login,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
).json() ).json()
if rsp["code"] != 0: if rsp["code"] != 0:
raise Exception(f'获得cred失败{rsp.get("messgae")}') raise Exception(f'获得cred失败{rsp.get("messgae")}')
@@ -151,6 +159,10 @@ def skland_sign_in(token) -> dict:
grant_code_url, grant_code_url,
json={"appCode": app_code, "token": token, "type": 0}, json={"appCode": app_code, "token": token, "type": 0},
headers=header_login, headers=header_login,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
).json() ).json()
if rsp["status"] != 0: if rsp["status"] != 0:
raise Exception( raise Exception(
@@ -172,6 +184,10 @@ def skland_sign_in(token) -> dict:
headers=get_sign_header( headers=get_sign_header(
binding_url, "get", None, copy_header(cred), sign_token binding_url, "get", None, copy_header(cred), sign_token
), ),
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
).json() ).json()
if rsp["code"] != 0: if rsp["code"] != 0:
logger.error(f"森空岛服务 | 请求角色列表出现问题:{rsp['message']}") logger.error(f"森空岛服务 | 请求角色列表出现问题:{rsp['message']}")
@@ -209,6 +225,10 @@ def skland_sign_in(token) -> dict:
sign_url, "post", body, copy_header(cred), sign_token sign_url, "post", body, copy_header(cred), sign_token
), ),
json=body, json=body,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
).json() ).json()
if rsp["code"] != 0: if rsp["code"] != 0:

View File

@@ -30,7 +30,6 @@ import zipfile
import requests import requests
import subprocess import subprocess
import time import time
import psutil
from functools import partial from functools import partial
from pathlib import Path from pathlib import Path
@@ -47,6 +46,7 @@ from PySide6.QtCore import QThread, Signal, QTimer, QEventLoop
from typing import List, Dict, Union from typing import List, Dict, Union
from app.core import Config
from app.services import System from app.services import System
@@ -113,7 +113,14 @@ class DownloadProcess(QThread):
start_time = time.time() start_time = time.time()
response = requests.get( response = requests.get(
self.url, headers=headers, timeout=10, stream=True self.url,
headers=headers,
timeout=10,
stream=True,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
) )
if response.status_code not in [200, 206]: if response.status_code not in [200, 206]:
@@ -332,6 +339,10 @@ class DownloadManager(QDialog):
allow_redirects=True, allow_redirects=True,
timeout=10, timeout=10,
stream=True, stream=True,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
) as response: ) as response:
if response.status_code == 200: if response.status_code == 200:
return response.url return response.url
@@ -339,7 +350,14 @@ class DownloadManager(QDialog):
elif self.config["mode"] == "MirrorChyan": elif self.config["mode"] == "MirrorChyan":
with requests.get( with requests.get(
self.config["url"], allow_redirects=True, timeout=10, stream=True self.config["url"],
allow_redirects=True,
timeout=10,
stream=True,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
) as response: ) as response:
if response.status_code == 200: if response.status_code == 200:
return response.url return response.url
@@ -448,7 +466,14 @@ class DownloadManager(QDialog):
url = self.get_download_url("下载") url = self.get_download_url("下载")
self.downloaded_size_list: List[List[int, bool]] = [] self.downloaded_size_list: List[List[int, bool]] = []
response = requests.head(url, timeout=10) response = requests.head(
url,
timeout=10,
proxies={
"http": Config.get(Config.update_ProxyAddress),
"https": Config.get(Config.update_ProxyAddress),
},
)
self.file_size = int(response.headers.get("content-length", 0)) self.file_size = int(response.headers.get("content-length", 0))
part_size = self.file_size // self.config["thread_numb"] part_size = self.file_size // self.config["thread_numb"]

View File

@@ -361,6 +361,9 @@ class AUTO_MAA(MSFluentWindow):
# 检查密码 # 检查密码
self.setting.check_PASSWORD() self.setting.check_PASSWORD()
# 获取关卡号信息
Config.get_stage()
# 获取主题图像 # 获取主题图像
if Config.get(Config.function_HomeImageMode) == "主题图像": if Config.get(Config.function_HomeImageMode) == "主题图像":
self.home.get_home_image() self.home.get_home_image()

View File

@@ -1164,6 +1164,15 @@ class UpdaterSettingCard(HeaderCardWidget):
configItem=Config.update_ThreadNumb, configItem=Config.update_ThreadNumb,
parent=self, parent=self,
) )
self.card_ProxyAddress = LineEditSettingCard(
icon=FluentIcon.PAGE_RIGHT,
title="网络代理地址",
content="使用网络代理软件时,若出现网络连接问题,请尝试设置代理地址,此设置全局生效",
text="请输入代理地址",
qconfig=Config,
configItem=Config.update_ProxyAddress,
parent=self,
)
self.card_ProxyUrlList = UrlListSettingCard( self.card_ProxyUrlList = UrlListSettingCard(
icon=FluentIcon.SETTING, icon=FluentIcon.SETTING,
title="代理地址列表", title="代理地址列表",
@@ -1196,6 +1205,7 @@ class UpdaterSettingCard(HeaderCardWidget):
Layout.addWidget(self.card_IfAutoUpdate) Layout.addWidget(self.card_IfAutoUpdate)
Layout.addWidget(self.card_UpdateType) Layout.addWidget(self.card_UpdateType)
Layout.addWidget(self.card_ThreadNumb) Layout.addWidget(self.card_ThreadNumb)
Layout.addWidget(self.card_ProxyAddress)
Layout.addWidget(self.card_ProxyUrlList) Layout.addWidget(self.card_ProxyUrlList)
Layout.addWidget(self.card_MirrorChyanCDK) Layout.addWidget(self.card_MirrorChyanCDK)
self.viewLayout.addLayout(Layout) self.viewLayout.addLayout(Layout)

View File

@@ -7,6 +7,7 @@ pywin32==310
keyboard==0.13.5 keyboard==0.13.5
pycryptodome==3.23.0 pycryptodome==3.23.0
certifi==2025.4.26 certifi==2025.4.26
truststore==0.10.1
requests==2.32.4 requests==2.32.4
markdown==3.8.2 markdown==3.8.2
Jinja2==3.1.6 Jinja2==3.1.6

View File

@@ -1,6 +1,11 @@
{ {
"main_version": "4.4.0.5", "main_version": "4.4.0.6",
"version_info": { "version_info": {
"4.4.0.6": {
"修复BUG": [
"信任系统证书,并添加网络代理地址配置项 #50"
]
},
"4.4.0.5": { "4.4.0.5": {
"修复BUG": [ "修复BUG": [
"修复开机自启相关功能" "修复开机自启相关功能"