Helpviewer/Network/NetworkAccessManager.py

changeset 748
eb7e73107d27
parent 721
9dd401431fcc
child 753
e19a516f0a97
equal deleted inserted replaced
747:48f13a14f754 748:eb7e73107d27
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

eric ide

mercurial