Skip to content

Commit

Permalink
Addon Manager: Improve proxy URL parsing & enhanced the error messagi…
Browse files Browse the repository at this point in the history
  • Loading branch information
ovo-Tim authored Jan 15, 2025
1 parent 4cb0175 commit 201eca4
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions src/Mod/AddonManager/NetworkManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
import tempfile
import sys
from typing import Dict, List, Optional
from urllib.parse import urlparse

try:
import FreeCAD
Expand Down Expand Up @@ -217,20 +218,32 @@ def _setup_proxy(self):
if proxy and proxy[0]:
self.QNAM.setProxy(proxy[0]) # This may still be QNetworkProxy.NoProxy
elif userProxyCheck:
host, _, port_string = proxy_string.rpartition(":")
try:
port = 0 if not port_string else int(port_string)
parsed_url = urlparse(proxy_string)
host = parsed_url.hostname
port = parsed_url.port
scheme = (
"http" if parsed_url.scheme == "https" else parsed_url.scheme
) # There seems no https type: doc.qt.io/qt-6/qnetworkproxy.html#ProxyType-enum
except ValueError:
FreeCAD.Console.PrintError(
translate(
"AddonsInstaller",
"Failed to convert the specified proxy port '{}' to a port number",
).format(port_string)
"Failed to parse proxy URL '{}'",
).format(proxy_string)
+ "\n"
)
port = 0
# For now assume an HttpProxy, but eventually this should be a parameter
proxy = QtNetwork.QNetworkProxy(QtNetwork.QNetworkProxy.HttpProxy, host, port)
return

FreeCAD.Console.PrintMessage(f"Using proxy {scheme}://{host}:{port} \n")
if scheme == "http":
_scheme = QtNetwork.QNetworkProxy.HttpProxy
elif scheme == "socks5":
_scheme = QtNetwork.QNetworkProxy.Socks5Proxy
else:
FreeCAD.Console.PrintWarning(f"Unknown proxy scheme '{scheme}', using http. \n")
_scheme = QtNetwork.QNetworkProxy.HttpProxy
proxy = QtNetwork.QNetworkProxy(_scheme, host, port)
self.QNAM.setProxy(proxy)

def _setup_proxy_freecad(self):
Expand Down Expand Up @@ -602,6 +615,7 @@ def __reply_finished(self) -> None:
data = reply.readAll()
self.completed.emit(index, response_code, data)
else:
FreeCAD.Console.PrintWarning(f"Request failed: {reply.error()} \n")
if index in self.monitored_connections:
self.progress_complete.emit(index, response_code, "")
else:
Expand Down

0 comments on commit 201eca4

Please sign in to comment.