mirror of
https://invent.kde.org/graphics/okular
synced 2024-11-05 18:34:53 +00:00
1c3e5b23d2
This is sub-optimal since will not check if the certificate has been revoked but is more privacy friendly since doesn't leak to the certificate authority server that you're trying to validate a given certificate
108 lines
3.6 KiB
C++
108 lines
3.6 KiB
C++
/*
|
|
SPDX-FileCopyrightText: 2019 Bubli <Katarina.Behrens@cib.de>
|
|
SPDX-FileCopyrightText: 2020 Albert Astals Cid <albert.astals.cid@kdab.com>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include "pdfsettingswidget.h"
|
|
|
|
#include "pdfsettings.h"
|
|
#include "pdfsignatureutils.h"
|
|
|
|
#include <KLocalizedString>
|
|
#include <KUrlRequester>
|
|
|
|
#include <QEvent>
|
|
#include <QHBoxLayout>
|
|
#include <QMessageBox>
|
|
#include <QTreeWidget>
|
|
#include <QTreeWidgetItem>
|
|
|
|
PDFSettingsWidget::PDFSettingsWidget(QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
m_pdfsw.setupUi(this);
|
|
#ifdef HAVE_POPPLER_SIGNING
|
|
if (Poppler::hasNSSSupport()) {
|
|
m_pdfsw.loadSignaturesButton->hide();
|
|
|
|
KUrlRequester *pDlg = new KUrlRequester();
|
|
pDlg->setObjectName(QStringLiteral("kcfg_DBCertificatePath"));
|
|
pDlg->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly);
|
|
pDlg->setEnabled(false);
|
|
m_pdfsw.formLayout->setWidget(1, QFormLayout::FieldRole, pDlg);
|
|
|
|
connect(m_pdfsw.customRadioButton, &QRadioButton::toggled, pDlg, &KUrlRequester::setEnabled);
|
|
|
|
if (!PDFSettings::useDefaultCertDB()) {
|
|
m_pdfsw.customRadioButton->setChecked(true);
|
|
m_pdfsw.defaultLabel->setVisible(false);
|
|
}
|
|
|
|
m_tree = new QTreeWidget(this);
|
|
m_tree->setHeaderLabels({i18nc("Name of the person to whom the cerficate was issued", "Issued to"), i18n("E-mail"), i18nc("Certificate expiration date", "Expiration date")});
|
|
m_tree->setRootIsDecorated(false);
|
|
|
|
m_pdfsw.certificatesPlaceholder->addWidget(m_tree);
|
|
|
|
connect(PDFSettings::self(), &PDFSettings::useDefaultDBChanged, this, &PDFSettingsWidget::warnRestartNeeded);
|
|
connect(PDFSettings::self(), &PDFSettings::dBCertificatePathChanged, this, [this] {
|
|
if (!PDFSettings::useDefaultCertDB()) {
|
|
warnRestartNeeded();
|
|
}
|
|
});
|
|
connect(m_pdfsw.loadSignaturesButton, &QPushButton::clicked, this, [this] {
|
|
m_certificatesAsked = false;
|
|
update();
|
|
});
|
|
} else {
|
|
QHBoxLayout *lay = new QHBoxLayout(this);
|
|
QLabel *l = new QLabel(i18n("You are using a Poppler library built without NSS support.\nAdding Digital Signatures isn't available for that reason"));
|
|
l->setWordWrap(true);
|
|
lay->addWidget(l);
|
|
}
|
|
#else
|
|
m_pdfsw.certDBGroupBox->hide();
|
|
m_pdfsw.certificatesGroup->hide();
|
|
m_pdfsw.loadSignaturesButton->hide();
|
|
#endif
|
|
|
|
#ifndef HAVE_POPPLER_21_10
|
|
m_pdfsw.kcfg_CheckOCSPServers->hide();
|
|
#endif
|
|
}
|
|
|
|
bool PDFSettingsWidget::event(QEvent *e)
|
|
{
|
|
if (m_tree && e->type() == QEvent::Paint && !m_certificatesAsked) {
|
|
m_certificatesAsked = true;
|
|
|
|
#ifdef HAVE_POPPLER_SIGNING
|
|
PopplerCertificateStore st;
|
|
bool userCancelled;
|
|
const QList<Okular::CertificateInfo *> certs = st.signingCertificates(&userCancelled);
|
|
|
|
m_pdfsw.loadSignaturesButton->setVisible(userCancelled);
|
|
|
|
for (auto cert : certs) {
|
|
new QTreeWidgetItem(m_tree, {cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::CommonName), cert->subjectInfo(Okular::CertificateInfo::EntityInfoKey::EmailAddress), cert->validityEnd().toString("yyyy-MM-dd")});
|
|
}
|
|
qDeleteAll(certs);
|
|
|
|
m_pdfsw.defaultLabel->setText(Poppler::getNSSDir());
|
|
|
|
m_tree->resizeColumnToContents(1);
|
|
m_tree->resizeColumnToContents(0);
|
|
#endif
|
|
}
|
|
return QWidget::event(e);
|
|
}
|
|
|
|
void PDFSettingsWidget::warnRestartNeeded()
|
|
{
|
|
if (!m_warnedAboutRestart) {
|
|
m_warnedAboutRestart = true;
|
|
QMessageBox::information(this, i18n("Restart needed"), i18n("You need to restart Okular after changing the NSS directory settings"));
|
|
}
|
|
}
|