aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/keypair_details/KeyUIDSignDialog.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2021-05-26 18:56:05 +0000
committerSaturneric <[email protected]>2021-05-26 18:56:05 +0000
commit2f1b0b6af6c7c21134030d990a36f458d8a9600e (patch)
treee1ee1f16a0a03fe341156d2e1db3e42015fffce6 /src/ui/keypair_details/KeyUIDSignDialog.cpp
parentImprove the key information update mechanism (diff)
downloadGpgFrontend-2f1b0b6af6c7c21134030d990a36f458d8a9600e.tar.gz
GpgFrontend-2f1b0b6af6c7c21134030d990a36f458d8a9600e.zip
Fix the wrong use of the signing key interface.
Fix the problem that the window or control is not deleted after it is closed. Modify the names of some classes. Extend the function of KeyList, add exclusion list. Improve the message mechanism of GpgContext. Fix the problem caused by incorrect API calls caused by incorrect understanding of the gpgme document. Signed-off-by: Saturneric <[email protected]>
Diffstat (limited to 'src/ui/keypair_details/KeyUIDSignDialog.cpp')
-rw-r--r--src/ui/keypair_details/KeyUIDSignDialog.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/ui/keypair_details/KeyUIDSignDialog.cpp b/src/ui/keypair_details/KeyUIDSignDialog.cpp
new file mode 100644
index 00000000..64a15865
--- /dev/null
+++ b/src/ui/keypair_details/KeyUIDSignDialog.cpp
@@ -0,0 +1,88 @@
+//
+// Created by eric on 2021/5/24.
+//
+
+#include "ui/keypair_details/KeyUIDSignDialog.h"
+
+KeyUIDSignDialog::KeyUIDSignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QVector<UID> &uid, QWidget *parent) :
+ mKey(key), mCtx(ctx), mUids(uid), QDialog(parent) {
+
+ mKeyList = new KeyList(ctx,
+ KeyListRow::ONLY_SECRET_KEY,
+ KeyListColumn::NAME | KeyListColumn::EmailAddress,
+ this);
+
+ mKeyList->setExcludeKeys({key.id});
+ mKeyList->slotRefresh();
+
+ signKeyButton = new QPushButton("Sign");
+
+ /**
+ * A DateTime after 5 Years is recommend.
+ */
+ expiresEdit = new QDateTimeEdit(QDateTime::currentDateTime().addYears(5));
+ expiresEdit->setMinimumDateTime(QDateTime::currentDateTime());
+
+ /**
+ * Note further that the OpenPGP protocol uses 32 bit values for timestamps
+ * and thus can only encode dates up to the year 2106.
+ */
+ expiresEdit->setMaximumDate(QDate(2106, 1, 1));
+
+ nonExpireCheck = new QCheckBox("Non Expired");
+ nonExpireCheck->setTristate(false);
+
+ connect(nonExpireCheck, &QCheckBox::stateChanged, this, [this] (int state) -> void {
+ if(state == 0)
+ expiresEdit->setDisabled(false);
+ else
+ expiresEdit->setDisabled(true);
+ });
+
+ auto layout = new QGridLayout();
+
+ auto timeLayout = new QGridLayout();
+
+ layout->addWidget(mKeyList, 0, 0);
+ layout->addWidget(signKeyButton, 2, 0, Qt::AlignRight);
+ timeLayout->addWidget(new QLabel(tr("Expired Time")), 0, 0);
+ timeLayout->addWidget(expiresEdit, 0, 1);
+ timeLayout->addWidget(nonExpireCheck, 0, 2);
+ layout->addLayout(timeLayout, 1, 0);
+
+ connect(signKeyButton, SIGNAL(clicked(bool)), this, SLOT(slotSignKey(bool)));
+
+ this->setLayout(layout);
+ this->setModal(true);
+ this->setWindowTitle(tr("Sign For Key's UID(s)"));
+ this->adjustSize();
+
+ setAttribute(Qt::WA_DeleteOnClose, true);
+}
+
+void KeyUIDSignDialog::slotSignKey(bool clicked) {
+
+ // Set Signers
+ QVector<GpgKey> keys;
+ mKeyList->getCheckedKeys(keys);
+ mCtx->setSigners(keys);
+
+ const auto expires = expiresEdit->dateTime();
+
+ for(const auto &uid : mUids) {
+ // Sign For mKey
+ if (!mCtx->signKey(mKey, uid.uid, &expires)) {
+ QMessageBox::critical(nullptr,
+ tr("Operation Unsuccessful"),
+ QString("%1 <%2>"+tr(" signature operation failed for UID ") + "%3")
+ .arg(mKey.name, mKey.email, uid.uid));
+ }
+
+ }
+
+ QMessageBox::information(nullptr,
+ tr("Operation Complete"),
+ tr("The signature operation of the UID is complete"));
+
+ this->close();
+}