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) |
|