aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Heinecke <[email protected]>2016-08-11 15:57:14 +0000
committerAndre Heinecke <[email protected]>2016-08-11 16:00:14 +0000
commit105f5446e69db00291164397cf0d8e68374cf420 (patch)
treee2f0feeb9802fb2c0c52a0c92730a12102410d1d
parentQt: Ensure all public classes are exported (diff)
downloadgpgme-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]
-rw-r--r--lang/qt/src/Makefile.am12
-rw-r--r--lang/qt/src/defaultkeygenerationjob.cpp123
-rw-r--r--lang/qt/src/defaultkeygenerationjob.h76
3 files changed, 207 insertions, 4 deletions
diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am
index 59d8abc8..840557e8 100644
--- a/lang/qt/src/Makefile.am
+++ b/lang/qt/src/Makefile.am
@@ -33,7 +33,8 @@ qgpgme_sources = \
qgpgmesecretkeyexportjob.cpp qgpgmesignencryptjob.cpp \
qgpgmesignjob.cpp qgpgmesignkeyjob.cpp qgpgmeverifydetachedjob.cpp \
qgpgmeverifyopaquejob.cpp threadedjobmixin.cpp \
- qgpgmekeyformailboxjob.cpp gpgme_backend_debug.cpp
+ qgpgmekeyformailboxjob.cpp gpgme_backend_debug.cpp \
+ defaultkeygenerationjob.cpp
# If you add one here make sure that you also add one in camelcase
qgpgme_headers= \
@@ -66,7 +67,8 @@ qgpgme_headers= \
keygenerationjob.h \
keylistjob.h \
listallkeysjob.h \
- verifydetachedjob.h
+ verifydetachedjob.h \
+ defaultkeygenerationjob.h
camelcase_headers= \
AddUserIDJob \
@@ -97,7 +99,8 @@ camelcase_headers= \
KeyListJob \
ListAllKeysJob \
VerifyDetachedJob \
- KeyForMailboxJob
+ KeyForMailboxJob \
+ DefaultKeyGenerationJob
private_qgpgme_headers = \
qgpgme_export.h \
@@ -180,7 +183,8 @@ qgpgme_moc_sources = \
verifydetachedjob.moc \
verifyopaquejob.moc \
keyformailboxjob.moc \
- qgpgmekeyformailboxjob.moc
+ qgpgmekeyformailboxjob.moc \
+ defaultkeygenerationjob.moc
qgpgmeincludedir = $(includedir)/qgpgme
qgpgmeinclude_HEADERS = $(qgpgme_headers)
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);
+}
diff --git a/lang/qt/src/defaultkeygenerationjob.h b/lang/qt/src/defaultkeygenerationjob.h
new file mode 100644
index 00000000..5b7334c4
--- /dev/null
+++ b/lang/qt/src/defaultkeygenerationjob.h
@@ -0,0 +1,76 @@
+/* defaultkeygenerationjob.h
+
+ 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.
+*/
+#ifndef QGPGME_DEFAULTKEYGENERATION_H
+#define QGPGME_DEFAULTKEYGENERATION_H
+
+#include "job.h"
+
+#include "qgpgme_export.h"
+
+namespace GpgME {
+class KeyGenerationResult;
+}
+
+namespace QGpgME{
+
+/**
+ * Generates a PGP RSA/2048 bit key pair for given name and email address.
+ */
+class QGPGME_EXPORT DefaultKeyGenerationJob : public Job
+{
+ Q_OBJECT
+public:
+ explicit DefaultKeyGenerationJob(QObject *parent = Q_NULLPTR);
+ ~DefaultKeyGenerationJob();
+
+ GpgME::Error start(const QString &email, const QString &name);
+
+ QString auditLogAsHtml() const Q_DECL_OVERRIDE;
+ GpgME::Error auditLogError() const Q_DECL_OVERRIDE;
+
+
+public Q_SLOTS:
+ void slotCancel() Q_DECL_OVERRIDE;
+
+Q_SIGNALS:
+ void result(const GpgME::KeyGenerationResult &result, const QByteArray &pubkeyData,
+ const QString &auditLogAsHtml, const GpgME::Error &auditLogError);
+
+protected:
+ bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+
+private:
+ class Private;
+ Private * const d;
+};
+
+}
+
+#endif