eric7/E5Network/E5SslCertificatesInfoWidget.py

branch
eric7
changeset 8354
12ebd3934fef
parent 8353
799196d0b05d
child 8355
8a7677a63c8d
--- a/eric7/E5Network/E5SslCertificatesInfoWidget.py	Sat May 22 12:54:57 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a widget to show SSL certificate infos.
-"""
-
-from PyQt6.QtCore import pyqtSlot, QCryptographicHash, QDateTime
-from PyQt6.QtWidgets import QWidget
-try:
-    from PyQt6.QtNetwork import QSslCertificate
-except ImportError:
-    QSslCertificate = None
-
-from .Ui_E5SslCertificatesInfoWidget import Ui_E5SslCertificatesInfoWidget
-
-import Utilities
-
-
-class E5SslCertificatesInfoWidget(QWidget, Ui_E5SslCertificatesInfoWidget):
-    """
-    Class implementing a widget to show SSL certificate infos.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.__chain = []
-    
-    def showCertificateChain(self, certificateChain):
-        """
-        Public method to show the SSL certificates of a certificate chain.
-        
-        @param certificateChain list od SSL certificates
-            (list of QSslCertificate)
-        """
-        if QSslCertificate:
-            self.chainLabel.show()
-            self.chainComboBox.show()
-            self.chainComboBox.clear()
-            
-            self.__chain = certificateChain[:]
-            
-            for cert in self.__chain:
-                name = ", ".join(cert.subjectInfo(
-                    QSslCertificate.SubjectInfo.CommonName))
-                if not name:
-                    name = ", ".join(
-                        cert.subjectInfo(
-                            QSslCertificate.SubjectInfo.Organization))
-                if not name:
-                    name = cert.serialNumber()
-                self.chainComboBox.addItem(name)
-            
-            self.on_chainComboBox_activated(0)
-    
-    def showCertificate(self, certificate):
-        """
-        Public method to show the SSL certificate information.
-        
-        @param certificate reference to the SSL certificate (QSslCertificate)
-        """
-        self.chainLabel.hide()
-        self.chainComboBox.hide()
-        self.chainComboBox.clear()
-        
-        self.__chain = []
-        
-        if QSslCertificate:
-            self.__showCertificate(certificate)
-    
-    def __showCertificate(self, certificate):
-        """
-        Private method to show the  SSL certificate information.
-        
-        @param certificate reference to the SSL certificate (QSslCertificate)
-        """
-        if QSslCertificate:
-            self.blacklistedLabel.setVisible(False)
-            self.blacklistedLabel.setStyleSheet(
-                "QLabel { color : white; background-color : red; }")
-            self.expiredLabel.setVisible(False)
-            self.expiredLabel.setStyleSheet(
-                "QLabel { color : white; background-color : red; }")
-            
-            self.subjectCommonNameLabel.setText(self.__certificateString(
-                ", ".join(certificate.subjectInfo(
-                    QSslCertificate.SubjectInfo.CommonName))))
-            self.subjectOrganizationLabel.setText(self.__certificateString(
-                ", ".join(certificate.subjectInfo(
-                    QSslCertificate.SubjectInfo.Organization))))
-            self.subjectOrganizationalUnitLabel.setText(
-                self.__certificateString(", ".join(
-                    certificate.subjectInfo(
-                        QSslCertificate.SubjectInfo.OrganizationalUnitName))))
-            self.issuerCommonNameLabel.setText(self.__certificateString(
-                ", ".join(certificate.issuerInfo(
-                    QSslCertificate.SubjectInfo.CommonName))))
-            self.issuerOrganizationLabel.setText(self.__certificateString(
-                ", ".join(certificate.issuerInfo(
-                    QSslCertificate.SubjectInfo.Organization))))
-            self.issuerOrganizationalUnitLabel.setText(
-                self.__certificateString(", ".join(
-                    certificate.issuerInfo(
-                        QSslCertificate.SubjectInfo.OrganizationalUnitName))))
-            self.serialNumberLabel.setText(self.__serialNumber(certificate))
-            self.effectiveLabel.setText(
-                certificate.effectiveDate().toString("yyyy-MM-dd"))
-            self.expiresLabel.setText(
-                certificate.expiryDate().toString("yyyy-MM-dd"))
-            self.sha1Label.setText(self.__formatHexString(
-                str(certificate.digest(
-                    QCryptographicHash.Algorithm.Sha1).toHex(),
-                    encoding="ascii")))
-            self.md5Label.setText(self.__formatHexString(
-                str(certificate.digest(
-                    QCryptographicHash.Algorithm.Md5).toHex(),
-                    encoding="ascii")))
-            
-            if certificate.isBlacklisted():
-                # something is wrong; indicate it to the user
-                if self.__hasExpired(certificate.effectiveDate(),
-                                     certificate.expiryDate()):
-                    self.expiredLabel.setVisible(True)
-                else:
-                    self.blacklistedLabel.setVisible(True)
-    
-    def __certificateString(self, txt):
-        """
-        Private method to prepare some text for display.
-        
-        @param txt text to be displayed (string)
-        @return prepared text (string)
-        """
-        if txt is None or txt == "":
-            return self.tr("<not part of the certificate>")
-        
-        return Utilities.decodeString(txt)
-    
-    def __serialNumber(self, cert):
-        """
-        Private slot to format the certificate serial number.
-        
-        @param cert reference to the SSL certificate (QSslCertificate)
-        @return formated serial number (string)
-        """
-        serial = cert.serialNumber()
-        if serial == "":
-            return self.tr("<not part of the certificate>")
-        
-        if b':' in serial:
-            return str(serial, encoding="ascii").upper()
-        else:
-            hexString = hex(int(serial))[2:]
-            return self.__formatHexString(hexString)
-    
-    def __formatHexString(self, hexString):
-        """
-        Private method to format a hex string for display.
-        
-        @param hexString hex string to be formatted (string)
-        @return formatted string (string)
-        """
-        hexString = hexString.upper()
-        
-        if len(hexString) % 2 == 1:
-            hexString = '0' + hexString
-        
-        hexList = []
-        while hexString:
-            hexList.append(hexString[:2])
-            hexString = hexString[2:]
-        
-        return ':'.join(hexList)
-    
-    def __hasExpired(self, effectiveDate, expiryDate):
-        """
-        Private method to check for a certificate expiration.
-        
-        @param effectiveDate date the certificate becomes effective (QDateTime)
-        @param expiryDate date the certificate expires (QDateTime)
-        @return flag indicating the expiration status (boolean)
-        """
-        now = QDateTime.currentDateTime()
-        
-        return now < effectiveDate or now >= expiryDate
-    
-    @pyqtSlot(int)
-    def on_chainComboBox_activated(self, index):
-        """
-        Private slot to show the certificate info for the selected entry.
-        
-        @param index number of the certificate in the certificate chain
-            (integer)
-        """
-        self.__showCertificate(self.__chain[index])

eric ide

mercurial