QSslCertificate::{subject,issuer}Info() returns a QStringList in Qt5
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 24 Mar 2014 21:59:37 +0000 (22:59 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 24 Mar 2014 23:21:26 +0000 (00:21 +0100)
This requires changes in SslInfoDlg. To simplify handling the API differences,
we use small wrappers that join the string lists for Qt5.

src/qtui/sslinfodlg.cpp
src/qtui/sslinfodlg.h

index 05311ac..88ac6b1 100644 (file)
@@ -45,7 +45,7 @@ SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent)
 
     connect(ui.certificateChain, SIGNAL(currentIndexChanged(int)), SLOT(setCurrentCert(int)));
     foreach(const QSslCertificate &cert, socket->peerCertificateChain()) {
 
     connect(ui.certificateChain, SIGNAL(currentIndexChanged(int)), SLOT(setCurrentCert(int)));
     foreach(const QSslCertificate &cert, socket->peerCertificateChain()) {
-        ui.certificateChain->addItem(cert.subjectInfo(QSslCertificate::CommonName));
+        ui.certificateChain->addItem(subjectInfo(cert, QSslCertificate::CommonName));
     }
 }
 
     }
 }
 
@@ -53,19 +53,19 @@ SslInfoDlg::SslInfoDlg(const QSslSocket *socket, QWidget *parent)
 void SslInfoDlg::setCurrentCert(int index)
 {
     QSslCertificate cert = socket()->peerCertificateChain().at(index);
 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())
         ui.trusted->setText(tr("Yes"));
 
     if (socket()->sslErrors().isEmpty())
         ui.trusted->setText(tr("Yes"));
@@ -81,3 +81,24 @@ void SslInfoDlg::setCurrentCert(int index)
     ui.md5Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Md5)));
     ui.sha1Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Sha1)));
 }
     ui.md5Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Md5)));
     ui.sha1Digest->setText(prettyDigest(cert.digest(QCryptographicHash::Sha1)));
 }
+
+// in Qt5, subjectInfo returns a QStringList(); turn this into a comma-separated string instead
+QString SslInfoDlg::subjectInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const
+{
+#if QT_VERSION < 0x050000
+    return cert.subjectInfo(subjectInfo);
+#else
+    return cert.subjectInfo(subjectInfo).join(", ");
+#endif
+}
+
+
+// same here
+QString SslInfoDlg::issuerInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const
+{
+#if QT_VERSION < 0x050000
+    return cert.issuerInfo(subjectInfo);
+#else
+    return cert.issuerInfo(subjectInfo).join(", ");
+#endif
+}
index c13de7b..067cc4c 100644 (file)
@@ -22,6 +22,7 @@
 #define SSLINFODLG_H
 
 #include <QDialog>
 #define SSLINFODLG_H
 
 #include <QDialog>
+#include <QSslCertificate>
 
 #include "ui_sslinfodlg.h"
 
 
 #include "ui_sslinfodlg.h"
 
@@ -31,8 +32,6 @@ class QSslSocket;
 //  SslInfoDialog
 // ========================================
 
 //  SslInfoDialog
 // ========================================
 
-class QSslCertificate;
-
 class SslInfoDlg : public QDialog
 {
     Q_OBJECT
 class SslInfoDlg : public QDialog
 {
     Q_OBJECT
@@ -44,6 +43,11 @@ public:
 private slots:
     void setCurrentCert(int index);
 
 private slots:
     void setCurrentCert(int index);
 
+private:
+    // simplify handling the API changes between Qt4 and Qt5 (QString -> QStringList)
+    QString subjectInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const;
+    QString issuerInfo(const QSslCertificate &cert, QSslCertificate::SubjectInfo subjectInfo) const;
+
 private:
     Ui::SslInfoDlg ui;
     const QSslSocket *_socket;
 private:
     Ui::SslInfoDlg ui;
     const QSslSocket *_socket;