X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsslinfodlg.cpp;h=67f0dd56a9a1b683f4113c41506261c67384ba28;hp=bb0376051d80f8c151e09620d1d8e9bf54896ee8;hb=183d6375f0baf6b5dac1a470f59a748f48dde711;hpb=694f9bfbf7f1af19108461c7e00d133e55082bce diff --git a/src/qtui/sslinfodlg.cpp b/src/qtui/sslinfodlg.cpp index bb037605..67f0dd56 100644 --- a/src/qtui/sslinfodlg.cpp +++ b/src/qtui/sslinfodlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,24 +15,25 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include "sslinfodlg.h" + #include #include #include #include -#include "sslinfodlg.h" #include "util.h" // ======================================== // SslInfoDlg // ======================================== -SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent) - : QDialog(parent), - _socket(socket) +SslInfoDlg::SslInfoDlg(const QSslSocket* socket, QWidget* parent) + : QDialog(parent) + , _socket(socket) { ui.setupUi(this); @@ -43,41 +44,61 @@ SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent) ui.encryption->setText(cipher.name()); ui.protocol->setText(cipher.protocolString()); - connect(ui.certificateChain, SIGNAL(currentIndexChanged(int)), SLOT(setCurrentCert(int))); - foreach(const QSslCertificate &cert, socket->peerCertificateChain()) { - ui.certificateChain->addItem(cert.subjectInfo(QSslCertificate::CommonName)); + connect(ui.certificateChain, selectOverload(&QComboBox::currentIndexChanged), this, &SslInfoDlg::setCurrentCert); + foreach (const QSslCertificate& cert, socket->peerCertificateChain()) { + ui.certificateChain->addItem(subjectInfo(cert, QSslCertificate::CommonName)); } } - void SslInfoDlg::setCurrentCert(int index) { QSslCertificate cert = socket()->peerCertificateChain().at(index); - ui.subjectCommonName->setText(cert.subjectInfo(QSslCertificate::CommonName)); - ui.subjectOrganization->setText(cert.subjectInfo(QSslCertificate::Organization)); - ui.subjectOrganizationalUnit->setText(cert.subjectInfo(QSslCertificate::OrganizationalUnitName)); - ui.subjectCountry->setText(cert.subjectInfo(QSslCertificate::CountryName)); - ui.subjectState->setText(cert.subjectInfo(QSslCertificate::StateOrProvinceName)); - ui.subjectCity->setText(cert.subjectInfo(QSslCertificate::LocalityName)); + ui.subjectCommonName->setText(subjectInfo(cert, QSslCertificate::CommonName)); + ui.subjectOrganization->setText(subjectInfo(cert, QSslCertificate::Organization)); + ui.subjectOrganizationalUnit->setText(subjectInfo(cert, QSslCertificate::OrganizationalUnitName)); + ui.subjectCountry->setText(subjectInfo(cert, QSslCertificate::CountryName)); + ui.subjectState->setText(subjectInfo(cert, QSslCertificate::StateOrProvinceName)); + ui.subjectCity->setText(subjectInfo(cert, QSslCertificate::LocalityName)); - ui.issuerCommonName->setText(cert.issuerInfo(QSslCertificate::CommonName)); - ui.issuerOrganization->setText(cert.issuerInfo(QSslCertificate::Organization)); - ui.issuerOrganizationalUnit->setText(cert.issuerInfo(QSslCertificate::OrganizationalUnitName)); - ui.issuerCountry->setText(cert.issuerInfo(QSslCertificate::CountryName)); - ui.issuerState->setText(cert.issuerInfo(QSslCertificate::StateOrProvinceName)); - ui.issuerCity->setText(cert.issuerInfo(QSslCertificate::LocalityName)); + ui.issuerCommonName->setText(issuerInfo(cert, QSslCertificate::CommonName)); + ui.issuerOrganization->setText(issuerInfo(cert, QSslCertificate::Organization)); + ui.issuerOrganizationalUnit->setText(issuerInfo(cert, QSslCertificate::OrganizationalUnitName)); + ui.issuerCountry->setText(issuerInfo(cert, QSslCertificate::CountryName)); + ui.issuerState->setText(issuerInfo(cert, QSslCertificate::StateOrProvinceName)); + ui.issuerCity->setText(issuerInfo(cert, QSslCertificate::LocalityName)); - if (socket()->sslErrors().isEmpty()) +#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) + const auto& sslErrors = socket()->sslErrors(); +#else + const auto& sslErrors = socket()->sslHandshakeErrors(); +#endif + if (sslErrors.isEmpty()) { ui.trusted->setText(tr("Yes")); + } else { QString errorString = tr("No, for the following reasons:
    "); - foreach(const QSslError &error, socket()->sslErrors()) - errorString += "
  • " + error.errorString() + "
  • "; + for (const auto& error : sslErrors) { + errorString += "
  • " + error.errorString() + "
  • "; + } errorString += "
"; ui.trusted->setText(errorString); } - ui.validity->setText(tr("%1 to %2").arg(cert.effectiveDate().date().toString(Qt::ISODate), cert.expiryDate().date().toString(Qt::ISODate))); + ui.validity->setText( + tr("%1 to %2").arg(cert.effectiveDate().date().toString(Qt::ISODate), cert.expiryDate().date().toString(Qt::ISODate))); ui.md5Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Md5))); ui.sha1Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Sha1))); + ui.sha256Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Sha256))); +} + +// in Qt5, subjectInfo returns a QStringList(); turn this into a comma-separated string instead +QString SslInfoDlg::subjectInfo(const QSslCertificate& cert, QSslCertificate::SubjectInfo subjectInfo) const +{ + return cert.subjectInfo(subjectInfo).join(", "); +} + +// same here +QString SslInfoDlg::issuerInfo(const QSslCertificate& cert, QSslCertificate::SubjectInfo subjectInfo) const +{ + return cert.issuerInfo(subjectInfo).join(", "); }