Use parsed distinguished name from poppler

This gives us the possibility to get rid of the "poor man's" parser in
certificateviewer.cpp once we can start requiring the newer poppler.
remotes/origin/work/sune/use-parsed-distinguished-name
Sune Vuorela 3 years ago
parent 7c2c9a1231
commit 654768c0b5
  1. 10
      core/signatureutils.cpp
  2. 10
      core/signatureutils.h
  3. 18
      generators/poppler/pdfsignatureutils.cpp
  4. 2
      generators/poppler/pdfsignatureutils.h
  5. 29
      gui/certificatemodel.cpp
  6. 4
      gui/certificatemodel.h
  7. 17
      part/certificateviewer.cpp

@ -43,6 +43,16 @@ QString CertificateInfo::subjectInfo(EntityInfoKey) const
return QString();
}
QVector<QPair<QString, QString>> CertificateInfo::splitIssuerDN() const
{
return {};
}
QVector<QPair<QString, QString>> CertificateInfo::splitSubjectDN() const
{
return {};
}
QString CertificateInfo::nickName() const
{
return QString();

@ -71,11 +71,21 @@ public:
*/
virtual QString issuerInfo(EntityInfoKey key) const;
/**
* The issuer distinguished name, parsed and split up
*/
virtual QVector<QPair<QString, QString>> splitIssuerDN() const;
/**
* Information about the subject
*/
virtual QString subjectInfo(EntityInfoKey key) const;
/**
* The subject distinguished name, parsed and split up
*/
virtual QVector<QPair<QString, QString>> splitSubjectDN() const;
/**
* The certificate internal database nickname
*/

@ -46,6 +46,24 @@ QString PopplerCertificateInfo::subjectInfo(PopplerCertificateInfo::EntityInfoKe
return !str.isEmpty() ? str : i18n("Not Available");
}
QVector<QPair<QString, QString>> PopplerCertificateInfo::splitIssuerDN() const
{
#if POPPLER_VERSION_MACRO >= QT_VERSION_CHECK(23, 05, 0)
return m_info.splitIssuerDN();
#else
return {};
#endif
}
QVector<QPair<QString, QString>> PopplerCertificateInfo::splitSubjectDN() const
{
#if POPPLER_VERSION_MACRO >= QT_VERSION_CHECK(23, 05, 0)
return m_info.splitSubjectDN();
#else
return {};
#endif
}
QString PopplerCertificateInfo::nickName() const
{
return m_info.nickName();

@ -23,7 +23,9 @@ public:
int version() const override;
QByteArray serialNumber() const override;
QString issuerInfo(EntityInfoKey) const override;
QVector<QPair<QString, QString>> splitIssuerDN() const override;
QString subjectInfo(EntityInfoKey) const override;
QVector<QPair<QString, QString>> splitSubjectDN() const override;
QString nickName() const override;
QDateTime validityStart() const override;
QDateTime validityEnd() const override;

@ -104,6 +104,33 @@ QString CertificateModel::propertyVisibleValue(CertificateModel::Property p) con
return QString();
}
QVariant CertificateModel::propertyVisibleDetailValue(CertificateModel::Property p) const
{
switch (p) {
case CertificateModel::Issuer: {
// let's see if we have a pre-parsed one
auto preParsed = m_certificateInfo.splitIssuerDN();
if (!preParsed.isEmpty()) {
return QVariant::fromValue(preParsed);
} else {
return propertyVisibleValue(p);
}
}
case CertificateModel::Subject: {
// let's see if we have a pre-parsed one
auto preParsed = m_certificateInfo.splitSubjectDN();
if (!preParsed.isEmpty()) {
return QVariant::fromValue(preParsed);
} else {
return propertyVisibleValue(p);
}
}
default:
return propertyVisibleValue(p);
}
return QVariant();
}
QVariant CertificateModel::data(const QModelIndex &index, int role) const
{
const int row = index.row();
@ -126,6 +153,8 @@ QVariant CertificateModel::data(const QModelIndex &index, int role) const
return m_certificateProperties[row];
case PropertyVisibleValueRole:
return propertyVisibleValue(m_certificateProperties[row]);
case PropertyVisibleDetailRole:
return propertyVisibleDetailValue(m_certificateProperties[row]);
}
return QVariant();

@ -19,7 +19,7 @@ class CertificateModel : public QAbstractTableModel
public:
explicit CertificateModel(const Okular::CertificateInfo &certInfo, QObject *parent = nullptr);
enum { PropertyKeyRole = Qt::UserRole, PropertyVisibleValueRole };
enum { PropertyKeyRole = Qt::UserRole, PropertyVisibleValueRole, PropertyVisibleDetailRole };
enum Property { Version, SerialNumber, Issuer, IssuedOn, ExpiresOn, Subject, PublicKey, KeyUsage, IssuerName, IssuerEmail, IssuerOrganization, SubjectName, SubjectEmail, SubjectOrganization, Sha1, Sha256 };
Q_ENUM(Property)
@ -32,6 +32,8 @@ public:
Q_INVOKABLE QString propertyVisibleValue(CertificateModel::Property p) const;
Q_INVOKABLE bool exportCertificateTo(const QString &path);
QVariant propertyVisibleDetailValue(CertificateModel::Property p) const;
private:
QVector<Property> m_certificateProperties;
const Okular::CertificateInfo &m_certificateInfo;

@ -204,9 +204,20 @@ void CertificateViewer::updateText(const QModelIndex &index)
text = m_certificateModel->data(index, CertificateModel::PropertyVisibleValueRole).toString();
break;
case CertificateModel::Issuer:
case CertificateModel::Subject:
text = splitDNAttributes(m_certificateModel->data(index, CertificateModel::PropertyVisibleValueRole).toString());
break;
case CertificateModel::Subject: {
auto data = m_certificateModel->data(index, CertificateModel::PropertyVisibleDetailRole);
if (data.canConvert<QVector<QPair<QString, QString>>>()) {
auto vector = data.value<QVector<QPair<QString, QString>>>();
for (auto &&pair : vector) {
if (!text.isEmpty()) {
text += QLatin1Char('\n');
}
text += pair.first + QLatin1Char('=') + pair.second;
}
} else {
text = splitDNAttributes(data.toString());
}
} break;
case CertificateModel::PublicKey:
text = QString::fromLatin1(m_certificateInfo.publicKey().toHex(' '));
break;

Loading…
Cancel
Save