Helpviewer/SslCertificatesDialog.py

Tue, 14 Dec 2010 09:37:17 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 14 Dec 2010 09:37:17 +0100
changeset 752
2ec6ec7cd381
parent 751
619341e9dbb8
child 753
e19a516f0a97
permissions
-rw-r--r--

Continued implementing the certificate manager.

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

eric ide

mercurial