Helpviewer/SslCertificatesDialog.py

Fri, 31 May 2013 16:55:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 31 May 2013 16:55:50 +0200
branch
5_3_x
changeset 2687
33a848c5e46f
parent 2364
e90e9235f7d9
child 2764
1d85539ac41a
permissions
-rw-r--r--

Changed the name of the cache directory of the web browser to reflect the Qt and Webkit version number in order to avoid cahe trouble.

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