aboutsummaryrefslogtreecommitdiffstats
path: root/lang/qt/src/qgpgmesignkeyjob.cpp
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2021-05-05 16:38:16 +0000
committerIngo Klöcker <[email protected]>2021-05-05 17:26:33 +0000
commitf0858e45b0be260730e742643e741547123d4287 (patch)
tree9fb594a4d50c4155f59ac29b80068a1ae28bd7e7 /lang/qt/src/qgpgmesignkeyjob.cpp
parentqt: Pimpl QGpgMESignKeyJob (diff)
downloadgpgme-f0858e45b0be260730e742643e741547123d4287.tar.gz
gpgme-f0858e45b0be260730e742643e741547123d4287.zip
qt: Extend SignKeyJob to create trust signatures
* lang/qt/src/signkeyjob.h (SignKeyJob::setTrustSignature): New. * lang/qt/src/qgpgmesignkeyjob.h, lang/qt/src/qgpgmesignkeyjob.cpp (QGpgMESignKeyJob::setTrustSignature): New. * lang/qt/src/qgpgmesignkeyjob.cpp (sign_key): Handle trust signatures. (QGpgMESignKeyJob::start): Pass trust signature attributes to sign_key. (QGpgMESignKeyJob::setTrustSignature): New. -- This allows Kleopatra to create trust signatures for trusted introducers. GnuPG-bug-id: 5245, 5421
Diffstat (limited to 'lang/qt/src/qgpgmesignkeyjob.cpp')
-rw-r--r--lang/qt/src/qgpgmesignkeyjob.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/lang/qt/src/qgpgmesignkeyjob.cpp b/lang/qt/src/qgpgmesignkeyjob.cpp
index 73dd9a88..75ebeb04 100644
--- a/lang/qt/src/qgpgmesignkeyjob.cpp
+++ b/lang/qt/src/qgpgmesignkeyjob.cpp
@@ -51,6 +51,15 @@
using namespace QGpgME;
using namespace GpgME;
+namespace
+{
+struct TrustSignatureProperties {
+ TrustSignatureTrust trust = TrustSignatureTrust::None;
+ unsigned int depth = 0;
+ QString scope;
+};
+}
+
class QGpgMESignKeyJob::Private
{
public:
@@ -64,6 +73,7 @@ public:
bool m_started = false;
bool m_dupeOk = false;
QString m_remark;
+ TrustSignatureProperties m_trustSignature;
};
QGpgMESignKeyJob::QGpgMESignKeyJob(Context *context)
@@ -77,7 +87,8 @@ QGpgMESignKeyJob::~QGpgMESignKeyJob() {}
static QGpgMESignKeyJob::result_type sign_key(Context *ctx, const Key &key, const std::vector<unsigned int> &uids,
unsigned int checkLevel, const Key &signer, unsigned int opts,
- bool dupeOk, const QString &remark)
+ bool dupeOk, const QString &remark,
+ const TrustSignatureProperties &trustSignature)
{
QGpgME::QByteArrayDataProvider dp;
Data data(&dp);
@@ -97,6 +108,12 @@ static QGpgMESignKeyJob::result_type sign_key(Context *ctx, const Key &key, cons
ctx->addSignatureNotation("[email protected]", remark.toUtf8().constData());
}
+ if (opts & GpgSignKeyEditInteractor::Trust) {
+ skei->setTrustSignatureTrust(trustSignature.trust);
+ skei->setTrustSignatureDepth(trustSignature.depth);
+ skei->setTrustSignatureScope(trustSignature.scope.toUtf8().toStdString());
+ }
+
if (!signer.isNull())
if (const Error err = ctx->addSigningKey(signer)) {
return std::make_tuple(err, QString(), Error());
@@ -116,8 +133,17 @@ Error QGpgMESignKeyJob::start(const Key &key)
if (d->m_exportable) {
opts |= GpgSignKeyEditInteractor::Exportable;
}
+ switch (d->m_trustSignature.trust) {
+ case TrustSignatureTrust::Partial:
+ case TrustSignatureTrust::Complete:
+ opts |= GpgSignKeyEditInteractor::Trust;
+ break;
+ default:
+ opts &= ~GpgSignKeyEditInteractor::Trust;
+ break;
+ }
run(std::bind(&sign_key, std::placeholders::_1, key, d->m_userIDsToSign, d->m_checkLevel, d->m_signingKey,
- opts, d->m_dupeOk, d->m_remark));
+ opts, d->m_dupeOk, d->m_remark, d->m_trustSignature));
d->m_started = true;
return Error();
}
@@ -163,4 +189,12 @@ void QGpgMESignKeyJob::setDupeOk(bool value)
assert(!d->m_started);
d->m_dupeOk = value;
}
+
+void QGpgMESignKeyJob::setTrustSignature(GpgME::TrustSignatureTrust trust, unsigned short depth, const QString &scope)
+{
+ assert(!d->m_started);
+ assert(depth <= 255);
+ d->m_trustSignature = {trust, depth, scope};
+}
+
#include "qgpgmesignkeyjob.moc"