diff options
author | Andre Heinecke <[email protected]> | 2016-08-11 15:57:14 +0000 |
---|---|---|
committer | Andre Heinecke <[email protected]> | 2016-08-11 16:00:14 +0000 |
commit | 105f5446e69db00291164397cf0d8e68374cf420 (patch) | |
tree | e2f0feeb9802fb2c0c52a0c92730a12102410d1d /lang/qt/src/defaultkeygenerationjob.cpp | |
parent | Qt: Ensure all public classes are exported (diff) | |
download | gpgme-105f5446e69db00291164397cf0d8e68374cf420.tar.gz gpgme-105f5446e69db00291164397cf0d8e68374cf420.zip |
Qt: Add DefaultKeyGenerationJob
* lang/qt/src/defaultkeygenerationjob.cpp,
lang/qt/src/defaultkeygenerationjob.h: New.
* lang/qt/src/Makefile.am: Update accordingly.
--
The defaultkeygenerationjob makes it easier to just generate a key
in the future this should probably use quick-gen key but since this
is not exposed in gpgme we hardcode the defaults and do it with
the params file.
This is also the first job that uses a new and better architecture
without backend abstraction and the pimpl pattern instead of
a specialized subclass.
This is an adoption of kde's libkleo commit f49b7157
Thanks [email protected]
Diffstat (limited to 'lang/qt/src/defaultkeygenerationjob.cpp')
-rw-r--r-- | lang/qt/src/defaultkeygenerationjob.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/lang/qt/src/defaultkeygenerationjob.cpp b/lang/qt/src/defaultkeygenerationjob.cpp new file mode 100644 index 00000000..727eabbe --- /dev/null +++ b/lang/qt/src/defaultkeygenerationjob.cpp @@ -0,0 +1,123 @@ +/* defaultkeygenerationjob.cpp + + Copyright (c) 2016 Klarälvdalens Datakonsult AB + + 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. +*/ + +#include "defaultkeygenerationjob.h" +#include "protocol.h" +#include "keygenerationjob.h" + +#include <QPointer> +#include <QEvent> + +using namespace QGpgME; + +namespace QGpgME { + +class DefaultKeyGenerationJob::Private +{ +public: + Private() + {} + + ~Private() + { + if (job) { + job->deleteLater(); + } + } + + QPointer<KeyGenerationJob> job; +}; +} + + +DefaultKeyGenerationJob::DefaultKeyGenerationJob(QObject* parent) + : Job(parent) + , d(new DefaultKeyGenerationJob::Private()) +{ +} + +DefaultKeyGenerationJob::~DefaultKeyGenerationJob() +{ + delete d; +} + +QString DefaultKeyGenerationJob::auditLogAsHtml() const +{ + return d->job ? d->job->auditLogAsHtml() : QString(); +} + +GpgME::Error DefaultKeyGenerationJob::auditLogError() const +{ + return d->job ? d->job->auditLogError() : GpgME::Error(); +} + +void DefaultKeyGenerationJob::slotCancel() +{ + if (d->job) { + d->job->slotCancel(); + } +} + +GpgME::Error DefaultKeyGenerationJob::start(const QString &email, const QString &name) +{ + const QString args = QStringLiteral("<GnupgKeyParms format=\"internal\">\n" + "%ask-passphrase\n" + "key-type: RSA\n" + "key-length: 2048\n" + "key-usage: sign\n" + "subkey-type: RSA\n" + "subkey-length: 2048\n" + "subkey-usage: encrypt\n" + "name-email: %1\n" + "name-real: %2\n" + "</GnupgKeyParms>").arg(email, name); + + d->job = openpgp()->keyGenerationJob(); + d->job->installEventFilter(this); + connect(d->job, &KeyGenerationJob::result, + this, &DefaultKeyGenerationJob::result); + connect(d->job, &KeyGenerationJob::done, + this, &DefaultKeyGenerationJob::done); + connect(d->job, &KeyGenerationJob::done, + this, &QObject::deleteLater); + return d->job->start(args); +} + +bool DefaultKeyGenerationJob::eventFilter(QObject *watched, QEvent *event) +{ + // Intercept the KeyGenerationJob's deferred delete event. We want the job + // to live at least as long as we do so we can delegate calls to it. We will + // delete the job manually afterwards. + if (watched == d->job && event->type() == QEvent::DeferredDelete) { + return true; + } + + return Job::eventFilter(watched, event); +} |