Helpviewer/SslCertificatesDialog.py

Fri, 25 Jan 2013 17:16:46 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 25 Jan 2013 17:16:46 +0100
branch
5_3_x
changeset 2364
e90e9235f7d9
parent 2356
ece6580f36cc
child 2764
1d85539ac41a
permissions
-rw-r--r--

Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.

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
2302
f29e9405c851 Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2080
diff changeset
3 # Copyright (c) 2010 - 2013 Detlev Offenbach <detlev@die-offenbachs.de>
750
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
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
10 from PyQt4.QtCore import pyqtSlot, Qt, QByteArray, QFile, QFileInfo, QIODevice, \
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
11 qVersion
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
12 from PyQt4.QtGui import QDialog, QTreeWidgetItem
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 try:
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
14 from PyQt4.QtNetwork import QSslCertificate, QSslSocket, QSslConfiguration, QSsl
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 except ImportError:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 pass
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
18 from E5Gui import E5MessageBox, E5FileDialog
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
19
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from .Ui_SslCertificatesDialog import Ui_SslCertificatesDialog
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
923
e224bdbf88ad Fixed an issue related to the non-availability of SSL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 882
diff changeset
22 try:
e224bdbf88ad Fixed an issue related to the non-availability of SSL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 882
diff changeset
23 from .SslInfoDialog import SslInfoDialog
e224bdbf88ad Fixed an issue related to the non-availability of SSL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 882
diff changeset
24 except ImportError:
e224bdbf88ad Fixed an issue related to the non-availability of SSL.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 882
diff changeset
25 pass
750
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 import Preferences
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 752
diff changeset
28 import Utilities
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
30
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 class SslCertificatesDialog(QDialog, Ui_SslCertificatesDialog):
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 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
34 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 CertRole = Qt.UserRole + 1
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
37 def __init__(self, parent=None):
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Constructor
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 @param parent reference to the parent widget (QWidget)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
1131
7781e396c903 Changed the code to use super() to access the superclass.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 945
diff changeset
43 super().__init__(parent)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.setupUi(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 self.__populateServerCertificatesTree()
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
47 self.__populateCaCertificatesTree()
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 def __populateServerCertificatesTree(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 Private slot to populate the server certificates tree.
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 certificateDict = Preferences.toDict(
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 for server in certificateDict:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 for cert in QSslCertificate.fromData(certificateDict[server]):
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
57 self.__createServerCertificateEntry(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 self.serversCertificatesTree.expandAll()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 for i in range(self.serversCertificatesTree.columnCount()):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.serversCertificatesTree.resizeColumnToContents(i)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
63 def __createServerCertificateEntry(self, server, cert):
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
65 Private method to create a server certificate entry.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @param server server name of the certificate (string)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param cert certificate to insert (QSslCertificate)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 # step 1: extract the info to be shown
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
71 if qVersion() >= "5.0.0":
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
72 organisation = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
73 ", ".join(cert.subjectInfo(QSslCertificate.Organization)))
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
74 commonName = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
75 ", ".join(cert.subjectInfo(QSslCertificate.CommonName)))
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
76 else:
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
77 organisation = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
78 cert.subjectInfo(QSslCertificate.Organization))
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
79 commonName = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
80 cert.subjectInfo(QSslCertificate.CommonName))
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if organisation is None or organisation == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 organisation = self.trUtf8("(Unknown)")
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 if commonName is None or commonName == "":
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 commonName = self.trUtf8("(Unknown common name)")
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
85 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
750
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 # step 2: create the entry
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
88 items = self.serversCertificatesTree.findItems(organisation,
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
89 Qt.MatchFixedString | Qt.MatchCaseSensitive)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 if len(items) == 0:
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
91 parent = QTreeWidgetItem(self.serversCertificatesTree, [organisation])
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 else:
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 parent = items[0]
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 itm = QTreeWidgetItem(parent, [commonName, server, expiryDate])
2364
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
96 itm.setData(0, self.CertRole, cert.toPem())
750
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 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 def on_serversCertificatesTree_currentItemChanged(self, current, previous):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
101 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
102 server certificates list.
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @param current new current item (QTreeWidgetItem)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param previous previous current item (QTreeWidgetItem)
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 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
108 self.serversViewButton.setEnabled(enable)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.serversDeleteButton.setEnabled(enable)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
110 self.serversExportButton.setEnabled(enable)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 def on_serversViewButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
115 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
116 """
2364
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
117 cert = QSslCertificate.fromData(
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
118 self.serversCertificatesTree.currentItem().data(0, self.CertRole))[0]
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 dlg = SslInfoDialog(cert, self)
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 dlg.exec_()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 @pyqtSlot()
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 def on_serversDeleteButton_clicked(self):
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
125 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
126 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
127 itm = self.serversCertificatesTree.currentItem()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
128 res = E5MessageBox.yesNo(self,
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
129 self.trUtf8("Delete Server Certificate"),
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
130 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
131 """<p>{0}</p>"""
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
132 """<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
133 """ 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
134 """ present a valid certificate.</p>""")\
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
135 .format(itm.text(0)))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
136 if res:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
137 server = itm.text(1)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
138 cert = self.serversCertificatesTree.currentItem().data(0, self.CertRole)
751
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 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
141 parent = itm.parent()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
142 parent.takeChild(parent.indexOfChild(itm))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
143 if parent.childCount() == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
144 self.serversCertificatesTree.takeTopLevelItem(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
145 self.serversCertificatesTree.indexOfTopLevelItem(parent))
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
146
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
147 # delete the certificate from the user certificate store
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
148 certificateDict = Preferences.toDict(
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
149 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
150 if server in certificateDict:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
151 certs = QSslCertificate.fromData(certificateDict[server])
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
152 if cert in certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
153 certs.remove(cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
154 if certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
155 pems = QByteArray()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
156 for cert in certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
157 pems.append(cert.toPem() + '\n')
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
158 certificateDict[server] = pems
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
159 else:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
160 del certificateDict[server]
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
161 Preferences.Prefs.settings.setValue("Help/CaCertificatesDict",
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
162 certificateDict)
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 # delete the certificate from the default certificates
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
165 self.__updateDefaultConfiguration()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
166
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
167 @pyqtSlot()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
168 def on_serversImportButton_clicked(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
169 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
170 Private slot to import server certificates.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
171 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
172 certs = self.__importCertificate()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
173 if certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
174 server = "*"
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
175 certificateDict = Preferences.toDict(
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
176 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
177 if server in certificateDict:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
178 sCerts = QSslCertificate.fromData(certificateDict[server])
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
179 else:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
180 sCerts = []
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
181
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
182 pems = QByteArray()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
183 for cert in certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
184 if cert in sCerts:
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
185 if qVersion() >= "5.0.0":
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
186 commonStr = ", ".join(
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
187 cert.subjectInfo(QSslCertificate.CommonName))
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
188 else:
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
189 commonStr = cert.subjectInfo(QSslCertificate.CommonName)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
190 E5MessageBox.warning(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
191 self.trUtf8("Import Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
192 self.trUtf8("""<p>The certificate <b>{0}</b> already exists."""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
193 """ Skipping.</p>""")
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
194 .format(Utilities.decodeString(commonStr)))
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
195 else:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
196 pems.append(cert.toPem() + '\n')
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
197 if server not in certificateDict:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
198 certificateDict[server] = QByteArray()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
199 certificateDict[server].append(pems)
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
200 Preferences.Prefs.settings.setValue("Help/CaCertificatesDict",
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
201 certificateDict)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
202
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
203 self.serversCertificatesTree.clear()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
204 self.__populateServerCertificatesTree()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
205
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
206 self.__updateDefaultConfiguration()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
207
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
208 @pyqtSlot()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
209 def on_serversExportButton_clicked(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
210 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
211 Private slot to export the selected server certificate.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
212 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
213 cert = self.serversCertificatesTree.currentItem().data(0, self.CertRole)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
214 fname = self.serversCertificatesTree.currentItem().text(0)\
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
215 .replace(" ", "").replace("\t", "")
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
216 self.__exportCertificate(fname, cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
217
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
218 def __updateDefaultConfiguration(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
219 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
220 Private method to update the default SSL configuration.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
221 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
222 caList = self.__getSystemCaCertificates()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
223 certificateDict = Preferences.toDict(
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
224 Preferences.Prefs.settings.value("Help/CaCertificatesDict"))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
225 for server in certificateDict:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
226 for cert in QSslCertificate.fromData(certificateDict[server]):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
227 if cert not in caList:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
228 caList.append(cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
229 sslCfg = QSslConfiguration.defaultConfiguration()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
230 sslCfg.setCaCertificates(caList)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
231 QSslConfiguration.setDefaultConfiguration(sslCfg)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
232
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
233 def __getSystemCaCertificates(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
234 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
235 Private method to get the list of system certificates.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
236
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
237 @return list of system certificates (list of QSslCertificate)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
238 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
239 caList = QSslCertificate.fromData(Preferences.toByteArray(
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
240 Preferences.Prefs.settings.value("Help/SystemCertificates")))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
241 if not caList:
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
242 caList = QSslSocket.systemCaCertificates()
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
243 return caList
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
244
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
245 def __populateCaCertificatesTree(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
246 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
247 Private slot to populate the CA certificates tree.
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
248 """
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
249 for cert in self.__getSystemCaCertificates():
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
250 self.__createCaCertificateEntry(cert)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
251
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
252 self.caCertificatesTree.expandAll()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
253 for i in range(self.caCertificatesTree.columnCount()):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
254 self.caCertificatesTree.resizeColumnToContents(i)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
255 self.caCertificatesTree.sortItems(0, Qt.AscendingOrder)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
256
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
257 def __createCaCertificateEntry(self, cert):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
258 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
259 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
260
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
261 @param cert certificate to insert (QSslCertificate)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
262 """
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
263 # step 1: extract the info to be shown
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
264 if qVersion() >= "5.0.0":
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
265 organisation = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
266 ", ".join(cert.subjectInfo(QSslCertificate.Organization)))
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
267 commonName = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
268 ", ".join(cert.subjectInfo(QSslCertificate.CommonName)))
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
269 else:
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
270 organisation = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
271 cert.subjectInfo(QSslCertificate.Organization))
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
272 commonName = Utilities.decodeString(
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
273 cert.subjectInfo(QSslCertificate.CommonName))
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
274 if organisation is None or organisation == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
275 organisation = self.trUtf8("(Unknown)")
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
276 if commonName is None or commonName == "":
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
277 commonName = self.trUtf8("(Unknown common name)")
2356
ece6580f36cc Fixed usage of Utilities.html_encode() in various places.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2302
diff changeset
278 expiryDate = cert.expiryDate().toString("yyyy-MM-dd")
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
279
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
280 # step 2: create the entry
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
281 items = self.caCertificatesTree.findItems(organisation,
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
282 Qt.MatchFixedString | Qt.MatchCaseSensitive)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
283 if len(items) == 0:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
284 parent = QTreeWidgetItem(self.caCertificatesTree, [organisation])
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
285 else:
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
286 parent = items[0]
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
287
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
288 itm = QTreeWidgetItem(parent, [commonName, expiryDate])
2364
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
289 itm.setData(0, self.CertRole, cert.toPem())
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
290
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
291 @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
292 def on_caCertificatesTree_currentItemChanged(self, current, previous):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
293 """
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
294 Private slot handling a change of the current item
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
295 in the CA certificates list.
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
296
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
297 @param current new current item (QTreeWidgetItem)
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
298 @param previous previous current item (QTreeWidgetItem)
750
1b6ac093751c Started implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
300 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
301 self.caViewButton.setEnabled(enable)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
302 self.caDeleteButton.setEnabled(enable)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
303 self.caExportButton.setEnabled(enable)
751
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
304
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
305 @pyqtSlot()
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
306 def on_caViewButton_clicked(self):
619341e9dbb8 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 750
diff changeset
307 """
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
308 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
309 """
2364
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
310 cert = QSslCertificate.fromData(
e90e9235f7d9 Introduced a workaround for an issue in Qt5/PyQt4 attaching a QSslCertificate to a QTreeWidgetItem.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2356
diff changeset
311 self.caCertificatesTree.currentItem().data(0, self.CertRole))[0]
752
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
312 dlg = SslInfoDialog(cert, self)
2ec6ec7cd381 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 751
diff changeset
313 dlg.exec_()
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
314
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
315 @pyqtSlot()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
316 def on_caDeleteButton_clicked(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
317 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
318 Private slot to delete the selected CA certificate.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
319 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
320 itm = self.caCertificatesTree.currentItem()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
321 res = E5MessageBox.yesNo(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
322 self.trUtf8("Delete CA Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
323 self.trUtf8("""<p>Shall the CA certificate really be deleted?</p>"""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
324 """<p>{0}</p>"""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
325 """<p>If the CA certificate is deleted, the browser"""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
326 """ will not trust any certificate issued by this CA.</p>""")\
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
327 .format(itm.text(0)))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
328 if res:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
329 cert = self.caCertificatesTree.currentItem().data(0, self.CertRole)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
330
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
331 # delete the selected entry and it's parent entry, if it was the only one
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
332 parent = itm.parent()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
333 parent.takeChild(parent.indexOfChild(itm))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
334 if parent.childCount() == 0:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
335 self.caCertificatesTree.takeTopLevelItem(
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
336 self.caCertificatesTree.indexOfTopLevelItem(parent))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
337
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
338 # delete the certificate from the CA certificate store
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
339 caCerts = self.__getSystemCaCertificates()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
340 if cert in caCerts:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
341 caCerts.remove(cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
342 pems = QByteArray()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
343 for cert in caCerts:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
344 pems.append(cert.toPem() + '\n')
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
345 Preferences.Prefs.settings.setValue("Help/SystemCertificates", pems)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
346
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
347 # delete the certificate from the default certificates
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
348 self.__updateDefaultConfiguration()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
349
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
350 @pyqtSlot()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
351 def on_caImportButton_clicked(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
352 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
353 Private slot to import server certificates.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
354 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
355 certs = self.__importCertificate()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
356 if certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
357 caCerts = self.__getSystemCaCertificates()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
358 for cert in certs:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
359 if cert in caCerts:
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
360 if qVersion() >= "5.0.0":
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
361 commonStr = ", ".join(
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
362 cert.subjectInfo(QSslCertificate.CommonName))
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
363 else:
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
364 commonStr = cert.subjectInfo(QSslCertificate.CommonName)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
365 E5MessageBox.warning(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
366 self.trUtf8("Import Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
367 self.trUtf8("""<p>The certificate <b>{0}</b> already exists."""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
368 """ Skipping.</p>""")
2078
9f4a45741622 Made the second set of Qt5 compatibility changes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1509
diff changeset
369 .format(Utilities.decodeString(commonStr)))
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
370 else:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
371 caCerts.append(cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
372
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
373 pems = QByteArray()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
374 for cert in caCerts:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
375 pems.append(cert.toPem() + '\n')
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
376 Preferences.Prefs.settings.setValue("Help/SystemCertificates", pems)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
377
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
378 self.caCertificatesTree.clear()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
379 self.__populateCaCertificatesTree()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
380
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
381 self.__updateDefaultConfiguration()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
382
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
383 @pyqtSlot()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
384 def on_caExportButton_clicked(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
385 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
386 Private slot to export the selected CA certificate.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
387 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
388 cert = self.caCertificatesTree.currentItem().data(0, self.CertRole)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
389 fname = self.caCertificatesTree.currentItem().text(0)\
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
390 .replace(" ", "").replace("\t", "")
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
391 self.__exportCertificate(fname, cert)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
392
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
393 def __exportCertificate(self, name, cert):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
394 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
395 Private slot to export a certificate.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
396
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
397 @param name default file name without extension (string)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
398 @param cert certificate to be exported (QSslCertificate)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
399 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
400 if cert is not None:
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
401 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
402 self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
403 self.trUtf8("Export Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
404 name,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
405 self.trUtf8("Certificate File (PEM) (*.pem);;"
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
406 "Certificate File (DER) (*.der)"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
407 None,
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
408 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
409
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
410 if fname:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
411 ext = QFileInfo(fname).suffix()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
412 if not ext or ext not in ["pem", "der"]:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
413 ex = selectedFilter.split("(*")[1].split(")")[0]
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
414 if ex:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
415 fname += ex
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
416 if QFileInfo(fname).exists():
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
417 res = E5MessageBox.yesNo(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
418 self.trUtf8("Export Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
419 self.trUtf8("<p>The file <b>{0}</b> already exists."
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
420 " Overwrite it?</p>").format(fname),
945
8cd4d08fa9f6 Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 923
diff changeset
421 icon=E5MessageBox.Warning)
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
422 if not res:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
423 return
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
424
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
425 f = QFile(fname)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
426 if not f.open(QIODevice.WriteOnly):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
427 E5MessageBox.critical(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
428 self.trUtf8("Export Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
429 self.trUtf8("""<p>The certificate could not be written to file"""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
430 """ <b>{0}</b></p><p>Error: {1}</p>""")
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
431 .format(fname, f.errorString()))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
432 return
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
433
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
434 if fname.endswith(".pem"):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
435 crt = cert.toPem()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
436 else:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
437 crt = cert.toDer()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
438 f.write(crt)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
439 f.close()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
440
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
441 def __importCertificate(self):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
442 """
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
443 Private method to read a certificate.
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
444
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
445 @return certificates read (list of QSslCertificate)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
446 """
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
447 fname = E5FileDialog.getOpenFileName(
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
448 self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
449 self.trUtf8("Import Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
450 "",
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
451 self.trUtf8("Certificate Files (*.pem *.crt *.der *.cer *.ca);;"
882
34b86be88bf0 Redid the native file dialog code to be future proof.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 880
diff changeset
452 "All Files (*)"))
762
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
453
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
454 if fname:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
455 f = QFile(fname)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
456 if not f.open(QIODevice.ReadOnly):
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
457 E5MessageBox.critical(self,
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
458 self.trUtf8("Export Certificate"),
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
459 self.trUtf8("""<p>The certificate could not be read from file"""
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
460 """ <b>{0}</b></p><p>Error: {1}</p>""")
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
461 .format(fname, f.errorString()))
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
462 return []
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
463
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
464 crt = f.readAll()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
465 f.close()
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
466 cert = QSslCertificate.fromData(crt, QSsl.Pem)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
467 if not cert:
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
468 cert = QSslCertificate.fromData(crt, QSsl.Der)
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
469
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
470 return cert
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
471
48190a225699 Enhanced the certificate manager of the web browser by code to import/export certificates and to delete system certificates.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
472 return []

eric ide

mercurial