From 4f2cd3a0c6a8f3633040ff0e8cca787b2bd61fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Tue, 11 Aug 2020 17:02:25 +0200 Subject: [PATCH] qt: Support changing expiry of subkeys * lang/qt/src/changeexpiryjob.h (ChangeExpiryJob::start): New overload that accepts subkeys (with empty implementation). * lang/qt/src/qgpgmechangeexpiryjob.h, lang/qt/src/qgpgmechangeexpiryjob.cpp (QGpgMEChangeExpiryJob::start): New overload that accepts subkeys. -- This adds the possibility to change the expiry of subkeys. GnuPG-bug-id: 4717 --- NEWS | 3 +++ lang/qt/src/changeexpiryjob.h | 19 ++++++++++++++++++- lang/qt/src/qgpgmechangeexpiryjob.cpp | 19 ++++++++++++++++--- lang/qt/src/qgpgmechangeexpiryjob.h | 5 +++++ 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 08d40116..2b74c69f 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,9 @@ Noteworthy changes in version 1.14.1 (unreleased) * cpp: Support for set expire operations in the C++ bindings. [#5003] + * qt: Extended ChangeExpiryJob to support changing the expiry of + subkeys. [#4717] + * Interface changes relative to the 1.14.0 release: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gpgme_op_setexpire_start NEW. diff --git a/lang/qt/src/changeexpiryjob.h b/lang/qt/src/changeexpiryjob.h index 90834791..39ed52ea 100644 --- a/lang/qt/src/changeexpiryjob.h +++ b/lang/qt/src/changeexpiryjob.h @@ -37,10 +37,17 @@ #include "job.h" +#ifdef BUILDING_QGPGME +# include "key.h" +#else +# include +#endif + +#include + namespace GpgME { class Error; -class Key; } class QDateTime; @@ -76,6 +83,16 @@ public: */ virtual GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) = 0; + /** + Starts the change-expiry operation. \a key is the key to change, + \a subkeys is a list of subkeys of the key, and \a expiry is the + new expiry time. If \a subkeys is empty, then the expiry of \a key + is changed. Otherwise, the expiry of \a subkeys is changed. If + \a expiry is not valid, then \a key or \a subkeys are set to never expire. + */ + virtual GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry, + const std::vector &subkeys); + Q_SIGNALS: void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error()); }; diff --git a/lang/qt/src/qgpgmechangeexpiryjob.cpp b/lang/qt/src/qgpgmechangeexpiryjob.cpp index 6eb5855f..68591b7e 100644 --- a/lang/qt/src/qgpgmechangeexpiryjob.cpp +++ b/lang/qt/src/qgpgmechangeexpiryjob.cpp @@ -54,20 +54,33 @@ QGpgMEChangeExpiryJob::QGpgMEChangeExpiryJob(Context *context) QGpgMEChangeExpiryJob::~QGpgMEChangeExpiryJob() {} -static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry) +static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry, + const std::vector &subkeys) { // convert expiry to "seconds from now"; use 1 second from now if expiry is before the current datetime const unsigned long expires = expiry.isValid() ? std::max(QDateTime::currentDateTime().secsTo(expiry), 1) : 0; - auto err = ctx->setExpire(key, expires); + auto err = ctx->setExpire(key, expires, subkeys); return std::make_tuple(err, QString(), Error()); } Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry) { - run(std::bind(&change_expiry, std::placeholders::_1, key, expiry)); + return start(key, expiry, std::vector()); +} + +Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry, const std::vector &subkeys) +{ + run(std::bind(&change_expiry, std::placeholders::_1, key, expiry, subkeys)); return Error(); } + +/* For ABI compat not pure virtual. */ +Error ChangeExpiryJob::start(const Key &, const QDateTime &, const std::vector &) +{ + return Error(); +} + #include "qgpgmechangeexpiryjob.moc" diff --git a/lang/qt/src/qgpgmechangeexpiryjob.h b/lang/qt/src/qgpgmechangeexpiryjob.h index 83565686..bb9b9ba8 100644 --- a/lang/qt/src/qgpgmechangeexpiryjob.h +++ b/lang/qt/src/qgpgmechangeexpiryjob.h @@ -60,6 +60,11 @@ public: /* from ChangeExpiryJob */ GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry) Q_DECL_OVERRIDE; + + /* from ChangeExpiryJob */ + GpgME::Error start(const GpgME::Key &key, const QDateTime &expiry, + const std::vector &subkeys) Q_DECL_OVERRIDE; + }; }