File indexing completed on 2024-06-23 05:14:02

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     dialogs/signcertificatedialog.cpp
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB
0006     SPDX-FileCopyrightText: 2019 g10code GmbH
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include <config-kleopatra.h>
0012 
0013 #include "kleopatra_debug.h"
0014 
0015 #include "certifycertificatedialog.h"
0016 
0017 #include "certifywidget.h"
0018 
0019 #include <Libkleo/Algorithm>
0020 #include <Libkleo/Formatting>
0021 #include <Libkleo/KeyHelpers>
0022 #include <Libkleo/Stl_Util>
0023 
0024 #include <KConfigGroup>
0025 #include <KLocalizedString>
0026 #include <KMessageBox>
0027 #include <KSharedConfig>
0028 #include <KStandardGuiItem>
0029 
0030 #include <QDialogButtonBox>
0031 #include <QKeyEvent>
0032 #include <QPushButton>
0033 #include <QVBoxLayout>
0034 
0035 #include <gpg-error.h>
0036 
0037 using namespace GpgME;
0038 using namespace Kleo;
0039 
0040 CertifyCertificateDialog::CertifyCertificateDialog(QWidget *p, Qt::WindowFlags f)
0041     : QDialog(p, f)
0042 {
0043     setWindowTitle(i18nc("@title:window", "Certify Certificates"));
0044     setWindowFlags(windowFlags() & (~Qt::WindowContextHelpButtonHint));
0045 
0046     // Setup GUI
0047     auto mainLay = new QVBoxLayout(this);
0048     mCertWidget = new CertifyWidget(this);
0049     mainLay->addWidget(mCertWidget);
0050 
0051     auto buttonBox = new QDialogButtonBox{this};
0052     buttonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
0053     const auto okButton = buttonBox->button(QDialogButtonBox::Ok);
0054     KGuiItem::assign(okButton, KStandardGuiItem::ok());
0055     okButton->setText(i18n("Certify"));
0056     KGuiItem::assign(buttonBox->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
0057     connect(buttonBox, &QDialogButtonBox::accepted, this, &CertifyCertificateDialog::accept);
0058     connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::close);
0059 
0060     mainLay->addWidget(buttonBox);
0061 
0062     okButton->setEnabled(mCertWidget->isValid());
0063     connect(mCertWidget, &CertifyWidget::changed, this, [this, okButton]() {
0064         okButton->setEnabled(mCertWidget->isValid());
0065     });
0066 
0067     KConfigGroup cfgGroup(KSharedConfig::openStateConfig(), QStringLiteral("CertifyDialog"));
0068     const auto size = cfgGroup.readEntry("Size", QSize{640, 480});
0069     if (size.isValid()) {
0070         resize(size);
0071     }
0072 }
0073 
0074 CertifyCertificateDialog::~CertifyCertificateDialog()
0075 {
0076     KConfigGroup cfgGroup(KSharedConfig::openStateConfig(), QStringLiteral("CertifyDialog"));
0077     cfgGroup.writeEntry("Size", size());
0078     cfgGroup.sync();
0079 }
0080 
0081 void CertifyCertificateDialog::setCertificateToCertify(const Key &key, const std::vector<GpgME::UserID> &uids)
0082 {
0083     Q_ASSERT(Kleo::all_of(uids, [key](const auto &uid) {
0084         return Kleo::userIDBelongsToKey(uid, key);
0085     }));
0086     setWindowTitle(i18nc("@title:window arg is name, email of certificate holder", "Certify Certificate: %1", Formatting::prettyName(key)));
0087     mCertWidget->setCertificate(key, uids);
0088 }
0089 
0090 void CertifyCertificateDialog::setCertificatesToCertify(const std::vector<GpgME::Key> &keys)
0091 {
0092     mCertWidget->setCertificates(keys);
0093 }
0094 
0095 void CertifyCertificateDialog::setGroupName(const QString &name)
0096 {
0097     setWindowTitle(i18nc("@title:window Certify Certificate Group <group name>", "Certify Certificate Group %1", name));
0098 }
0099 
0100 bool CertifyCertificateDialog::exportableCertificationSelected() const
0101 {
0102     return mCertWidget->exportableSelected();
0103 }
0104 
0105 bool CertifyCertificateDialog::trustSignatureSelected() const
0106 {
0107     return mCertWidget->trustSignatureSelected();
0108 }
0109 
0110 QString CertifyCertificateDialog::trustSignatureDomain() const
0111 {
0112     return mCertWidget->trustSignatureDomain();
0113 }
0114 
0115 Key CertifyCertificateDialog::selectedSecretKey() const
0116 {
0117     return mCertWidget->secKey();
0118 }
0119 
0120 bool CertifyCertificateDialog::sendToServer() const
0121 {
0122     return mCertWidget->publishSelected();
0123 }
0124 
0125 void CertifyCertificateDialog::setSelectedUserIDs(const std::vector<UserID> &uids)
0126 {
0127     mCertWidget->selectUserIDs(uids);
0128 }
0129 
0130 std::vector<GpgME::UserID> CertifyCertificateDialog::selectedUserIDs() const
0131 {
0132     return mCertWidget->selectedUserIDs();
0133 }
0134 
0135 QString CertifyCertificateDialog::tags() const
0136 {
0137     return mCertWidget->tags();
0138 }
0139 
0140 QDate CertifyCertificateDialog::expirationDate() const
0141 {
0142     return mCertWidget->expirationDate();
0143 }
0144 
0145 void CertifyCertificateDialog::accept()
0146 {
0147     if (!mCertWidget->isValid()) {
0148         return;
0149     }
0150 
0151     mCertWidget->saveState();
0152 
0153     QDialog::accept();
0154 }
0155 
0156 #include "moc_certifycertificatedialog.cpp"