Fri, 11 Mar 2011 16:51:57 +0100
Made code mostly PEP 8 compliant (except all whitespace and line length).
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
791
9ec2ac20e54e
Updated copyright notice.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
753
diff
changeset
|
3 | # Copyright (c) 2010 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a dialog to show SSL certificate infos. |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | from PyQt4.QtCore import QCryptographicHash |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | from PyQt4.QtGui import QDialog |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | from PyQt4.QtNetwork import QSslCertificate |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | from .Ui_SslInfoDialog import Ui_SslInfoDialog |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
753
e19a516f0a97
Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
664
diff
changeset
|
16 | import Utilities |
e19a516f0a97
Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
664
diff
changeset
|
17 | |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
18 | |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | class SslInfoDialog(QDialog, Ui_SslInfoDialog): |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | Class implementing a dialog to show SSL certificate infos. |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
23 | def __init__(self, certificate, parent=None): |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | Constructor |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | @param certificate reference to the SSL certificate (QSslCertificate) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | @param parent reference to the parent widget (QWidget) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | QDialog.__init__(self, parent) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | self.setupUi(self) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | self.subjectCommonNameLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | certificate.subjectInfo(QSslCertificate.CommonName))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | self.subjectOrganizationLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | certificate.subjectInfo(QSslCertificate.Organization))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | self.subjectOrganizationalUnitLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | certificate.subjectInfo(QSslCertificate.OrganizationalUnitName))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | self.serialNumberLabel.setText(self.__serialNumber(certificate)) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | self.issuerCommonNameLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | certificate.issuerInfo(QSslCertificate.CommonName))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | self.issuerOrganizationLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | certificate.issuerInfo(QSslCertificate.Organization))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | self.issuerOrganizationalUnitLabel.setText(self.__certificateString( |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | certificate.issuerInfo(QSslCertificate.OrganizationalUnitName))) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | self.effectiveLabel.setText(certificate.effectiveDate().toString("yyyy-MM-dd")) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | self.expiresLabel.setText(certificate.expiryDate().toString("yyyy-MM-dd")) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | self.sha1Label.setText(self.__formatHexString( |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
49 | str(certificate.digest(QCryptographicHash.Sha1).toHex(), encoding="ascii"))) |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | self.md5Label.setText(self.__formatHexString( |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
51 | str(certificate.digest(QCryptographicHash.Md5).toHex(), encoding="ascii"))) |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | def __certificateString(self, txt): |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | Private method to prepare some text for display. |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | @param txt text to be displayed (string) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | @return prepared text (string) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | if txt is None or txt == "": |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | return self.trUtf8("<not part of the certificate>") |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
753
e19a516f0a97
Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
664
diff
changeset
|
63 | return Utilities.decodeString(txt) |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | def __serialNumber(self, cert): |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | Private slot to format the certificate serial number. |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | @param cert reference to the SSL certificate (QSslCertificate) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | @return formated serial number (string) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | serial = cert.serialNumber() |
664
3061f8bd826e
Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
659
diff
changeset
|
73 | if serial == "": |
3061f8bd826e
Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
659
diff
changeset
|
74 | return self.trUtf8("<not part of the certificate>") |
3061f8bd826e
Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
659
diff
changeset
|
75 | |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | if ':' in serial: |
945
8cd4d08fa9f6
Made code mostly PEP 8 compliant (except all whitespace and line length).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
791
diff
changeset
|
77 | return str(serial, encoding="ascii").upper() |
659
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | else: |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | hexString = hex(int(serial))[2:] |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | return self.__formatHexString(hexString) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | def __formatHexString(self, hexString): |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | Private method to format a hex string for display. |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | @param hexString hex string to be formatted (string) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | @return formatted string (string) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | """ |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | hexString = hexString.upper() |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | if len(hexString) % 2 == 1: |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | hexString = '0' + hexString |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | hexList = [] |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | while hexString: |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | hexList.append(hexString[:2]) |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | hexString = hexString[2:] |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | |
b53e67ae2021
Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | return ':'.join(hexList) |