Helpviewer/SslCertificatesDialog.py

Sun, 19 Dec 2010 13:20:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 19 Dec 2010 13:20:52 +0100
changeset 757
d3daf1d8f058
parent 753
e19a516f0a97
child 762
48190a225699
permissions
-rw-r--r--

Fixed the handling of 'javascript' schemes in the web browser and enhanced the download manager a bit.

750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show and edit all certificates.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
10 from PyQt4.QtCore import pyqtSlot, Qt
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt4.QtGui import QDialog, QTreeWidgetItem
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 try:
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
13 from PyQt4.QtNetwork import QSslCertificate, QSslSocket, QSslConfiguration
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 except ImportError:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 pass
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
17 from E5Gui import E5MessageBox
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
18
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from .Ui_SslCertificatesDialog import Ui_SslCertificatesDialog
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from .SslInfoDialog import SslInfoDialog
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 import Preferences
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
24 import Utilities
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 class SslCertificatesDialog(QDialog, Ui_SslCertificatesDialog):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Class implementing a dialog to show and edit all certificates.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 CertRole = Qt.UserRole + 1
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 def __init__(self, parent = None):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 Constructor
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param parent reference to the parent widget (QWidget)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 QDialog.__init__(self, parent)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.setupUi(self)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__populateServerCertificatesTree()
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
42 self.__populateCaCertificatesTree()
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 def __populateServerCertificatesTree(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 Private slot to populate the server certificates tree.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 certificateDict = Preferences.toDict(
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 for server in certificateDict:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 for cert in QSslCertificate.fromData(certificateDict[server]):
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
52 self.__createServerCertificateEntry(server, cert)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.serversCertificatesTree.expandAll()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 for i in range(self.serversCertificatesTree.columnCount()):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.serversCertificatesTree.resizeColumnToContents(i)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
58 def __createServerCertificateEntry(self, server, cert):
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
60 Private method to create a server certificate entry.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @param server server name of the certificate (string)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @param cert certificate to insert (QSslCertificate)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 # step 1: extract the info to be shown
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
66 organisation = Utilities.decodeString(
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
67 cert.subjectInfo(QSslCertificate.Organization))
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 if organisation is None or organisation == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 organisation = self.trUtf8("(Unknown)")
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
70 commonName = Utilities.decodeString(
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
71 cert.subjectInfo(QSslCertificate.CommonName))
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 if commonName is None or commonName == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 commonName = self.trUtf8("(Unknown common name)")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 # step 2: create the entry
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
77 items = self.serversCertificatesTree.findItems(organisation,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
78 Qt.MatchFixedString | Qt.MatchCaseSensitive)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 if len(items) == 0:
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
80 parent = QTreeWidgetItem(self.serversCertificatesTree, [organisation])
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 else:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 parent = items[0]
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 itm = QTreeWidgetItem(parent, [commonName, server, expiryDate])
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 itm.setData(0, self.CertRole, cert)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 def on_serversCertificatesTree_currentItemChanged(self, current, previous):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
90 Private slot handling a change of the current item in the
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
91 server certificates list.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @param current new current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 @param previous previous current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 enable = current is not None and current.parent() is not None
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.serversViewButton.setEnabled(enable)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.serversDeleteButton.setEnabled(enable)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def on_serversViewButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
103 Private slot to show data of the selected server certificate.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 cert = self.serversCertificatesTree.currentItem().data(0, self.CertRole)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 dlg = SslInfoDialog(cert, self)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 dlg.exec_()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def on_serversDeleteButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
112 Private slot to delete the selected server certificate.
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
113 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
114 itm = self.serversCertificatesTree.currentItem()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
115 res = E5MessageBox.yesNo(self,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
116 self.trUtf8("Delete Server Certificate"),
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
117 self.trUtf8("""<p>Shall the server certificate really be deleted?</p>"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
118 """<p>{0}</p>"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
119 """<p>If the server certificate is deleted, the normal security"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
120 """ checks will be reinstantiated and the server has to"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
121 """ present a valid certificate.</p>""")\
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
122 .format(itm.text(0)))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
123 if res:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
124 server = itm.text(1)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
125
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
126 # delete the selected entry and it's parent entry, if it was the only one
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
127 parent = itm.parent()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
128 parent.takeChild(parent.indexOfChild(itm))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
129 if parent.childCount() == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
130 self.serversCertificatesTree.takeTopLevelItem(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
131 self.serversCertificatesTree.indexOfTopLevelItem(parent))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
132
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
133 # delete the certificate from the user certificate store
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
134 certificateDict = Preferences.toDict(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
135 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
136 del certificateDict[server]
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
137 Preferences.Prefs.settings.setValue("Help/CaCertificatesDict",
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
138 certificateDict)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
139
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
140 # delete the certificate from the default certificates
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
141 caNew = []
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
142 for topLevelIndex in range(self.serversCertificatesTree.topLevelItemCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
143 parent = self.serversCertificatesTree.topLevelItem(topLevelIndex)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
144 for childIndex in range(parent.childCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
145 cert = parent.child(childIndex).data(0, self.CertRole)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
146 if cert not in caNew:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
147 caNew.append(cert)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
148 caList = QSslSocket.systemCaCertificates()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
149 caList.extend(caNew)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
150 sslCfg = QSslConfiguration.defaultConfiguration()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
151 sslCfg.setCaCertificates(caList)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
152 QSslConfiguration.setDefaultConfiguration(sslCfg)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
153
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
154 def __populateCaCertificatesTree(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
155 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
156 Private slot to populate the CA certificates tree.
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
157 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
158 for cert in QSslSocket.systemCaCertificates():
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
159 self.__createCaCertificateEntry(cert)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
160
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
161 self.caCertificatesTree.expandAll()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
162 for i in range(self.caCertificatesTree.columnCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
163 self.caCertificatesTree.resizeColumnToContents(i)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
164 self.caCertificatesTree.sortItems(0, Qt.AscendingOrder)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
165
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
166 def __createCaCertificateEntry(self, cert):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
167 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
168 Private method to create a CA certificate entry.
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
169
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
170 @param cert certificate to insert (QSslCertificate)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
171 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
172 # step 1: extract the info to be shown
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
173 organisation = Utilities.decodeString(
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
174 cert.subjectInfo(QSslCertificate.Organization))
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
175 if organisation is None or organisation == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
176 organisation = self.trUtf8("(Unknown)")
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
177 commonName = Utilities.decodeString(
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
178 cert.subjectInfo(QSslCertificate.CommonName))
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
179 if commonName is None or commonName == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
180 commonName = self.trUtf8("(Unknown common name)")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
181 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
182
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
183 # step 2: create the entry
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
184 items = self.caCertificatesTree.findItems(organisation,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
185 Qt.MatchFixedString | Qt.MatchCaseSensitive)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
186 if len(items) == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
187 parent = QTreeWidgetItem(self.caCertificatesTree, [organisation])
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
188 else:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
189 parent = items[0]
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
190
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
191 itm = QTreeWidgetItem(parent, [commonName, expiryDate])
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
192 itm.setData(0, self.CertRole, cert)
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
193
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
194 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
195 def on_caCertificatesTree_currentItemChanged(self, current, previous):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
196 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
197 Private slot handling a change of the current item
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
198 in the CA certificates list.
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
199
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
200 @param current new current item (QTreeWidgetItem)
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
201 @param previous previous current item (QTreeWidgetItem)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
203 enable = current is not None and current.parent() is not None
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
204 self.caViewButton.setEnabled(enable)
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
205
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
206 @pyqtSlot()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
207 def on_caViewButton_clicked(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
208 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
209 Private slot to show data of the selected CA certificate.
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
210 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
211 cert = self.caCertificatesTree.currentItem().data(0, self.CertRole)
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
212 dlg = SslInfoDialog(cert, self)
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
213 dlg.exec_()

eric ide

mercurial