From 86927d185fec4d4621aa6d7744a88285fcf233b7 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 24 Nov 2017 18:30:51 +0100 Subject: Import missing keys --- framework/src/domain/composercontroller.cpp | 8 +++++++- framework/src/domain/mime/mailcrypto.cpp | 15 +++++++++++++-- framework/src/domain/mime/mailcrypto.h | 3 ++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index 5ac8adf1..c20c2b0f 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -113,7 +113,13 @@ public: void findKey(const QString &addressee, QStandardItem *item) { SinkLog() << "Searching key for: " << addressee; - auto keys = MailCrypto::findKeys(QStringList{} << addressee, false, MailCrypto::OPENPGP); + auto keys = MailCrypto::findKeys(QStringList{} << addressee, false, false, MailCrypto::OPENPGP); + if (keys.empty()) { + //Search for key on remote server if it's missing and import + //TODO: this is blocking and thus blocks the UI + keys = MailCrypto::findKeys(QStringList{} << addressee, false, true, MailCrypto::OPENPGP); + MailCrypto::importKeys(keys); + } if (item) { if (!keys.empty()) { if (keys.size() > 1 ) { diff --git a/framework/src/domain/mime/mailcrypto.cpp b/framework/src/domain/mime/mailcrypto.cpp index 6c5d1b4f..8cf55089 100644 --- a/framework/src/domain/mime/mailcrypto.cpp +++ b/framework/src/domain/mime/mailcrypto.cpp @@ -25,10 +25,12 @@ #include #include #include +#include #include #include #include #include +#include #include /* @@ -460,11 +462,20 @@ KMime::Content *MailCrypto::sign(KMime::Content *content, const std::vector MailCrypto::findKeys(const QStringList &filter, bool findPrivate, Protocol protocol) + +void MailCrypto::importKeys(const std::vector &keys) +{ + const QGpgME::Protocol *const backend = QGpgME::openpgp(); + Q_ASSERT(backend); + auto *job = backend->importFromKeyserverJob(); + job->exec(keys); +} + +std::vector MailCrypto::findKeys(const QStringList &filter, bool findPrivate, bool remote, Protocol protocol) { const QGpgME::Protocol *const backend = protocol == SMIME ? QGpgME::smime() : QGpgME::openpgp(); Q_ASSERT(backend); - QGpgME::KeyListJob *job = backend->keyListJob(false); + QGpgME::KeyListJob *job = backend->keyListJob(remote); Q_ASSERT(job); std::vector keys; diff --git a/framework/src/domain/mime/mailcrypto.h b/framework/src/domain/mime/mailcrypto.h index ed362ddc..0a6c2f4c 100644 --- a/framework/src/domain/mime/mailcrypto.h +++ b/framework/src/domain/mime/mailcrypto.h @@ -32,5 +32,6 @@ namespace MailCrypto }; KMime::Content *processCrypto(KMime::Content *content, const std::vector &signingKeys, const std::vector &encryptionKeys, MailCrypto::Protocol protocol); KMime::Content *sign(KMime::Content *content, const std::vector &signers); - std::vector findKeys(const QStringList &filter, bool findPrivate = false, Protocol protocol = OPENPGP); + std::vector findKeys(const QStringList &filter, bool findPrivate = false, bool remote = false, Protocol protocol = OPENPGP); + void importKeys(const std::vector &keys); }; -- cgit v1.2.3