diff options
author | Saturneric <[email protected]> | 2021-05-24 18:34:02 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2021-05-24 18:34:02 +0000 |
commit | d989b48429ff9e37316d3c5c523e3cf53bbf5907 (patch) | |
tree | 892f187bdc8e493a7278892757da778d81c2432c /src/ui/keypair_details/KeySignDialog.cpp | |
parent | Declare and Define getSigners; (diff) | |
download | GpgFrontend-d989b48429ff9e37316d3c5c523e3cf53bbf5907.tar.gz GpgFrontend-d989b48429ff9e37316d3c5c523e3cf53bbf5907.zip |
Streamline, expand and improve the interface of GpgContext.
Fix the wrong use of the query interface for fingerprints or identifiers at VerifyKeyDetailBox.cpp and VerifyNotification.cpp.
Write the processing logic and page logic for adding a signature to the key.
Signed-off-by: Saturneric <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | src/ui/keypair_details/KeySignDialog.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/ui/keypair_details/KeySignDialog.cpp b/src/ui/keypair_details/KeySignDialog.cpp new file mode 100644 index 00000000..5a9b9118 --- /dev/null +++ b/src/ui/keypair_details/KeySignDialog.cpp @@ -0,0 +1,64 @@ +// +// Created by eric on 2021/5/24. +// + +#include "ui/keypair_details/KeySignDialog.h" + +KeySignDialog::KeySignDialog(GpgME::GpgContext *ctx, const GpgKey &key, const QVector<UID> &uid, QWidget *parent) : + mCtx(ctx), mUids(uid), QDialog(parent), mKey(key) { + + mKeyList = new KeyList(ctx, + KeyListRow::ONLY_SECRET_KEY, + KeyListColumn::NAME | KeyListColumn::EmailAddress, + this); + + 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); + + this->setLayout(layout); + this->setModal(true); + this->setWindowTitle(tr("Sign For Key's UID")); + this->adjustSize(); +} + +void KeySignDialog::slotSignKey() { + QVector<GpgKey> keys; + mKeyList->getCheckedKeys(keys); + mCtx->setSigners(keys); + const auto expires = expiresEdit->dateTime(); + + for(const auto &uid : mUids) + mCtx->signKey(mKey, uid.uid, &expires); +} |