summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Heinecke <aheinecke@intevation.de>2017-12-01 14:29:04 +0100
committerAndre Heinecke <aheinecke@intevation.de>2017-12-01 14:35:11 +0100
commit7d1ac5d61de3c55bf7ff14997b4b111a0f90c177 (patch)
treebf299f329509fe090e861b793eb0021260e0cf45
parent8e2d6c28a5e923f829b5a26d19d9d897949aa1fe (diff)
downloadgpgme-7d1ac5d61de3c55bf7ff14997b4b111a0f90c177.tar.gz
qt: Add job for quick commands
* lang/qt/src/qgpgmequickjob.cpp, lang/qt/src/qgpgmequickjob.h, lang/qt/src/quickjob.h: New. * lang/qt/src/Makefile.am, lang/qt/src/protocol.h, lang/qt/src/protocol_p.h, lang/qt/src/job.cpp: Update accordingly. -- Keeping it in line with the Job for everything pattern. Although it's reduced to one job for four commands as the commands all behave the same.
-rw-r--r--NEWS1
-rw-r--r--lang/qt/src/Makefile.am9
-rw-r--r--lang/qt/src/job.cpp3
-rw-r--r--lang/qt/src/protocol.h4
-rw-r--r--lang/qt/src/protocol_p.h13
-rw-r--r--lang/qt/src/qgpgmequickjob.cpp123
-rw-r--r--lang/qt/src/qgpgmequickjob.h82
-rw-r--r--lang/qt/src/quickjob.h83
8 files changed, 316 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 83c8f5f2..fd26ad22 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,7 @@ Noteworthy changes in version 1.10.0 (unreleased)
cpp: Context::startCreateKey NEW.
cpp: Context::createSubkey NEW.
cpp: Context::startCreateSubkey NEW.
+ qt: QuickJob NEW.
py: DecryptResult EXTENDED: New boolean field 'is_de_vs'.
py: Signature EXTENDED: New boolean field 'is_de_vs'.
py: GpgError EXTENDED: Partial results in 'results'.
diff --git a/lang/qt/src/Makefile.am b/lang/qt/src/Makefile.am
index 3b3cffc4..32251424 100644
--- a/lang/qt/src/Makefile.am
+++ b/lang/qt/src/Makefile.am
@@ -36,7 +36,7 @@ qgpgme_sources = \
qgpgmesignjob.cpp qgpgmesignkeyjob.cpp qgpgmeverifydetachedjob.cpp \
qgpgmeverifyopaquejob.cpp threadedjobmixin.cpp \
qgpgmekeyformailboxjob.cpp gpgme_backend_debug.cpp \
- qgpgmetofupolicyjob.cpp \
+ qgpgmetofupolicyjob.cpp qgpgmequickjob.cpp \
defaultkeygenerationjob.cpp qgpgmewkspublishjob.cpp \
dn.cpp cryptoconfig.cpp
@@ -60,6 +60,7 @@ qgpgme_headers= \
protocol.h \
qgpgme_export.h \
qgpgmenewcryptoconfig.h \
+ quickjob.h \
specialjob.h \
signjob.h \
signkeyjob.h \
@@ -97,6 +98,7 @@ camelcase_headers= \
MultiDeleteJob \
Protocol \
QGpgMENewCryptoConfig \
+ QuickJob \
SpecialJob \
SignJob \
SignKeyJob \
@@ -145,6 +147,7 @@ private_qgpgme_headers = \
qgpgmekeyformailboxjob.h \
qgpgmewkspublishjob.h \
qgpgmetofupolicyjob.h \
+ qgpgmequickjob.h \
threadedjobmixin.h
qgpgme_moc_sources = \
@@ -202,7 +205,9 @@ qgpgme_moc_sources = \
keyformailboxjob.moc \
wkspublishjob.moc \
qgpgmekeyformailboxjob.moc \
- defaultkeygenerationjob.moc
+ defaultkeygenerationjob.moc \
+ quickjob.moc \
+ qgpgmequickjob.moc
qgpgmeincludedir = $(includedir)/qgpgme
qgpgmeinclude_HEADERS = $(qgpgme_headers)
diff --git a/lang/qt/src/job.cpp b/lang/qt/src/job.cpp
index 83c50441..c4270205 100644
--- a/lang/qt/src/job.cpp
+++ b/lang/qt/src/job.cpp
@@ -64,6 +64,7 @@
#include "wkspublishjob.h"
#include "tofupolicyjob.h"
#include "threadedjobmixin.h"
+#include "quickjob.h"
#include <QCoreApplication>
#include <QDebug>
@@ -139,6 +140,7 @@ make_job_subclass(SpecialJob)
make_job_subclass(KeyForMailboxJob)
make_job_subclass(WKSPublishJob)
make_job_subclass(TofuPolicyJob)
+make_job_subclass(QuickJob)
#undef make_job_subclass
@@ -170,3 +172,4 @@ make_job_subclass(TofuPolicyJob)
#include "keyformailboxjob.moc"
#include "wkspublishjob.moc"
#include "tofupolicyjob.moc"
+#include "quickjob.moc"
diff --git a/lang/qt/src/protocol.h b/lang/qt/src/protocol.h
index 6794bc2b..1a52097e 100644
--- a/lang/qt/src/protocol.h
+++ b/lang/qt/src/protocol.h
@@ -66,6 +66,7 @@ class SpecialJob;
class KeyForMailboxJob;
class WKSPublishJob;
class TofuPolicyJob;
+class QuickJob;
/** The main entry point for QGpgME Comes in OpenPGP and SMIME(CMS) flavors.
*
@@ -157,6 +158,9 @@ public:
/** A Job to set tofu policy */
virtual TofuPolicyJob *tofuPolicyJob() const = 0;
+
+ /** A Job for the quick commands */
+ virtual QuickJob *quickJob() const = 0;
};
/** Obtain a reference to the OpenPGP Protocol.
diff --git a/lang/qt/src/protocol_p.h b/lang/qt/src/protocol_p.h
index 58a0fa6a..b6d1abfa 100644
--- a/lang/qt/src/protocol_p.h
+++ b/lang/qt/src/protocol_p.h
@@ -60,6 +60,7 @@
#include "qgpgmekeyformailboxjob.h"
#include "qgpgmewkspublishjob.h"
#include "qgpgmetofupolicyjob.h"
+#include "qgpgmequickjob.h"
namespace
{
@@ -414,6 +415,18 @@ public:
}
return new QGpgME::QGpgMETofuPolicyJob(context);
}
+
+ QGpgME::QuickJob *quickJob() const Q_DECL_OVERRIDE
+ {
+ if (mProtocol != GpgME::OpenPGP) {
+ return Q_NULLPTR;
+ }
+ GpgME::Context *context = GpgME::Context::createForProtocol(mProtocol);
+ if (!context) {
+ return Q_NULLPTR;
+ }
+ return new QGpgME::QGpgMEQuickJob(context);
+ }
};
}
diff --git a/lang/qt/src/qgpgmequickjob.cpp b/lang/qt/src/qgpgmequickjob.cpp
new file mode 100644
index 00000000..13ec0a9f
--- /dev/null
+++ b/lang/qt/src/qgpgmequickjob.cpp
@@ -0,0 +1,123 @@
+/* qgpgmequickjob.cpp
+
+ Copyright (c) 2017 Intevation GmbH
+
+ 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 "qgpgmequickjob.h"
+
+#include "context.h"
+#include "key.h"
+#include "util.h"
+
+using namespace QGpgME;
+using namespace GpgME;
+
+QGpgMEQuickJob::QGpgMEQuickJob(Context *context)
+ : mixin_type(context)
+{
+ lateInitialization();
+}
+
+QGpgMEQuickJob::~QGpgMEQuickJob() {}
+
+static QGpgMEQuickJob::result_type createWorker(GpgME::Context *ctx,
+ const QString &uid,
+ const char *algo,
+ const QDateTime &expires,
+ const GpgME::Key &key,
+ unsigned int flags)
+{
+ auto err = ctx->createKey(uid.toUtf8().constData(),
+ algo,
+ 0,
+ expires.isValid() ? (unsigned long) expires.toSecsSinceEpoch() : 0,
+ key,
+ flags);
+ return std::make_tuple(err, QString(), Error());
+}
+
+static QGpgMEQuickJob::result_type addSubkeyWorker(GpgME::Context *ctx,
+ const GpgME::Key &key,
+ const char *algo,
+ const QDateTime &expires,
+ unsigned int flags)
+{
+ auto err = ctx->createSubkey(key, algo, 0,
+ expires.isValid() ? (unsigned long) expires.toSecsSinceEpoch() : 0,
+ flags);
+ return std::make_tuple(err, QString(), Error());
+}
+
+static QGpgMEQuickJob::result_type addUidWorker(GpgME::Context *ctx,
+ const GpgME::Key &key,
+ const QString &uid)
+{
+ auto err = ctx->addUid(key, uid.toUtf8().constData());
+ return std::make_tuple(err, QString(), Error());
+}
+
+static QGpgMEQuickJob::result_type revUidWorker(GpgME::Context *ctx,
+ const GpgME::Key &key,
+ const QString &uid)
+{
+ auto err = ctx->revUid(key, uid.toUtf8().constData());
+ return std::make_tuple(err, QString(), Error());
+}
+
+void QGpgMEQuickJob::startCreate(const QString &uid,
+ const char *algo,
+ const QDateTime &expires,
+ const GpgME::Key &key,
+ unsigned int flags)
+{
+ run(std::bind(&createWorker, std::placeholders::_1, uid, algo,
+ expires, key, flags));
+}
+
+void QGpgMEQuickJob::startAddUid(const GpgME::Key &key, const QString &uid)
+{
+ run(std::bind(&addUidWorker, std::placeholders::_1, key, uid));
+}
+
+void QGpgMEQuickJob::startRevUid(const GpgME::Key &key, const QString &uid)
+{
+ run(std::bind(&revUidWorker, std::placeholders::_1, key, uid));
+}
+
+void QGpgMEQuickJob::startAddSubkey(const GpgME::Key &key, const char *algo,
+ const QDateTime &expires,
+ unsigned int flags)
+{
+ run(std::bind(&addSubkeyWorker, std::placeholders::_1, key, algo,
+ expires, flags));
+}
+#include "qgpgmequickjob.moc"
diff --git a/lang/qt/src/qgpgmequickjob.h b/lang/qt/src/qgpgmequickjob.h
new file mode 100644
index 00000000..82c73327
--- /dev/null
+++ b/lang/qt/src/qgpgmequickjob.h
@@ -0,0 +1,82 @@
+/* qgpgmequickjob.h
+
+ Copyright (c) 2017 Intevation GmbH
+
+ 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_QGPGMEQUICKJOB_H
+#define QGPGME_QGPGMEQUICKJOB_H
+
+#include "quickjob.h"
+
+#include "threadedjobmixin.h"
+
+namespace GpgME {
+class Key;
+}
+
+class QDateTime;
+class QString;
+
+namespace QGpgME{
+
+/**
+ * Interface to the modern key manipulation functions.
+ */
+class QGpgMEQuickJob
+#ifdef Q_MOC_RUN
+ : public QuickJob
+#else
+ : public _detail::ThreadedJobMixin<QuickJob, std::tuple<GpgME::Error, QString, GpgME::Error> >
+#endif
+{
+ Q_OBJECT
+#ifdef Q_MOC_RUN
+public Q_SLOTS:
+ void slotFinished();
+#endif
+public:
+ explicit QGpgMEQuickJob(GpgME::Context *context);
+ ~QGpgMEQuickJob();
+
+ void startCreate(const QString &uid,
+ const char *algo,
+ const QDateTime &expires = QDateTime(),
+ const GpgME::Key &key = GpgME::Key(),
+ unsigned int flags = 0) Q_DECL_OVERRIDE;
+ void startAddUid(const GpgME::Key &key, const QString &uid) Q_DECL_OVERRIDE;
+ void startRevUid(const GpgME::Key &key, const QString &uid) Q_DECL_OVERRIDE;
+ void startAddSubkey(const GpgME::Key &key, const char *algo,
+ const QDateTime &expires = QDateTime(),
+ unsigned int flags = 0) Q_DECL_OVERRIDE;
+
+Q_SIGNALS:
+ void result(const GpgME::Error &error,
+ const QString &auditLogAsHtml, const GpgME::Error &auditLogError);
+};
+
+}
+#endif
diff --git a/lang/qt/src/quickjob.h b/lang/qt/src/quickjob.h
new file mode 100644
index 00000000..c0a655b7
--- /dev/null
+++ b/lang/qt/src/quickjob.h
@@ -0,0 +1,83 @@
+/* quickjob.h
+
+ Copyright (c) 2017 Intevation GmbH
+
+ 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_QUICKJOB_H
+#define QGPGME_QUICKJOB_H
+
+#include "job.h"
+
+#include "qgpgme_export.h"
+
+#include <QDateTime>
+
+#ifdef BUILDING_QGPGME
+# include "key.h"
+#else
+# include <gpgme++/key.h>
+#endif
+
+class QString;
+
+namespace QGpgME{
+
+/**
+ * Interface to the modern key manipulation functions.
+ */
+class QGPGME_EXPORT QuickJob : public Job
+{
+ Q_OBJECT
+public:
+ explicit QuickJob(QObject *parent = Q_NULLPTR);
+ ~QuickJob();
+
+ /** Start --quick-gen-key */
+ virtual void startCreate(const QString &uid,
+ const char *algo,
+ const QDateTime &expires = QDateTime(),
+ const GpgME::Key &key = GpgME::Key(),
+ unsigned int flags = 0) = 0;
+
+ /** Start --quick-adduid */
+ virtual void startAddUid(const GpgME::Key &key, const QString &uid) = 0;
+
+ /** Start --quick-revuid */
+ virtual void startRevUid(const GpgME::Key &key, const QString &uid) = 0;
+
+ /** Start --quick-add-key */
+ virtual void startAddSubkey(const GpgME::Key &key, const char *algo,
+ const QDateTime &expires = QDateTime(),
+ unsigned int flags = 0) = 0;
+
+Q_SIGNALS:
+ void result(const GpgME::Error &error,
+ const QString &auditLogAsHtml, const GpgME::Error &auditLogError);
+};
+
+}
+#endif