12 import platform |
12 import platform |
13 |
13 |
14 from PyQt6.QtCore import QByteArray, QObject |
14 from PyQt6.QtCore import QByteArray, QObject |
15 from PyQt6.QtNetwork import QSsl, QSslCertificate, QSslConfiguration, QSslError |
15 from PyQt6.QtNetwork import QSsl, QSslCertificate, QSslConfiguration, QSslError |
16 |
16 |
17 from eric7 import EricUtilities, Preferences, Utilities |
17 from eric7 import EricUtilities |
18 from eric7.EricWidgets import EricMessageBox |
18 from eric7.EricWidgets import EricMessageBox |
19 from eric7.SystemUtilities import OSUtilities |
19 from eric7.SystemUtilities import OSUtilities |
20 |
20 |
21 |
21 |
22 class EricSslErrorState(enum.Enum): |
22 class EricSslErrorState(enum.Enum): |
35 |
35 |
36 It also initializes the default SSL configuration with certificates |
36 It also initializes the default SSL configuration with certificates |
37 permanently accepted by the user already. |
37 permanently accepted by the user already. |
38 """ |
38 """ |
39 |
39 |
40 def __init__(self, parent=None): |
40 def __init__(self, settings, parent=None): |
41 """ |
41 """ |
42 Constructor |
42 Constructor |
43 |
43 |
44 @param parent reference to the parent object |
44 @param settings reference to the settings object |
45 @type QObject |
45 @type QSettings |
|
46 @param parent reference to the parent object (defaults to None) |
|
47 @type QObject (optional) |
46 """ |
48 """ |
47 super().__init__(parent) |
49 super().__init__(parent) |
|
50 |
|
51 self.__settings = settings |
48 |
52 |
49 caList = self.__getSystemCaCertificates() |
53 caList = self.__getSystemCaCertificates() |
50 certificateDict = EricUtilities.toDict( |
54 certificateDict = EricUtilities.toDict( |
51 Preferences.getSettings().value("Ssl/CaCertificatesDict") |
55 self.__settings.value("Ssl/CaCertificatesDict") |
52 ) |
56 ) |
53 for server in certificateDict: |
57 for server in certificateDict: |
54 for cert in QSslCertificate.fromData(certificateDict[server]): |
58 for cert in QSslCertificate.fromData(certificateDict[server]): |
55 if cert not in caList: |
59 if cert not in caList: |
56 caList.append(cert) |
60 caList.append(cert) |
115 change of the default SSL configuration |
119 change of the default SSL configuration |
116 @rtype tuple of (EricSslErrorState, bool) |
120 @rtype tuple of (EricSslErrorState, bool) |
117 """ |
121 """ |
118 caMerge = {} |
122 caMerge = {} |
119 certificateDict = EricUtilities.toDict( |
123 certificateDict = EricUtilities.toDict( |
120 Preferences.getSettings().value("Ssl/CaCertificatesDict") |
124 self.__settings.value("Ssl/CaCertificatesDict") |
121 ) |
125 ) |
122 for caServer in certificateDict: |
126 for caServer in certificateDict: |
123 caMerge[caServer] = QSslCertificate.fromData(certificateDict[caServer]) |
127 caMerge[caServer] = QSslCertificate.fromData(certificateDict[caServer]) |
124 caNew = [] |
128 caNew = [] |
125 |
129 |
192 for server in caMerge: |
196 for server in caMerge: |
193 pems = QByteArray() |
197 pems = QByteArray() |
194 for cert in caMerge[server]: |
198 for cert in caMerge[server]: |
195 pems.append(cert.toPem() + b"\n") |
199 pems.append(cert.toPem() + b"\n") |
196 certificateDict[server] = pems |
200 certificateDict[server] = pems |
197 Preferences.getSettings().setValue( |
201 self.__settings.setValue("Ssl/CaCertificatesDict", certificateDict) |
198 "Ssl/CaCertificatesDict", certificateDict |
|
199 ) |
|
200 |
202 |
201 return EricSslErrorState.USER_IGNORED, caRet |
203 return EricSslErrorState.USER_IGNORED, caRet |
202 |
204 |
203 else: |
205 else: |
204 return EricSslErrorState.NOT_IGNORED, False |
206 return EricSslErrorState.NOT_IGNORED, False |
213 @rtype str |
215 @rtype str |
214 """ |
216 """ |
215 result = "<p>" |
217 result = "<p>" |
216 |
218 |
217 result += self.tr("Name: {0}").format( |
219 result += self.tr("Name: {0}").format( |
218 Utilities.html_encode( |
220 EricUtilities.html_encode( |
219 Utilities.decodeString( |
221 EricUtilities.decodeString( |
220 ", ".join(cert.subjectInfo(QSslCertificate.SubjectInfo.CommonName)) |
222 ", ".join(cert.subjectInfo(QSslCertificate.SubjectInfo.CommonName)) |
221 ) |
223 ) |
222 ) |
224 ) |
223 ) |
225 ) |
224 |
226 |
225 result += self.tr("<br/>Organization: {0}").format( |
227 result += self.tr("<br/>Organization: {0}").format( |
226 Utilities.html_encode( |
228 EricUtilities.html_encode( |
227 Utilities.decodeString( |
229 EricUtilities.decodeString( |
228 ", ".join( |
230 ", ".join( |
229 cert.subjectInfo(QSslCertificate.SubjectInfo.Organization) |
231 cert.subjectInfo(QSslCertificate.SubjectInfo.Organization) |
230 ) |
232 ) |
231 ) |
233 ) |
232 ) |
234 ) |
233 ) |
235 ) |
234 |
236 |
235 result += self.tr("<br/>Issuer: {0}").format( |
237 result += self.tr("<br/>Issuer: {0}").format( |
236 Utilities.html_encode( |
238 EricUtilities.html_encode( |
237 Utilities.decodeString( |
239 EricUtilities.decodeString( |
238 ", ".join(cert.issuerInfo(QSslCertificate.SubjectInfo.CommonName)) |
240 ", ".join(cert.issuerInfo(QSslCertificate.SubjectInfo.CommonName)) |
239 ) |
241 ) |
240 ) |
242 ) |
241 ) |
243 ) |
242 result += self.tr("<br/>Not valid before: {0}<br/>Valid Until: {1}").format( |
244 result += self.tr("<br/>Not valid before: {0}<br/>Valid Until: {1}").format( |
243 Utilities.html_encode(cert.effectiveDate().toString("yyyy-MM-dd")), |
245 EricUtilities.html_encode(cert.effectiveDate().toString("yyyy-MM-dd")), |
244 Utilities.html_encode(cert.expiryDate().toString("yyyy-MM-dd")), |
246 EricUtilities.html_encode(cert.expiryDate().toString("yyyy-MM-dd")), |
245 ) |
247 ) |
246 |
248 |
247 result += "</p>" |
249 result += "</p>" |
248 |
250 |
249 return result |
251 return result |
254 |
256 |
255 @return list of system certificates |
257 @return list of system certificates |
256 @rtype list of QSslCertificate |
258 @rtype list of QSslCertificate |
257 """ |
259 """ |
258 caList = QSslCertificate.fromData( |
260 caList = QSslCertificate.fromData( |
259 EricUtilities.toByteArray( |
261 EricUtilities.toByteArray(self.__settings.value("Ssl/SystemCertificates")) |
260 Preferences.getSettings().value("Ssl/SystemCertificates") |
|
261 ) |
|
262 ) |
262 ) |
263 if not caList: |
263 if not caList: |
264 caList = QSslConfiguration.systemCaCertificates() |
264 caList = QSslConfiguration.systemCaCertificates() |
265 return caList |
265 return caList |