diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-23 15:53:52 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-23 15:53:52 +0100 |
commit | c1fc67e40c1b467d50aa27a676fa65c25b767872 (patch) | |
tree | 5b76b109ffa4d3c3d1c64adb62196541cb2bdc38 /framework/src/domain/composercontroller.cpp | |
parent | cbd402c36699e93c3015951f52f0adfc7320751b (diff) | |
download | kube-c1fc67e40c1b467d50aa27a676fa65c25b767872.tar.gz kube-c1fc67e40c1b467d50aa27a676fa65c25b767872.zip |
Encrypted mails
Diffstat (limited to 'framework/src/domain/composercontroller.cpp')
-rw-r--r-- | framework/src/domain/composercontroller.cpp | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index fb3857a5..630f9e10 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp | |||
@@ -38,6 +38,8 @@ | |||
38 | #include "mime/mailtemplates.h" | 38 | #include "mime/mailtemplates.h" |
39 | #include "mime/mailcrypto.h" | 39 | #include "mime/mailcrypto.h" |
40 | 40 | ||
41 | Q_DECLARE_METATYPE(GpgME::Key); | ||
42 | |||
41 | class IdentitySelector : public Selector { | 43 | class IdentitySelector : public Selector { |
42 | public: | 44 | public: |
43 | IdentitySelector(ComposerController &controller) : Selector(new IdentitiesModel), mController(controller) | 45 | IdentitySelector(ComposerController &controller) : Selector(new IdentitiesModel), mController(controller) |
@@ -105,6 +107,18 @@ public: | |||
105 | item->setData(addressee, ComposerController::AddresseeNameRole); | 107 | item->setData(addressee, ComposerController::AddresseeNameRole); |
106 | item->setData(false, ComposerController::KeyFoundRole); | 108 | item->setData(false, ComposerController::KeyFoundRole); |
107 | appendRow(QList<QStandardItem*>() << item); | 109 | appendRow(QList<QStandardItem*>() << item); |
110 | findKey(addressee, item); | ||
111 | } | ||
112 | |||
113 | void findKey(const QString &addressee, QStandardItem *item) | ||
114 | { | ||
115 | auto keys = MailCrypto::findKeys(QStringList{} << addressee, false, MailCrypto::OPENPGP); | ||
116 | if (item) { | ||
117 | if (!keys.empty()) { | ||
118 | item->setData(true, ComposerController::KeyFoundRole); | ||
119 | item->setData(QVariant::fromValue(keys.front()), ComposerController::KeyRole); | ||
120 | } | ||
121 | } | ||
108 | } | 122 | } |
109 | 123 | ||
110 | void remove(const QString &addressee) | 124 | void remove(const QString &addressee) |
@@ -118,6 +132,30 @@ public: | |||
118 | } | 132 | } |
119 | } | 133 | } |
120 | 134 | ||
135 | bool foundAllKeys() | ||
136 | { | ||
137 | std::vector<GpgME::Key> keys; | ||
138 | auto root = invisibleRootItem(); | ||
139 | for (int row = 0; row < root->rowCount(); row++) { | ||
140 | auto item = root->child(row, 0); | ||
141 | if (!item->data(ComposerController::KeyFoundRole).toBool()) { | ||
142 | return false; | ||
143 | } | ||
144 | } | ||
145 | return true; | ||
146 | } | ||
147 | |||
148 | std::vector<GpgME::Key> getKeys() | ||
149 | { | ||
150 | std::vector<GpgME::Key> keys; | ||
151 | auto root = invisibleRootItem(); | ||
152 | for (int row = 0; row < root->rowCount(); row++) { | ||
153 | auto item = root->child(row, 0); | ||
154 | keys.push_back(item->data(ComposerController::KeyRole).value<GpgME::Key>()); | ||
155 | } | ||
156 | return keys; | ||
157 | } | ||
158 | |||
121 | void setStringList(const QStringList &list) | 159 | void setStringList(const QStringList &list) |
122 | { | 160 | { |
123 | clear(); | 161 | clear(); |
@@ -479,8 +517,21 @@ KMime::Message::Ptr ComposerController::assembleMessage() | |||
479 | if (getSign()) { | 517 | if (getSign()) { |
480 | signingKeys = mPersonalKeys; | 518 | signingKeys = mPersonalKeys; |
481 | } | 519 | } |
520 | std::vector<GpgME::Key> encryptionKeys; | ||
521 | if (getEncrypt()) { | ||
522 | if (!mToModel->foundAllKeys() || !mCcModel->foundAllKeys() || !mBccModel->foundAllKeys()) { | ||
523 | qWarning() << "Can't encrypt with missing keys"; | ||
524 | return nullptr; | ||
525 | } | ||
526 | auto toKeys = mToModel->getKeys(); | ||
527 | encryptionKeys.insert(std::end(encryptionKeys), std::begin(toKeys), std::end(toKeys)); | ||
528 | auto ccKeys = mCcModel->getKeys(); | ||
529 | encryptionKeys.insert(std::end(encryptionKeys), std::begin(ccKeys), std::end(ccKeys)); | ||
530 | auto bccKeys = mBccModel->getKeys(); | ||
531 | encryptionKeys.insert(std::end(encryptionKeys), std::begin(bccKeys), std::end(bccKeys)); | ||
532 | } | ||
482 | 533 | ||
483 | return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments, signingKeys); | 534 | return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments, signingKeys, encryptionKeys); |
484 | } | 535 | } |
485 | 536 | ||
486 | void ComposerController::updateSendAction() | 537 | void ComposerController::updateSendAction() |