Helpviewer/SslCertificatesDialog.py

Sun, 12 Dec 2010 19:44:20 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 12 Dec 2010 19:44:20 +0100
changeset 750
1b6ac093751c
child 751
619341e9dbb8
permissions
-rw-r--r--

Started 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:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt4.QtNetwork import QSslCertificate
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
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from .Ui_SslCertificatesDialog import Ui_SslCertificatesDialog
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from .SslInfoDialog import SslInfoDialog
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 import Preferences
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 class SslCertificatesDialog(QDialog, Ui_SslCertificatesDialog):
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 implementing a dialog to show and edit all certificates.
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 CertRole = Qt.UserRole + 1
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 def __init__(self, parent = None):
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 Constructor
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 @param parent reference to the parent widget (QWidget)
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 QDialog.__init__(self, parent)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 self.setupUi(self)
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 self.__populateServerCertificatesTree()
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 def __populateServerCertificatesTree(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Private slot to populate the server certificates tree.
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 certificateDict = Preferences.toDict(
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 for server in certificateDict:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 for cert in QSslCertificate.fromData(certificateDict[server]):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.__createCertificateEntry(self.serversCertificatesTree, server, cert)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.serversCertificatesTree.expandAll()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 for i in range(self.serversCertificatesTree.columnCount()):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.serversCertificatesTree.resizeColumnToContents(i)
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 def __createCertificateEntry(self, tree, server, cert):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Private method to create a certificate entry.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @param tree reference to the tree to insert the certificate (QTreeWidget)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @param server server name of the certificate (string)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 @param cert certificate to insert (QSslCertificate)
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 # step 1: extract the info to be shown
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 organisation = cert.subjectInfo(QSslCertificate.Organization)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 if organisation is None or organisation == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 organisation = self.trUtf8("(Unknown)")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 commonName = cert.subjectInfo(QSslCertificate.CommonName)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 if commonName is None or commonName == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 commonName = self.trUtf8("(Unknown common name)")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 # step 2: create the entry
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 items = tree.findItems(organisation, Qt.MatchFixedString | Qt.MatchCaseSensitive)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 if len(items) == 0:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 parent = QTreeWidgetItem(tree, [organisation])
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 else:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 parent = items[0]
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 itm = QTreeWidgetItem(parent, [commonName, server, expiryDate])
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 itm.setData(0, self.CertRole, cert)
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 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 def on_serversCertificatesTree_currentItemChanged(self, current, previous):
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 Private slot handling a change of the current item.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @param current new current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @param previous previous current item (QTreeWidgetItem)
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 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
90 self.serversViewButton.setEnabled(enable)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.serversDeleteButton.setEnabled(enable)
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 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def on_serversViewButton_clicked(self):
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 Private slot to show data of the selected certificate
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 cert = self.serversCertificatesTree.currentItem().data(0, self.CertRole)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 dlg = SslInfoDialog(cert, self)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 dlg.exec_()
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 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 def on_serversDeleteButton_clicked(self):
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 Slot documentation goes here.
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 # TODO: not implemented yet
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 raise NotImplementedError

eric ide

mercurial