diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py
index 08342febc6..3bd5f36d47 100644
--- a/src/Mod/AddonManager/AddonManager.py
+++ b/src/Mod/AddonManager/AddonManager.py
@@ -589,6 +589,10 @@ class CommandAddonManager:
pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
self.config.checkUpdates.setChecked(pref.GetBool("AutoCheck",False))
self.config.customRepositories.setPlainText(pref.GetString("CustomRepositories",""))
+ self.config.radioButtonNoProxy.setChecked(pref.GetBool("NoProxyCheck",True))
+ self.config.radioButtonSystemProxy.setChecked(pref.GetBool("SystemProxyCheck",False))
+ self.config.radioButtonUserProxy.setChecked(pref.GetBool("UserProxyCheck",False))
+ self.config.userProxy.setPlainText(pref.GetString("ProxyUrl",""))
# center the dialog over the Addon Manager
self.config.move(self.dialog.frameGeometry().topLeft() + self.dialog.rect().center() - self.config.rect().center())
@@ -599,6 +603,10 @@ class CommandAddonManager:
# OK button has been pressed
pref.SetBool("AutoCheck",self.config.checkUpdates.isChecked())
pref.SetString("CustomRepositories",self.config.customRepositories.toPlainText())
+ pref.SetBool("NoProxyCheck",self.config.radioButtonNoProxy.isChecked())
+ pref.SetBool("SystemProxyCheck",self.config.radioButtonSystemProxy.isChecked())
+ pref.SetBool("UserProxyCheck",self.config.radioButtonUserProxy.isChecked())
+ pref.SetString("ProxyUrl",self.config.userProxy.toPlainText())
def check_updates(addon_name,callback):
diff --git a/src/Mod/AddonManager/AddonManagerOptions.ui b/src/Mod/AddonManager/AddonManagerOptions.ui
index cb88650cd6..709e222fc4 100644
--- a/src/Mod/AddonManager/AddonManagerOptions.ui
+++ b/src/Mod/AddonManager/AddonManagerOptions.ui
@@ -7,7 +7,7 @@
0
0
390
- 183
+ 247
@@ -24,6 +24,9 @@ installed addons will be checked for available updates
Automatically check for updates at start (requires GitPython)
+
+ false
+
-
@@ -41,6 +44,47 @@ sto be scanned for available addons
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Proxy
+
+
+
+ -
+
+
+ No proxy
+
+
+
+ -
+
+
+ User system proxy
+
+
+
+ -
+
+
+ User defined proxy :
+
+
+ true
+
+
+
+ -
+
+
-
@@ -62,12 +106,12 @@ sto be scanned for available addons
accept()
- 248
- 254
+ 257
+ 237
157
- 274
+ 246
@@ -78,12 +122,12 @@ sto be scanned for available addons
reject()
- 316
- 260
+ 325
+ 237
286
- 274
+ 246
diff --git a/src/Mod/AddonManager/addonmanager_macro.py b/src/Mod/AddonManager/addonmanager_macro.py
index c23e5e5319..e7039ff500 100644
--- a/src/Mod/AddonManager/addonmanager_macro.py
+++ b/src/Mod/AddonManager/addonmanager_macro.py
@@ -103,6 +103,9 @@ class Macro(object):
except:
print("AddonManager: Debug: unable to open URL",url)
return
+ if u is None :
+ print("AddonManager: Debug: connection is lost (proxy setting changed?)",url)
+ return
p = u.read()
if sys.version_info.major >= 3 and isinstance(p, bytes):
p = p.decode('utf-8')
diff --git a/src/Mod/AddonManager/addonmanager_utilities.py b/src/Mod/AddonManager/addonmanager_utilities.py
index 037e22124b..d428478f11 100644
--- a/src/Mod/AddonManager/addonmanager_utilities.py
+++ b/src/Mod/AddonManager/addonmanager_utilities.py
@@ -40,12 +40,12 @@ except ImportError:
pass
else:
try:
- ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
+ ssl_ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
except AttributeError:
pass
+
-
-
+
def translate(context, text, disambig=None):
"Main translation function"
@@ -90,21 +90,38 @@ def urlopen(url):
timeout = 5
if sys.version_info.major < 3:
- import urllib2
+ import urllib2
else:
import urllib.request as urllib2
+
+ # Proxy an ssl configuration
+ pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons")
+ if pref.GetBool("NoProxyCheck",True):
+ proxies = {}
+ else:
+ if pref.GetBool("SystemProxyCheck",False):
+ proxy = urllib2.getproxies()
+ proxies = {"http": proxy.get('http'),"https": proxy.get('http')}
+ elif pref.GetBool("UserProxyCheck",False):
+ proxy = pref.GetString("ProxyUrl","")
+ proxies = {"http": proxy, "https": proxy}
+ if ssl_ctx:
+ handler = urllib2.HTTPSHandler(context=ssl_ctx)
+ else:
+ handler = {}
+ proxy_support = urllib2.ProxyHandler(proxies)
+ opener = urllib2.build_opener(proxy_support, handler)
+ urllib2.install_opener(opener)
+
+ # Url opening
try:
- if ssl_ctx:
- u = urllib2.urlopen(url, context=ssl_ctx, timeout=timeout)
- else:
- u = urllib2.urlopen(url, timeout=timeout)
+ u = urllib2.urlopen(url, timeout=timeout)
except:
return None
else:
return u
-
def getserver(url):
"""returns the server part of an url"""