diff options
Diffstat (limited to '')
| -rw-r--r-- | lang/qt/src/Makefile.am | 2 | ||||
| -rw-r--r-- | lang/qt/src/changeexpiryjob.cpp | 76 | ||||
| -rw-r--r-- | lang/qt/src/changeexpiryjob.h | 13 | ||||
| -rw-r--r-- | lang/qt/src/qgpgmechangeexpiryjob.cpp | 32 | 
4 files changed, 113 insertions, 10 deletions
| diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am index 683b44cd..a965cdea 100644 --- a/lang/qt/src/Makefile.am +++ b/lang/qt/src/Makefile.am @@ -40,7 +40,7 @@ qgpgme_sources = \      qgpgmekeyformailboxjob.cpp qgpgme_debug.cpp \      qgpgmetofupolicyjob.cpp qgpgmequickjob.cpp \      defaultkeygenerationjob.cpp qgpgmewkspublishjob.cpp \ -    qgpgmegpgcardjob.cpp \ +    qgpgmegpgcardjob.cpp changeexpiryjob.cpp \      dn.cpp cryptoconfig.cpp  # If you add one here make sure that you also add one in camelcase diff --git a/lang/qt/src/changeexpiryjob.cpp b/lang/qt/src/changeexpiryjob.cpp new file mode 100644 index 00000000..49f68cc1 --- /dev/null +++ b/lang/qt/src/changeexpiryjob.cpp @@ -0,0 +1,76 @@ +/* +    changeexpiryjob.cpp + +    This file is part of qgpgme, the Qt API binding for gpgme +    Copyright (c) 2021 g10 Code GmbH +    Software engineering by Ingo Klöcker <[email protected]> + +    QGpgME is free software; you can redistribute it and/or +    modify it under the terms of the GNU General Public License as +    published by the Free Software Foundation; either version 2 of the +    License, or (at your option) any later version. + +    QGpgME is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +    General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, write to the Free Software +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + +    In addition, as a special exception, the copyright holders give +    permission to link the code of this program with any edition of +    the Qt library by Trolltech AS, Norway (or with modified versions +    of Qt that use the same license as Qt), and distribute linked +    combinations including the two.  You must obey the GNU General +    Public License in all respects for all of the code used other than +    Qt.  If you modify this file, you may extend this exception to +    your version of the file, but you are not obligated to do so.  If +    you do not wish to do so, delete this exception statement from +    your version. +*/ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include "changeexpiryjob.h" +#include "job_p.h" + +#include <context.h> + +using namespace GpgME; +using namespace QGpgME; + +namespace +{ +struct ChangeExpiryJobPrivate : public JobPrivate +{ +    ChangeExpiryJobPrivate() +    { +    } + +    ~ChangeExpiryJobPrivate() override = default; + +    ChangeExpiryJob::Options m_options = ChangeExpiryJob::Default; +}; +} + +void ChangeExpiryJob::setOptions(ChangeExpiryJob::Options options) +{ +    auto d = jobPrivate<ChangeExpiryJobPrivate>(this); +    d->m_options = options; +} + +ChangeExpiryJob::Options ChangeExpiryJob::options() const +{ +    auto d = jobPrivate<ChangeExpiryJobPrivate>(this); +    return d->m_options; +} + +/* For ABI compat not pure virtual. */ +Error ChangeExpiryJob::start(const Key &, const QDateTime &, const std::vector<Subkey> &) +{ +    return {}; +} diff --git a/lang/qt/src/changeexpiryjob.h b/lang/qt/src/changeexpiryjob.h index 39ed52ea..0c5e1b2b 100644 --- a/lang/qt/src/changeexpiryjob.h +++ b/lang/qt/src/changeexpiryjob.h @@ -71,11 +71,22 @@ namespace QGpgME  class QGPGME_EXPORT ChangeExpiryJob : public Job  {      Q_OBJECT +public: +    enum Option { +        Default = 0x00, +        UpdatePrimaryKey = 0x01, +        UpdateAllSubkeys = 0x02, +    }; +    Q_DECLARE_FLAGS(Options, Option) +  protected:      explicit ChangeExpiryJob(QObject *parent);  public:      ~ChangeExpiryJob(); +    void setOptions(Options options); +    Options options() const; +      /**         Starts the change-expiry operation. \a key is the key to change         the expiry of. \a expiry is the new expiry time. If \a expiry @@ -97,6 +108,8 @@ Q_SIGNALS:      void result(const GpgME::Error &result, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error());  }; +Q_DECLARE_OPERATORS_FOR_FLAGS(ChangeExpiryJob::Options) +  }  #endif // __KLEO_CHANGEEXPIRYJOB_H__ diff --git a/lang/qt/src/qgpgmechangeexpiryjob.cpp b/lang/qt/src/qgpgmechangeexpiryjob.cpp index 68591b7e..5d4e8360 100644 --- a/lang/qt/src/qgpgmechangeexpiryjob.cpp +++ b/lang/qt/src/qgpgmechangeexpiryjob.cpp @@ -5,6 +5,8 @@      Copyright (c) 2008 Klarälvdalens Datakonsult AB      Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik      Software engineering by Intevation GmbH +    Copyright (c) 2021 g10 Code GmbH +    Software engineering by Ingo Klöcker <[email protected]>      QGpgME is free software; you can redistribute it and/or      modify it under the terms of the GNU General Public License as @@ -55,14 +57,32 @@ QGpgMEChangeExpiryJob::QGpgMEChangeExpiryJob(Context *context)  QGpgMEChangeExpiryJob::~QGpgMEChangeExpiryJob() {}  static QGpgMEChangeExpiryJob::result_type change_expiry(Context *ctx, const Key &key, const QDateTime &expiry, -    const std::vector<Subkey> &subkeys) +    const std::vector<Subkey> &subkeys, ChangeExpiryJob::Options options)  {      // 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<qint64>(QDateTime::currentDateTime().secsTo(expiry), 1)         : 0; -    auto err = ctx->setExpire(key, expires, subkeys); +    // updating the expiration date of the primary key and the subkeys needs to be done in two steps +    // because --quick-set-expire does not support updating the expiration date of both at the same time + +    if (subkeys.empty() || (options & ChangeExpiryJob::UpdatePrimaryKey)) { +        // update the expiration date of the primary key +        auto err = ctx->setExpire(key, expires); +        if (err) { +            return std::make_tuple(err, QString(), Error()); +        } +    } + +    GpgME::Error err; +    if (!subkeys.empty()) { +        // update the expiration date of the specified subkeys +        err = ctx->setExpire(key, expires, subkeys); +    } else if (options & ChangeExpiryJob::UpdateAllSubkeys) { +        // update the expiration date of all subkeys +        err = ctx->setExpire(key, expires, {}, Context::SetExpireAllSubkeys); +    }      return std::make_tuple(err, QString(), Error());  } @@ -73,13 +93,7 @@ Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry)  Error QGpgMEChangeExpiryJob::start(const Key &key, const QDateTime &expiry, const std::vector<Subkey> &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<Subkey> &) -{ +    run(std::bind(&change_expiry, std::placeholders::_1, key, expiry, subkeys, options()));      return Error();  } | 
