Helpviewer/Network/NetworkAccessManager.py

changeset 748
eb7e73107d27
parent 721
9dd401431fcc
child 753
e19a516f0a97
--- a/Helpviewer/Network/NetworkAccessManager.py	Sat Dec 11 19:26:19 2010 +0100
+++ b/Helpviewer/Network/NetworkAccessManager.py	Sun Dec 12 17:22:24 2010 +0100
@@ -74,10 +74,12 @@
         if SSL_AVAILABLE:
             sslCfg = QSslConfiguration.defaultConfiguration()
             caList = sslCfg.caCertificates()
-            caNew = QSslCertificate.fromData(Preferences.toByteArray(
-                Preferences.Prefs.settings.value("Help/CaCertificates")))
-            for cert in caNew:
-                caList.append(cert)
+            certificateDict = Preferences.toDict(
+                    Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
+            for server in certificateDict:
+                for cert in QSslCertificate.fromData(certificateDict[server]):
+                    if cert not in caList:
+                        caList.append(cert)
             sslCfg.setCaCertificates(caList)
             QSslConfiguration.setDefaultConfiguration(sslCfg)
             
@@ -193,19 +195,28 @@
         @param reply reference to the reply object (QNetworkReply)
         @param errors list of SSL errors (list of QSslError)
         """
-        caMerge = QSslCertificate.fromData(Preferences.toByteArray(
-            Preferences.Prefs.settings.value("Help/CaCertificates")))
+        caMerge = {}
+        certificateDict = Preferences.toDict(
+                Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
+        for server in certificateDict:
+            caMerge[server] = QSslCertificate.fromData(certificateDict[server])
         caNew = []
         
         errorStrings = []
+        url = reply.url()
+        server = url.host()
+        if url.port() != -1:
+            server += ":{0:d}".format(url.port())
         for err in errors:
             if err.error() == QSslError.NoError:
                 continue
-            if err.certificate() in caMerge:
+            if server in caMerge and err.certificate() in caMerge[server]:
                 continue
             errorStrings.append(err.errorString())
             if not err.certificate().isNull():
-                caNew.append(err.certificate())
+                cert = err.certificate()
+                if cert not in caNew:
+                    caNew.append(cert)
         if not errorStrings:
             reply.ignoreSslErrors()
             return
@@ -230,8 +241,10 @@
                                 """Do you want to accept all these certificates?</p>""")\
                         .format("".join(certinfos)))
                 if ret:
+                    if server not in caMerge:
+                        caMerge[server] = []
                     for cert in caNew:
-                        caMerge.append(cert)
+                        caMerge[server].append(cert)
                     
                     sslCfg = QSslConfiguration.defaultConfiguration()
                     caList = sslCfg.caCertificates()
@@ -241,12 +254,22 @@
                     QSslConfiguration.setDefaultConfiguration(sslCfg)
                     reply.setSslConfiguration(sslCfg)
                     
-                    pems = QByteArray()
-                    for cert in caMerge:
-                        pems.append(cert.toPem() + '\n')
-                    Preferences.Prefs.settings.setValue("Help/CaCertificates", pems)
+                    certificateDict = {}
+                    for server in caMerge:
+                        pems = QByteArray()
+                        for cert in caMerge[server]:
+                            pems.append(cert.toPem() + '\n')
+                        certificateDict[server] = pems
+                    Preferences.Prefs.settings.setValue("Help/CaCertificatesDict", 
+                        certificateDict)
+                else:
+                    reply.abort()
+                    return
             
             reply.ignoreSslErrors()
+        
+        else:
+            reply.abort()
     
     def __certToString(self, cert):
         """

eric ide

mercurial