Helpviewer/SslCertificatesDialog.py

Mon, 13 Dec 2010 20:10:28 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 13 Dec 2010 20:10:28 +0100
changeset 751
619341e9dbb8
parent 750
1b6ac093751c
child 752
2ec6ec7cd381
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
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt4.QtCore import pyqtSlot, Qt
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 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 Private method to create a certificate entry.
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 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 Private slot handling a change of the current item.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @param current new current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 @param previous previous current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 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
93 self.serversViewButton.setEnabled(enable)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.serversDeleteButton.setEnabled(enable)
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 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 def on_serversViewButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 """
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
99 Private slot to show data of the selected certificate.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 cert = self.serversCertificatesTree.currentItem().data(0, self.CertRole)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 dlg = SslInfoDialog(cert, self)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 dlg.exec_()
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 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 def on_serversDeleteButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
108 Private slot to delete the selected certificate.
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
109 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
110 itm = self.serversCertificatesTree.currentItem()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
111 res = E5MessageBox.yesNo(self,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
112 self.trUtf8("Delete Server Certificate"),
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
113 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
114 """<p>{0}</p>"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
115 """<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
116 """ 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
117 """ present a valid certificate.</p>""")\
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
118 .format(itm.text(0)))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
119 if res:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
120 server = itm.text(1)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
121
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
122 # 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
123 parent = itm.parent()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
124 parent.takeChild(parent.indexOfChild(itm))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
125 if parent.childCount() == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
126 self.serversCertificatesTree.takeTopLevelItem(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
127 self.serversCertificatesTree.indexOfTopLevelItem(parent))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
128
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
129 # delete the certificate from the user certificate store
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
130 certificateDict = Preferences.toDict(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
131 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
132 del certificateDict[server]
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
133 Preferences.Prefs.settings.setValue("Help/CaCertificatesDict",
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
134 certificateDict)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
135
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
136 # delete the certificate from the default certificates
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
137 caNew = []
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
138 for topLevelIndex in range(self.serversCertificatesTree.topLevelItemCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
139 parent = self.serversCertificatesTree.topLevelItem(topLevelIndex)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
140 for childIndex in range(parent.childCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
141 cert = parent.child(childIndex).data(0, self.CertRole)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
142 if cert not in caNew:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
143 caNew.append(cert)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
144 caList = QSslSocket.systemCaCertificates()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
145 caList.extend(caNew)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
146 sslCfg = QSslConfiguration.defaultConfiguration()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
147 sslCfg.setCaCertificates(caList)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
148 QSslConfiguration.setDefaultConfiguration(sslCfg)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
149
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
150 def __populateCaCertificatesTree(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
151 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
152 Private slot to populate the CA certificates tree.
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 for cert in QSslSocket.systemCaCertificates():
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
155 self.__createCaCertificateEntry(cert)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
156
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
157 self.caCertificatesTree.expandAll()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
158 for i in range(self.caCertificatesTree.columnCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
159 self.caCertificatesTree.resizeColumnToContents(i)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
160 self.caCertificatesTree.sortItems(0, Qt.AscendingOrder)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
161
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
162 def __createCaCertificateEntry(self, cert):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
163 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
164 Private method to create a certificate entry.
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 @param cert certificate to insert (QSslCertificate)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
167 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
168 # step 1: extract the info to be shown
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
169 organisation = cert.subjectInfo(QSslCertificate.Organization)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
170 if organisation is None or organisation == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
171 organisation = self.trUtf8("(Unknown)")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
172 commonName = cert.subjectInfo(QSslCertificate.CommonName)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
173 if commonName is None or commonName == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
174 commonName = self.trUtf8("(Unknown common name)")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
175 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
176
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
177 # step 2: create the entry
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
178 items = self.caCertificatesTree.findItems(organisation,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
179 Qt.MatchFixedString | Qt.MatchCaseSensitive)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
180 if len(items) == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
181 parent = QTreeWidgetItem(self.caCertificatesTree, [organisation])
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
182 else:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
183 parent = items[0]
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
184
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
185 QTreeWidgetItem(parent, [commonName, expiryDate])
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
186
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
187 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
188 def on_caCertificatesTree_currentItemChanged(self, current, previous):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
189 """
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 Slot documentation goes here.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 # TODO: not implemented yet
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 raise NotImplementedError
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
194
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
195 @pyqtSlot()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
196 def on_caViewButton_clicked(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
197 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
198 Slot documentation goes here.
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
199 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
200 # TODO: not implemented yet
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
201 raise NotImplementedError

eric ide

mercurial