diff options
| author | Ingo Klöcker <[email protected]> | 2021-12-14 10:47:09 +0000 |
|---|---|---|
| committer | Ingo Klöcker <[email protected]> | 2021-12-14 10:47:09 +0000 |
| commit | fd6bec617d8fb6ddcbc622a5d8cf94594a7d5520 (patch) | |
| tree | d2c9c73fe0699192abd6b9a493e26bacdbf7ac19 /lang/qt/src/qgpgmeimportjob.cpp | |
| parent | qt,tests: Skip WKD lookup tests by default (diff) | |
| download | gpgme-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.cpp | 34 |
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; } |
