E5Network/E5NetworkProxyFactory.py

changeset 289
baf4c1354c6a
parent 286
652f5159f1c3
child 317
f6b0163a21be
equal deleted inserted replaced
288:a4e81ad85e82 289:baf4c1354c6a
15 from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery 15 from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery
16 16
17 from UI.AuthenticationDialog import AuthenticationDialog 17 from UI.AuthenticationDialog import AuthenticationDialog
18 18
19 import Preferences 19 import Preferences
20
21 def schemeFromProxyType(proxyType):
22 """
23 Module function to determine the scheme name from the proxy type.
24
25 @param proxyType type of the proxy (QNetworkProxy.ProxyType)
26 @return scheme (string, one of Http, Https, Ftp)
27 """
28 scheme = ""
29 if proxyType == QNetworkProxy.HttpProxy:
30 scheme = "Http"
31 elif proxyType == QNetworkProxy.HttpCachingProxy:
32 scheme = "Https"
33 elif proxyType == QNetworkProxy.FtpCachingProxy:
34 scheme = "Ftp"
35 elif proxyType == QNetworkProxy.NoProxy:
36 scheme = "NoProxy"
37 return scheme
38
39 def proxyAuthenticationRequired(proxy, auth):
40 """
41 Module slot to handle a proxy authentication request.
42
43 @param proxy reference to the proxy object (QNetworkProxy)
44 @param auth reference to the authenticator object (QAuthenticator)
45 """
46 info = QCoreApplication.translate("E5NetworkProxyFactory",
47 "<b>Connect to proxy '{0}' using:</b>")\
48 .format(Qt.escape(proxy.hostName()))
49
50 dlg = AuthenticationDialog(info, proxy.user(), True)
51 if dlg.exec_() == QDialog.Accepted:
52 username, password = dlg.getData()
53 auth.setUser(username)
54 auth.setPassword(password)
55 if dlg.shallSave():
56 scheme = schemeFromProxyType(proxy.type())
57 if scheme and scheme != "NoProxy":
58 Preferences.setUI("ProxyUser/{0}".format(scheme), username)
59 Preferences.setUI("ProxyPassword/{0}".format(scheme), password)
60 proxy.setUser(username)
61 proxy.setPassword(password)
20 62
21 class E5NetworkProxyFactory(QNetworkProxyFactory): 63 class E5NetworkProxyFactory(QNetworkProxyFactory):
22 """ 64 """
23 Class implementing a network proxy factory. 65 Class implementing a network proxy factory.
24 """ 66 """
49 for name, value in os.environ.items(): 91 for name, value in os.environ.items():
50 name = name.lower() 92 name = name.lower()
51 if value and name[-6:] == '_proxy' and \ 93 if value and name[-6:] == '_proxy' and \
52 name[:-6] == query.protocolTag().lower(): 94 name[:-6] == query.protocolTag().lower():
53 url = QUrl(value) 95 url = QUrl(value)
54 if url.scheme() in ["http", "https"]: 96 if url.scheme() == "http":
55 proxyType = QNetworkProxy.HttpProxy 97 proxyType = QNetworkProxy.HttpProxy
98 elif url.scheme() == "https":
99 proxyType = QNetworkProxy.HttpCachingProxy
100 elif url.scheme() == "ftp":
101 proxyType = QNetworkProxy.FtpCachingProxy
56 else: 102 else:
57 proxyType = QNetworkProxy.FtpCachingProxy 103 proxyType = QNetworkProxy.HttpProxy
58 proxy = QNetworkProxy(proxyType, url.host(), url.port(), 104 proxy = QNetworkProxy(proxyType, url.host(), url.port(),
59 url.userName(), url.password()) 105 url.userName(), url.password())
60 proxyList = [proxy] 106 proxyList = [proxy]
61 break 107 break
62 proxyList[0].setUser(Preferences.getUI("ProxyUser/Http")) 108 scheme = schemeFromProxyType(proxyList[0].type())
63 proxyList[0].setPassword(Preferences.getUI("ProxyPassword/Http")) 109 if scheme == "":
110 scheme = "Http"
111 if scheme != "NoProxy":
112 proxyList[0].setUser(
113 Preferences.getUI("ProxyUser/{0}".format(scheme)))
114 proxyList[0].setPassword(
115 Preferences.getUI("ProxyPassword/{0}".format(scheme)))
64 return proxyList 116 return proxyList
65 else: 117 else:
66 host = Preferences.getUI("ProxyHost/Http") 118 if Preferences.getUI("UseHttpProxyForAll"):
119 protocol = "Http"
120 else:
121 protocol = query.protocolTag().capitalize()
122 host = Preferences.getUI("ProxyHost/{0}".format(protocol))
67 if not host: 123 if not host:
68 QMessageBox.critical(None, 124 QMessageBox.critical(None,
69 self.trUtf8("Proxy Configuration Error"), 125 QCoreApplication.translate("E5NetworkProxyFactory",
70 self.trUtf8("""Proxy usage was activated""" 126 "Proxy Configuration Error"),
71 """ but no proxy host configured.""")) 127 QCoreApplication.translate("E5NetworkProxyFactory",
128 """Proxy usage was activated"""
129 """ but no proxy host for protocol"""
130 """ '{0}' configured.""").format(protocol))
72 return [QNetworkProxy(QNetworkProxy.DefaultProxy)] 131 return [QNetworkProxy(QNetworkProxy.DefaultProxy)]
73 else: 132 else:
74 proxy = QNetworkProxy(QNetworkProxy.HttpProxy, host, 133 if protocol == "Http":
75 Preferences.getUI("ProxyPort/Http"), 134 proxy = QNetworkProxy(QNetworkProxy.HttpProxy, host,
76 Preferences.getUI("ProxyUser/Http"), 135 Preferences.getUI("ProxyPort/Http"),
77 Preferences.getUI("ProxyPassword/Http")) 136 Preferences.getUI("ProxyUser/Http"),
137 Preferences.getUI("ProxyPassword/Http"))
138 elif protocol == "Https":
139 proxy = QNetworkProxy(QNetworkProxy.HttpCachingProxy, host,
140 Preferences.getUI("ProxyPort/Https"),
141 Preferences.getUI("ProxyUser/Https"),
142 Preferences.getUI("ProxyPassword/Https"))
143 elif protocol == "Ftp":
144 proxy = QNetworkProxy(QNetworkProxy.FtpCachingProxy, host,
145 Preferences.getUI("ProxyPort/Ftp"),
146 Preferences.getUI("ProxyUser/Ftp"),
147 Preferences.getUI("ProxyPassword/Ftp"))
148 else:
149 proxy = QNetworkProxy(QNetworkProxy.DefaultProxy)
78 return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)] 150 return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)]
79 else: 151 else:
80 return [QNetworkProxy(QNetworkProxy.NoProxy)] 152 return [QNetworkProxy(QNetworkProxy.NoProxy)]
81
82 def proxyAuthenticationRequired(proxy, auth):
83 """
84 Module slot to handle a proxy authentication request.
85
86 @param proxy reference to the proxy object (QNetworkProxy)
87 @param auth reference to the authenticator object (QAuthenticator)
88 """
89 info = QCoreApplication.translate("E5NetworkProxyFactory", "<b>Connect to proxy '{0}' using:</b>")\
90 .format(Qt.escape(proxy.hostName()))
91
92 dlg = AuthenticationDialog(info, proxy.user(), True)
93 if dlg.exec_() == QDialog.Accepted:
94 username, password = dlg.getData()
95 auth.setUser(username)
96 auth.setPassword(password)
97 if dlg.shallSave():
98 Preferences.setUI("ProxyUser/Http", username)
99 Preferences.setUI("ProxyPassword/Http", password)
100 proxy.setUser(username)
101 proxy.setPassword(password)

eric ide

mercurial