aboutsummaryrefslogtreecommitdiffstats
path: root/lang/qt/src/qgpgmeimportjob.cpp
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2021-12-14 10:47:09 +0000
committerIngo Klöcker <[email protected]>2021-12-14 10:47:09 +0000
commitfd6bec617d8fb6ddcbc622a5d8cf94594a7d5520 (patch)
treed2c9c73fe0699192abd6b9a493e26bacdbf7ac19 /lang/qt/src/qgpgmeimportjob.cpp
parentqt,tests: Skip WKD lookup tests by default (diff)
downloadgpgme-fd6bec617d8fb6ddcbc622a5d8cf94594a7d5520.tar.gz
gpgme-fd6bec617d8fb6ddcbc622a5d8cf94594a7d5520.zip
qt: Allow setting key origin when importing keys
* lang/qt/src/Makefile.am (qgpgme_sources): Add importjob.cpp. * lang/qt/src/importjob.cpp: New. * lang/qt/src/importjob.h (class ImportJob): Add member functions setKeyOrigin, keyOrigin, keyOriginUrl. * lang/qt/src/qgpgmeimportjob.cpp (originToString): New. (import_qba): Set key origin context flag. (QGpgMEImportJob::start, QGpgMEImportJob::exec): Add options to call of import_qba. * lang/qt/tests/Makefile.am (the_tests, moc_files, noinst_PROGRAMS): Add new test. (t_import_SOURCES): New. * lang/qt/tests/t-import.cpp: New. -- GnuPG-bug-id: 5733
Diffstat (limited to 'lang/qt/src/qgpgmeimportjob.cpp')
-rw-r--r--lang/qt/src/qgpgmeimportjob.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/lang/qt/src/qgpgmeimportjob.cpp b/lang/qt/src/qgpgmeimportjob.cpp
index a62d05f9..ad5c2aee 100644
--- a/lang/qt/src/qgpgmeimportjob.cpp
+++ b/lang/qt/src/qgpgmeimportjob.cpp
@@ -55,10 +55,36 @@ QGpgMEImportJob::QGpgMEImportJob(Context *context)
lateInitialization();
}
-QGpgMEImportJob::~QGpgMEImportJob() {}
+QGpgMEImportJob::~QGpgMEImportJob() = default;
-static QGpgMEImportJob::result_type import_qba(Context *ctx, const QByteArray &certData)
+static const char *originToString(Key::Origin origin)
{
+ static const std::map<Key::Origin, const char *> mapping = {
+ { Key::OriginUnknown, "unknown" },
+ { Key::OriginKS, "ks" },
+ { Key::OriginDane, "dane" },
+ { Key::OriginWKD, "wkd" },
+ { Key::OriginURL, "url" },
+ { Key::OriginFile, "file" },
+ { Key::OriginSelf, "self" },
+ };
+ const auto it = mapping.find(origin);
+ return (it != std::end(mapping)) ? it->second : nullptr;
+}
+
+static QGpgMEImportJob::result_type import_qba(Context *ctx, const QByteArray &certData, Key::Origin keyOrigin, const QString &keyOriginUrl)
+{
+ if (keyOrigin != Key::OriginUnknown) {
+ if (const auto origin = originToString(keyOrigin)) {
+ std::string value{origin};
+ if (!keyOriginUrl.isEmpty()) {
+ value += ",";
+ value += keyOriginUrl.toStdString();
+ }
+ ctx->setFlag("key-origin", value.c_str());
+ }
+ }
+
QGpgME::QByteArrayDataProvider dp(certData);
Data data(&dp);
@@ -70,13 +96,13 @@ static QGpgMEImportJob::result_type import_qba(Context *ctx, const QByteArray &c
Error QGpgMEImportJob::start(const QByteArray &certData)
{
- run(std::bind(&import_qba, std::placeholders::_1, certData));
+ run(std::bind(&import_qba, std::placeholders::_1, certData, keyOrigin(), keyOriginUrl()));
return Error();
}
GpgME::ImportResult QGpgME::QGpgMEImportJob::exec(const QByteArray &keyData)
{
- const result_type r = import_qba(context(), keyData);
+ const result_type r = import_qba(context(), keyData, keyOrigin(), keyOriginUrl());
resultHook(r);
return mResult;
}