Only have one place for deciding on Not Available string vs empty string

remotes/origin/work/svuorela/better-select-certificate-for-signing-dialog
Sune Vuorela 3 years ago
parent ae19ef4741
commit c77616444b
  1. 4
      core/signatureutils.cpp
  2. 8
      core/signatureutils.h
  3. 12
      generators/poppler/pdfsettingswidget.cpp
  4. 28
      generators/poppler/pdfsignatureutils.cpp
  5. 4
      generators/poppler/pdfsignatureutils.h
  6. 16
      gui/certificatemodel.cpp
  7. 20
      part/certificateviewer.cpp
  8. 2
      part/pageviewannotator.cpp
  9. 8
      part/signaturepartutils.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();
}

@ -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

@ -19,14 +19,6 @@
#include <QTreeWidget>
#include <QTreeWidgetItem>
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);

@ -10,6 +10,14 @@
#include <QDebug>
#include <QInputDialog>
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<Poppler::CertificateInfo::EntityInfoKey>(key));
switch (empty) {
case Okular::CertificateInfo::EmptyString::Empty:
return m_info.issuerInfo(static_cast<Poppler::CertificateInfo::EntityInfoKey>(key));
case Okular::CertificateInfo::EmptyString::TranslatedNotAvailable:
return notAvailableIfEmpty(m_info.issuerInfo(static_cast<Poppler::CertificateInfo::EntityInfoKey>(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<Poppler::CertificateInfo::EntityInfoKey>(key));
switch (empty) {
case Okular::CertificateInfo::EmptyString::Empty:
return m_info.subjectInfo(static_cast<Poppler::CertificateInfo::EntityInfoKey>(key));
case Okular::CertificateInfo::EmptyString::TranslatedNotAvailable:
return notAvailableIfEmpty(m_info.subjectInfo(static_cast<Poppler::CertificateInfo::EntityInfoKey>(key)));
}
return {};
}
QString PopplerCertificateInfo::nickName() const

@ -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;

@ -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:

@ -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);

@ -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;
}

@ -51,15 +51,15 @@ std::optional<SigningInformation> getCertificateAndPasswordForSigning(PageView *
int minWidth = -1;
for (auto cert : qAsConst(certs)) {
auto item = std::make_unique<QStandardItem>();
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);

Loading…
Cancel
Save