diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-22 16:47:08 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-22 16:47:08 +0100 |
commit | 0bde2f020dd602ca360f394cd56d3973e857b5cc (patch) | |
tree | 8209f64fc13962942bc91e1f940b92e5d9eb12d1 | |
parent | b87099411a5a23572c5160adfa09e2ef2b882705 (diff) | |
download | kube-0bde2f020dd602ca360f394cd56d3973e857b5cc.tar.gz kube-0bde2f020dd602ca360f394cd56d3973e857b5cc.zip |
Find signing keys
-rw-r--r-- | framework/src/domain/composercontroller.cpp | 17 | ||||
-rw-r--r-- | framework/src/domain/composercontroller.h | 3 | ||||
-rw-r--r-- | framework/src/domain/mime/mailcrypto.cpp | 27 | ||||
-rw-r--r-- | framework/src/domain/mime/mailcrypto.h | 5 |
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 | ||
40 | class IdentitySelector : public Selector { | 41 | class IdentitySelector : public Selector { |
41 | public: | 42 | public: |
@@ -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 | ||
178 | void 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 | |||
176 | void ComposerController::clear() | 185 | void 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 | ||
471 | void ComposerController::updateSendAction() | 486 | void 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: | |||
111 | private slots: | 112 | private slots: |
112 | void updateSendAction(); | 113 | void updateSendAction(); |
113 | void updateSaveAsDraftAction(); | 114 | void updateSaveAsDraftAction(); |
115 | void findPersonalKey(); | ||
114 | 116 | ||
115 | private: | 117 | private: |
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 | ||
457 | std::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 | ||
27 | namespace MailCrypto | 27 | namespace 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 | }; |