summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-11-22 16:47:08 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-11-22 16:47:08 +0100
commit0bde2f020dd602ca360f394cd56d3973e857b5cc (patch)
tree8209f64fc13962942bc91e1f940b92e5d9eb12d1
parentb87099411a5a23572c5160adfa09e2ef2b882705 (diff)
downloadkube-0bde2f020dd602ca360f394cd56d3973e857b5cc.tar.gz
kube-0bde2f020dd602ca360f394cd56d3973e857b5cc.zip
Find signing keys
-rw-r--r--framework/src/domain/composercontroller.cpp17
-rw-r--r--framework/src/domain/composercontroller.h3
-rw-r--r--framework/src/domain/mime/mailcrypto.cpp27
-rw-r--r--framework/src/domain/mime/mailcrypto.h5
4 files changed, 51 insertions, 1 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index 2a82f0e1..d2b65d06 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -36,6 +36,7 @@
36#include "identitiesmodel.h" 36#include "identitiesmodel.h"
37#include "recepientautocompletionmodel.h" 37#include "recepientautocompletionmodel.h"
38#include "mime/mailtemplates.h" 38#include "mime/mailtemplates.h"
39#include "mime/mailcrypto.h"
39 40
40class IdentitySelector : public Selector { 41class IdentitySelector : public Selector {
41public: 42public:
@@ -170,9 +171,17 @@ ComposerController::ComposerController()
170 QObject::connect(this, &ComposerController::accountIdChanged, &ComposerController::updateSendAction); 171 QObject::connect(this, &ComposerController::accountIdChanged, &ComposerController::updateSendAction);
171 QObject::connect(this, &ComposerController::subjectChanged, &ComposerController::updateSaveAsDraftAction); 172 QObject::connect(this, &ComposerController::subjectChanged, &ComposerController::updateSaveAsDraftAction);
172 QObject::connect(this, &ComposerController::accountIdChanged, &ComposerController::updateSaveAsDraftAction); 173 QObject::connect(this, &ComposerController::accountIdChanged, &ComposerController::updateSaveAsDraftAction);
174 QObject::connect(this, &ComposerController::identityChanged, &ComposerController::findPersonalKey);
173 updateSendAction(); 175 updateSendAction();
174} 176}
175 177
178void ComposerController::findPersonalKey()
179{
180 auto identity = getIdentity();
181 SinkLog() << "Looking for personal key for: " << identity.address();
182 mPersonalKeys = MailCrypto::findKeys(QStringList{} << identity.address(), true);
183}
184
176void ComposerController::clear() 185void ComposerController::clear()
177{ 186{
178 Controller::clear(); 187 Controller::clear();
@@ -465,7 +474,13 @@ KMime::Message::Ptr ComposerController::assembleMessage()
465 item->data(ContentRole).toByteArray() 474 item->data(ContentRole).toByteArray()
466 }; 475 };
467 } 476 }
468 return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments); 477
478 std::vector<GpgME::Key> signingKeys;
479 if (getSign()) {
480 signingKeys = mPersonalKeys;
481 }
482
483 return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments, signingKeys);
469} 484}
470 485
471void ComposerController::updateSendAction() 486void ComposerController::updateSendAction()
diff --git a/framework/src/domain/composercontroller.h b/framework/src/domain/composercontroller.h
index 1a355b9a..3a0d4878 100644
--- a/framework/src/domain/composercontroller.h
+++ b/framework/src/domain/composercontroller.h
@@ -28,6 +28,7 @@
28#include <QVariant> 28#include <QVariant>
29#include <sink/applicationdomaintype.h> 29#include <sink/applicationdomaintype.h>
30#include <KMime/Message> 30#include <KMime/Message>
31#include <gpgme++/key.h>
31 32
32#include "completer.h" 33#include "completer.h"
33#include "selector.h" 34#include "selector.h"
@@ -111,6 +112,7 @@ public slots:
111private slots: 112private slots:
112 void updateSendAction(); 113 void updateSendAction();
113 void updateSaveAsDraftAction(); 114 void updateSaveAsDraftAction();
115 void findPersonalKey();
114 116
115private: 117private:
116 enum AttachmentRoles { 118 enum AttachmentRoles {
@@ -135,4 +137,5 @@ private:
135 QSharedPointer<AddresseeModel> mCcModel; 137 QSharedPointer<AddresseeModel> mCcModel;
136 QSharedPointer<AddresseeModel> mBccModel; 138 QSharedPointer<AddresseeModel> mBccModel;
137 QScopedPointer<QStandardItemModel> mAttachmentModel; 139 QScopedPointer<QStandardItemModel> mAttachmentModel;
140 std::vector<GpgME::Key> mPersonalKeys;
138}; 141};
diff --git a/framework/src/domain/mime/mailcrypto.cpp b/framework/src/domain/mime/mailcrypto.cpp
index ad161a63..19e81b4f 100644
--- a/framework/src/domain/mime/mailcrypto.cpp
+++ b/framework/src/domain/mime/mailcrypto.cpp
@@ -22,8 +22,10 @@
22#include "mailcrypto.h" 22#include "mailcrypto.h"
23#include <QGpgME/Protocol> 23#include <QGpgME/Protocol>
24#include <QGpgME/SignJob> 24#include <QGpgME/SignJob>
25#include <QGpgME/KeyListJob>
25#include <gpgme++/global.h> 26#include <gpgme++/global.h>
26#include <gpgme++/signingresult.h> 27#include <gpgme++/signingresult.h>
28#include <gpgme++/keylistresult.h>
27#include <QDebug> 29#include <QDebug>
28 30
29/* 31/*
@@ -452,3 +454,28 @@ KMime::Content *MailCrypto::sign(KMime::Content *content, const std::vector<GpgM
452 return nullptr; 454 return nullptr;
453} 455}
454 456
457std::vector<GpgME::Key> MailCrypto::findKeys(const QStringList &filter, bool findPrivate, Protocol protocol)
458{
459 const QGpgME::Protocol *const backend = protocol == SMIME ? QGpgME::smime() : QGpgME::openpgp();
460 Q_ASSERT(backend);
461 QGpgME::KeyListJob *job = backend->keyListJob(false);
462 Q_ASSERT(job);
463
464 std::vector<GpgME::Key> keys;
465 GpgME::KeyListResult res = job->exec(filter, findPrivate, keys);
466
467 Q_ASSERT(!res.error());
468
469 qWarning() << "got keys:" << keys.size();
470
471 for (std::vector< GpgME::Key >::iterator i = keys.begin(); i != keys.end(); ++i) {
472 qWarning() << "key isnull:" << i->isNull() << "isexpired:" << i->isExpired();
473 qWarning() << "key numuserIds:" << i->numUserIDs();
474 for (uint k = 0; k < i->numUserIDs(); ++k) {
475 qWarning() << "userIDs:" << i->userID(k).email();
476 }
477 }
478
479 return keys;
480}
481
diff --git a/framework/src/domain/mime/mailcrypto.h b/framework/src/domain/mime/mailcrypto.h
index 2261182d..badf1005 100644
--- a/framework/src/domain/mime/mailcrypto.h
+++ b/framework/src/domain/mime/mailcrypto.h
@@ -26,5 +26,10 @@
26 26
27namespace MailCrypto 27namespace MailCrypto
28{ 28{
29 enum Protocol {
30 OPENPGP,
31 SMIME
32 };
29 KMime::Content *sign(KMime::Content *content, const std::vector<GpgME::Key> &signers); 33 KMime::Content *sign(KMime::Content *content, const std::vector<GpgME::Key> &signers);
34 std::vector<GpgME::Key> findKeys(const QStringList &filter, bool findPrivate = false, Protocol protocol = OPENPGP);
30}; 35};