diff --git a/core/signatureutils.cpp b/core/signatureutils.cpp index 454a8493f..116132152 100644 --- a/core/signatureutils.cpp +++ b/core/signatureutils.cpp @@ -33,12 +33,12 @@ QByteArray CertificateInfo::serialNumber() const return QByteArray(); } -QString CertificateInfo::issuerInfo(EntityInfoKey) const +QString CertificateInfo::issuerInfo(EntityInfoKey, EmptyString) const { return QString(); } -QString CertificateInfo::subjectInfo(EntityInfoKey) const +QString CertificateInfo::subjectInfo(EntityInfoKey, EmptyString) const { return QString(); } diff --git a/core/signatureutils.h b/core/signatureutils.h index c17c5133d..a6401f3dd 100644 --- a/core/signatureutils.h +++ b/core/signatureutils.h @@ -45,6 +45,10 @@ public: EmailAddress, Organization, }; + /** + * How should certain empty strings be treated + */ + enum class EmptyString { Empty, TranslatedNotAvailable }; /** * Destructor @@ -69,12 +73,12 @@ public: /** * Information about the issuer. */ - virtual QString issuerInfo(EntityInfoKey key) const; + virtual QString issuerInfo(EntityInfoKey key, EmptyString empty) const; /** * Information about the subject */ - virtual QString subjectInfo(EntityInfoKey key) const; + virtual QString subjectInfo(EntityInfoKey key, EmptyString empty) const; /** * The certificate internal database nickname diff --git a/generators/poppler/pdfsettingswidget.cpp b/generators/poppler/pdfsettingswidget.cpp index bd7c075b6..fd44b0c0e 100644 --- a/generators/poppler/pdfsettingswidget.cpp +++ b/generators/poppler/pdfsettingswidget.cpp @@ -19,14 +19,6 @@ #include #include -static QString notAvailableIfEmpty(const QString &string) -{ - if (string.isEmpty()) { - return i18n("Not Available"); - } - return string; -} - PDFSettingsWidget::PDFSettingsWidget(QWidget *parent) : QWidget(parent) { @@ -84,8 +76,8 @@ bool PDFSettingsWidget::event(QEvent *e) for (auto cert : certs) { new QTreeWidgetItem(m_tree, - {notAvailableIfEmpty(cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::CommonName)), - notAvailableIfEmpty(cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::EmailAddress)), + {cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable), + cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::EmailAddress, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable), cert->validityEnd().toString(QStringLiteral("yyyy-MM-dd"))}); } qDeleteAll(certs); diff --git a/generators/poppler/pdfsignatureutils.cpp b/generators/poppler/pdfsignatureutils.cpp index dfbf08ef0..1c06a4da9 100644 --- a/generators/poppler/pdfsignatureutils.cpp +++ b/generators/poppler/pdfsignatureutils.cpp @@ -10,6 +10,14 @@ #include #include +static QString notAvailableIfEmpty(const QString &string) +{ + if (string.isEmpty()) { + return i18n("Not Available"); + } + return string; +} + PopplerCertificateInfo::PopplerCertificateInfo(const Poppler::CertificateInfo &info) : m_info(info) { @@ -34,14 +42,26 @@ QByteArray PopplerCertificateInfo::serialNumber() const return m_info.serialNumber(); } -QString PopplerCertificateInfo::issuerInfo(PopplerCertificateInfo::EntityInfoKey key) const +QString PopplerCertificateInfo::issuerInfo(PopplerCertificateInfo::EntityInfoKey key, CertificateInfo::EmptyString empty) const { - return m_info.issuerInfo(static_cast(key)); + switch (empty) { + case Okular::CertificateInfo::EmptyString::Empty: + return m_info.issuerInfo(static_cast(key)); + case Okular::CertificateInfo::EmptyString::TranslatedNotAvailable: + return notAvailableIfEmpty(m_info.issuerInfo(static_cast(key))); + } + return {}; } -QString PopplerCertificateInfo::subjectInfo(PopplerCertificateInfo::EntityInfoKey key) const +QString PopplerCertificateInfo::subjectInfo(PopplerCertificateInfo::EntityInfoKey key, CertificateInfo::EmptyString empty) const { - return m_info.subjectInfo(static_cast(key)); + switch (empty) { + case Okular::CertificateInfo::EmptyString::Empty: + return m_info.subjectInfo(static_cast(key)); + case Okular::CertificateInfo::EmptyString::TranslatedNotAvailable: + return notAvailableIfEmpty(m_info.subjectInfo(static_cast(key))); + } + return {}; } QString PopplerCertificateInfo::nickName() const diff --git a/generators/poppler/pdfsignatureutils.h b/generators/poppler/pdfsignatureutils.h index 285226b2c..d4bd24da1 100644 --- a/generators/poppler/pdfsignatureutils.h +++ b/generators/poppler/pdfsignatureutils.h @@ -22,8 +22,8 @@ public: bool isNull() const override; int version() const override; QByteArray serialNumber() const override; - QString issuerInfo(EntityInfoKey) const override; - QString subjectInfo(EntityInfoKey) const override; + QString issuerInfo(EntityInfoKey, EmptyString empty) const override; + QString subjectInfo(EntityInfoKey, EmptyString empty) const override; QString nickName() const override; QDateTime validityStart() const override; QDateTime validityEnd() const override; diff --git a/gui/certificatemodel.cpp b/gui/certificatemodel.cpp index 6daadeaca..05d896cfe 100644 --- a/gui/certificatemodel.cpp +++ b/gui/certificatemodel.cpp @@ -73,29 +73,29 @@ QString CertificateModel::propertyVisibleValue(CertificateModel::Property p) con case CertificateModel::SerialNumber: return QString::fromLatin1(m_certificateInfo.serialNumber().toHex(' ')); case CertificateModel::Issuer: - return m_certificateInfo.issuerInfo(Okular::CertificateInfo::DistinguishedName); + return m_certificateInfo.issuerInfo(Okular::CertificateInfo::DistinguishedName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::IssuedOn: return m_certificateInfo.validityStart().toString(Qt::DefaultLocaleLongDate); case CertificateModel::ExpiresOn: return m_certificateInfo.validityEnd().toString(Qt::DefaultLocaleLongDate); case CertificateModel::Subject: - return m_certificateInfo.subjectInfo(Okular::CertificateInfo::DistinguishedName); + return m_certificateInfo.subjectInfo(Okular::CertificateInfo::DistinguishedName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::PublicKey: return i18n("%1 (%2 bits)", SignatureGuiUtils::getReadablePublicKeyType(m_certificateInfo.publicKeyType()), m_certificateInfo.publicKeyStrength()); case CertificateModel::KeyUsage: return SignatureGuiUtils::getReadableKeyUsageCommaSeparated(m_certificateInfo.keyUsageExtensions()); case CertificateModel::IssuerName: - return m_certificateInfo.issuerInfo(Okular::CertificateInfo::CommonName); + return m_certificateInfo.issuerInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::IssuerEmail: - return m_certificateInfo.issuerInfo(Okular::CertificateInfo::EmailAddress); + return m_certificateInfo.issuerInfo(Okular::CertificateInfo::EmailAddress, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::IssuerOrganization: - return m_certificateInfo.issuerInfo(Okular::CertificateInfo::Organization); + return m_certificateInfo.issuerInfo(Okular::CertificateInfo::Organization, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::SubjectName: - return m_certificateInfo.subjectInfo(Okular::CertificateInfo::CommonName); + return m_certificateInfo.subjectInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::SubjectEmail: - return m_certificateInfo.subjectInfo(Okular::CertificateInfo::EmailAddress); + return m_certificateInfo.subjectInfo(Okular::CertificateInfo::EmailAddress, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::SubjectOrganization: - return m_certificateInfo.subjectInfo(Okular::CertificateInfo::Organization); + return m_certificateInfo.subjectInfo(Okular::CertificateInfo::Organization, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); case CertificateModel::Sha1: return QString::fromLatin1(QCryptographicHash::hash(m_certificateInfo.certificateData(), QCryptographicHash::Sha1).toHex(' ')); case CertificateModel::Sha256: diff --git a/part/certificateviewer.cpp b/part/certificateviewer.cpp index 787f96f96..e52086633 100644 --- a/part/certificateviewer.cpp +++ b/part/certificateviewer.cpp @@ -111,14 +111,6 @@ static QString splitDNAttributes(const QString &text) return splitDNAttributes(QStringList {text}); } -static QString notAvailableIfEmpty(const QString &string) -{ - if (string.isEmpty()) { - return i18n("Not Available"); - } - return string; -} - CertificateViewer::CertificateViewer(const Okular::CertificateInfo &certInfo, QWidget *parent) : KPageDialog(parent) , m_certificateInfo(certInfo) @@ -140,16 +132,16 @@ CertificateViewer::CertificateViewer(const Okular::CertificateInfo &certInfo, QW auto issuerBox = new QGroupBox(i18n("Issued By"), generalPage); auto issuerFormLayout = new QFormLayout(issuerBox); issuerFormLayout->setLabelAlignment(Qt::AlignLeft); - issuerFormLayout->addRow(i18n("Common Name(CN)"), new QLabel(notAvailableIfEmpty(m_certificateInfo.issuerInfo(Okular::CertificateInfo::CommonName)))); - issuerFormLayout->addRow(i18n("EMail"), new QLabel(notAvailableIfEmpty(m_certificateInfo.issuerInfo(Okular::CertificateInfo::EmailAddress)))); - issuerFormLayout->addRow(i18n("Organization(O)"), new QLabel(notAvailableIfEmpty(m_certificateInfo.issuerInfo(Okular::CertificateInfo::Organization)))); + issuerFormLayout->addRow(i18n("Common Name(CN)"), new QLabel(m_certificateInfo.issuerInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); + issuerFormLayout->addRow(i18n("EMail"), new QLabel(m_certificateInfo.issuerInfo(Okular::CertificateInfo::EmailAddress, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); + issuerFormLayout->addRow(i18n("Organization(O)"), new QLabel(m_certificateInfo.issuerInfo(Okular::CertificateInfo::Organization, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); auto subjectBox = new QGroupBox(i18n("Issued To"), generalPage); auto subjectFormLayout = new QFormLayout(subjectBox); subjectFormLayout->setLabelAlignment(Qt::AlignLeft); - subjectFormLayout->addRow(i18n("Common Name(CN)"), new QLabel(notAvailableIfEmpty(m_certificateInfo.subjectInfo(Okular::CertificateInfo::CommonName)))); - subjectFormLayout->addRow(i18n("EMail"), new QLabel(notAvailableIfEmpty(m_certificateInfo.subjectInfo(Okular::CertificateInfo::EmailAddress)))); - subjectFormLayout->addRow(i18n("Organization(O)"), new QLabel(notAvailableIfEmpty(m_certificateInfo.subjectInfo(Okular::CertificateInfo::Organization)))); + subjectFormLayout->addRow(i18n("Common Name(CN)"), new QLabel(m_certificateInfo.subjectInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); + subjectFormLayout->addRow(i18n("EMail"), new QLabel(m_certificateInfo.subjectInfo(Okular::CertificateInfo::EmailAddress, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); + subjectFormLayout->addRow(i18n("Organization(O)"), new QLabel(m_certificateInfo.subjectInfo(Okular::CertificateInfo::Organization, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable))); auto validityBox = new QGroupBox(i18n("Validity"), generalPage); auto validityFormLayout = new QFormLayout(validityBox); diff --git a/part/pageviewannotator.cpp b/part/pageviewannotator.cpp index f1b080a83..3fd6aacd1 100644 --- a/part/pageviewannotator.cpp +++ b/part/pageviewannotator.cpp @@ -377,7 +377,7 @@ public: documentPassword.clear(); } else { certNicknameToUse = signInfo->certificate->nickName(); - certCommonName = signInfo->certificate->subjectInfo(Okular::CertificateInfo::CommonName); + certCommonName = signInfo->certificate->subjectInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable); passToUse = signInfo->certificatePassword; documentPassword = signInfo->documentPassword; } diff --git a/part/signaturepartutils.cpp b/part/signaturepartutils.cpp index 371c176aa..a574297e2 100644 --- a/part/signaturepartutils.cpp +++ b/part/signaturepartutils.cpp @@ -51,15 +51,15 @@ std::optional getCertificateAndPasswordForSigning(PageView * int minWidth = -1; for (auto cert : qAsConst(certs)) { auto item = std::make_unique(); - QString commonName = cert->subjectInfo(Okular::CertificateInfo::CommonName); + QString commonName = cert->subjectInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::Empty); item->setData(commonName, Qt::UserRole); - QString emailAddress = cert->subjectInfo(Okular::CertificateInfo::EmailAddress); + QString emailAddress = cert->subjectInfo(Okular::CertificateInfo::EmailAddress, Okular::CertificateInfo::EmptyString::Empty); item->setData(emailAddress, Qt::UserRole + 1); minWidth = std::max(minWidth, std::max(cert->nickName().size(), emailAddress.size() + commonName.size())); item->setData(cert->nickName(), Qt::DisplayRole); - item->setData(cert->subjectInfo(Okular::CertificateInfo::DistinguishedName), Qt::ToolTipRole); + item->setData(cert->subjectInfo(Okular::CertificateInfo::DistinguishedName, Okular::CertificateInfo::EmptyString::Empty), Qt::ToolTipRole); item->setEditable(false); items.appendRow(item.release()); nickToCert[cert->nickName()] = cert; @@ -141,7 +141,7 @@ void signUnsignedSignature(const Okular::FormFieldSignature *form, PageView *pag Okular::NewSignatureData data; data.setCertNickname(signingInfo->certificate->nickName()); - data.setCertSubjectCommonName(signingInfo->certificate->subjectInfo(Okular::CertificateInfo::CommonName)); + data.setCertSubjectCommonName(signingInfo->certificate->subjectInfo(Okular::CertificateInfo::CommonName, Okular::CertificateInfo::EmptyString::TranslatedNotAvailable)); data.setPassword(signingInfo->certificatePassword); data.setDocumentPassword(signingInfo->documentPassword);