72 self.languagesChanged() |
72 self.languagesChanged() |
73 |
73 |
74 if SSL_AVAILABLE: |
74 if SSL_AVAILABLE: |
75 sslCfg = QSslConfiguration.defaultConfiguration() |
75 sslCfg = QSslConfiguration.defaultConfiguration() |
76 caList = sslCfg.caCertificates() |
76 caList = sslCfg.caCertificates() |
77 caNew = QSslCertificate.fromData(Preferences.toByteArray( |
77 certificateDict = Preferences.toDict( |
78 Preferences.Prefs.settings.value("Help/CaCertificates"))) |
78 Preferences.Prefs.settings.value("Help/CaCertificatesDict")) |
79 for cert in caNew: |
79 for server in certificateDict: |
80 caList.append(cert) |
80 for cert in QSslCertificate.fromData(certificateDict[server]): |
|
81 if cert not in caList: |
|
82 caList.append(cert) |
81 sslCfg.setCaCertificates(caList) |
83 sslCfg.setCaCertificates(caList) |
82 QSslConfiguration.setDefaultConfiguration(sslCfg) |
84 QSslConfiguration.setDefaultConfiguration(sslCfg) |
83 |
85 |
84 self.sslErrors.connect(self.__sslErrors) |
86 self.sslErrors.connect(self.__sslErrors) |
85 |
87 |
191 Private slot to handle SSL errors. |
193 Private slot to handle SSL errors. |
192 |
194 |
193 @param reply reference to the reply object (QNetworkReply) |
195 @param reply reference to the reply object (QNetworkReply) |
194 @param errors list of SSL errors (list of QSslError) |
196 @param errors list of SSL errors (list of QSslError) |
195 """ |
197 """ |
196 caMerge = QSslCertificate.fromData(Preferences.toByteArray( |
198 caMerge = {} |
197 Preferences.Prefs.settings.value("Help/CaCertificates"))) |
199 certificateDict = Preferences.toDict( |
|
200 Preferences.Prefs.settings.value("Help/CaCertificatesDict")) |
|
201 for server in certificateDict: |
|
202 caMerge[server] = QSslCertificate.fromData(certificateDict[server]) |
198 caNew = [] |
203 caNew = [] |
199 |
204 |
200 errorStrings = [] |
205 errorStrings = [] |
|
206 url = reply.url() |
|
207 server = url.host() |
|
208 if url.port() != -1: |
|
209 server += ":{0:d}".format(url.port()) |
201 for err in errors: |
210 for err in errors: |
202 if err.error() == QSslError.NoError: |
211 if err.error() == QSslError.NoError: |
203 continue |
212 continue |
204 if err.certificate() in caMerge: |
213 if server in caMerge and err.certificate() in caMerge[server]: |
205 continue |
214 continue |
206 errorStrings.append(err.errorString()) |
215 errorStrings.append(err.errorString()) |
207 if not err.certificate().isNull(): |
216 if not err.certificate().isNull(): |
208 caNew.append(err.certificate()) |
217 cert = err.certificate() |
|
218 if cert not in caNew: |
|
219 caNew.append(cert) |
209 if not errorStrings: |
220 if not errorStrings: |
210 reply.ignoreSslErrors() |
221 reply.ignoreSslErrors() |
211 return |
222 return |
212 |
223 |
213 errorString = '.</li><li>'.join(errorStrings) |
224 errorString = '.</li><li>'.join(errorStrings) |
228 self.trUtf8("Certificates"), |
239 self.trUtf8("Certificates"), |
229 self.trUtf8("""<p>Certificates:<br/>{0}<br/>""" |
240 self.trUtf8("""<p>Certificates:<br/>{0}<br/>""" |
230 """Do you want to accept all these certificates?</p>""")\ |
241 """Do you want to accept all these certificates?</p>""")\ |
231 .format("".join(certinfos))) |
242 .format("".join(certinfos))) |
232 if ret: |
243 if ret: |
|
244 if server not in caMerge: |
|
245 caMerge[server] = [] |
233 for cert in caNew: |
246 for cert in caNew: |
234 caMerge.append(cert) |
247 caMerge[server].append(cert) |
235 |
248 |
236 sslCfg = QSslConfiguration.defaultConfiguration() |
249 sslCfg = QSslConfiguration.defaultConfiguration() |
237 caList = sslCfg.caCertificates() |
250 caList = sslCfg.caCertificates() |
238 for cert in caNew: |
251 for cert in caNew: |
239 caList.append(cert) |
252 caList.append(cert) |
240 sslCfg.setCaCertificates(caList) |
253 sslCfg.setCaCertificates(caList) |
241 QSslConfiguration.setDefaultConfiguration(sslCfg) |
254 QSslConfiguration.setDefaultConfiguration(sslCfg) |
242 reply.setSslConfiguration(sslCfg) |
255 reply.setSslConfiguration(sslCfg) |
243 |
256 |
244 pems = QByteArray() |
257 certificateDict = {} |
245 for cert in caMerge: |
258 for server in caMerge: |
246 pems.append(cert.toPem() + '\n') |
259 pems = QByteArray() |
247 Preferences.Prefs.settings.setValue("Help/CaCertificates", pems) |
260 for cert in caMerge[server]: |
|
261 pems.append(cert.toPem() + '\n') |
|
262 certificateDict[server] = pems |
|
263 Preferences.Prefs.settings.setValue("Help/CaCertificatesDict", |
|
264 certificateDict) |
|
265 else: |
|
266 reply.abort() |
|
267 return |
248 |
268 |
249 reply.ignoreSslErrors() |
269 reply.ignoreSslErrors() |
|
270 |
|
271 else: |
|
272 reply.abort() |
250 |
273 |
251 def __certToString(self, cert): |
274 def __certToString(self, cert): |
252 """ |
275 """ |
253 Private method to convert a certificate to a formatted string. |
276 Private method to convert a certificate to a formatted string. |
254 |
277 |