diff options
author | Rémi Nicole <nicole@kolabsystems.com> | 2018-03-09 13:32:10 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-03-09 13:32:24 +0100 |
commit | d5b5c33a0cb3fbe02d011a14f2028249220b0656 (patch) | |
tree | db0ebb30db599a6889ea6066ec33bf5f862c8444 /tests | |
parent | 93e9c10d1894797b5826bbdfcc324f4235c9e193 (diff) | |
download | kube-d5b5c33a0cb3fbe02d011a14f2028249220b0656.tar.gz kube-d5b5c33a0cb3fbe02d011a14f2028249220b0656.zip |
Automatic key import / export + Expected monad
Summary:
There are many things going on here (perhaps a bit much for a single patch):
- When an attachment is of mime type "application/pgp-keys", a button is added to import the key to GPG
- When sending a mail and crypto is enabled (encryption, signing or both), the public key of the first private key found is sent as an un-encrypted attachment (T6994)
- The `mailcrypto.{h,cpp}` was, for the most part, rewritten
- Introduction of the expected monad, inspired by what was proposed for C++ [here](https://isocpp.org/files/papers/n4015.pdf), but not at all a strict implementation of this specification. We may want to add some more features of this standard later.
The rationale for some of the choices:
- I found mailcrypto a bit hard to edit to add new features, and a great part was commented code to prepare for the support the SMIME crypto format, which would (in my current knowledge) not be used for sending emails.
- One thing I found that may be missing in the code base was a standardized way of handling errors in C++ code. Since exceptions are disabled I think that the functional way is the way to go. After some research I found the Expected monad / tagged union / sum type, which seemed to suit the problem particularly well.
In the long run, I hope we would move the entire code base to use `Expected` to indicate if a function might fail.
Of course every choice made here is to be considered as a proposition for doing things / RFC, critics wholeheartedly accepted.
Reviewers: cmollekopf
Tags: #kube
Maniphest Tasks: T6994, T8147, T6995
Differential Revision: https://phabricator.kde.org/D11158
Diffstat (limited to 'tests')
-rw-r--r-- | tests/teststore.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/tests/teststore.cpp b/tests/teststore.cpp index 9d56dd33..84e2da20 100644 --- a/tests/teststore.cpp +++ b/tests/teststore.cpp | |||
@@ -64,6 +64,19 @@ static void createMail(const QVariantMap &object, const QByteArray &folder = {}) | |||
64 | auto ccAddresses = toStringList(object["cc"].toList()); | 64 | auto ccAddresses = toStringList(object["cc"].toList()); |
65 | auto bccAddresses = toStringList(object["bcc"].toList()); | 65 | auto bccAddresses = toStringList(object["bcc"].toList()); |
66 | 66 | ||
67 | QList<Attachment> attachments = {}; | ||
68 | if (object.contains("attachments")) { | ||
69 | auto attachmentSpecs = object["attachments"].toList(); | ||
70 | for (int i = 0; i < attachmentSpecs.size(); ++i) { | ||
71 | auto const &spec = attachmentSpecs.at(i).toMap(); | ||
72 | attachments << Attachment{spec["name"].toString(), | ||
73 | spec["name"].toString(), | ||
74 | spec["mimeType"].toByteArray(), | ||
75 | false, | ||
76 | spec["data"].toByteArray()}; | ||
77 | } | ||
78 | } | ||
79 | |||
67 | KMime::Types::Mailbox mb; | 80 | KMime::Types::Mailbox mb; |
68 | mb.fromUnicodeString("identity@example.org"); | 81 | mb.fromUnicodeString("identity@example.org"); |
69 | auto msg = MailTemplates::createMessage({}, | 82 | auto msg = MailTemplates::createMessage({}, |
@@ -74,7 +87,7 @@ static void createMail(const QVariantMap &object, const QByteArray &folder = {}) | |||
74 | object["subject"].toString(), | 87 | object["subject"].toString(), |
75 | object["body"].toString(), | 88 | object["body"].toString(), |
76 | object["bodyIsHtml"].toBool(), | 89 | object["bodyIsHtml"].toBool(), |
77 | {}, | 90 | attachments, |
78 | {}, | 91 | {}, |
79 | {}); | 92 | {}); |
80 | if (object.contains("messageId")) { | 93 | if (object.contains("messageId")) { |