summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-05-23 19:34:39 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-05-23 19:34:39 +0200
commit79fd78dd1bd0968bd7a8aee70093e514b0729afd (patch)
tree66aa949b874276ec2152ccb41ca36f7c4fe02089 /framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp
parentb968ea8ed364238c57c3e74cf2c122cb897cfbea (diff)
downloadkube-79fd78dd1bd0968bd7a8aee70093e514b0729afd.tar.gz
kube-79fd78dd1bd0968bd7a8aee70093e514b0729afd.zip
Dropped in body-part formatters
Diffstat (limited to 'framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp')
-rw-r--r--framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp98
1 files changed, 98 insertions, 0 deletions
diff --git a/framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp b/framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp
new file mode 100644
index 00000000..e0f8e30c
--- /dev/null
+++ b/framework/src/domain/mimetreeparser/otp/applicationpgpencrypted.cpp
@@ -0,0 +1,98 @@
1/*
2 Copyright (c) 2016 Sandro Knauß <sknauss@kde.org>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#include "applicationpgpencrypted.h"
21
22#include "utils.h"
23
24#include "objecttreeparser.h"
25#include "messagepart.h"
26
27#include <QGpgME/Protocol>
28
29#include <KMime/Content>
30
31#include "mimetreeparser_debug.h"
32
33using namespace MimeTreeParser;
34
35const ApplicationPGPEncryptedBodyPartFormatter *ApplicationPGPEncryptedBodyPartFormatter::self;
36
37const Interface::BodyPartFormatter *ApplicationPGPEncryptedBodyPartFormatter::create()
38{
39 if (!self) {
40 self = new ApplicationPGPEncryptedBodyPartFormatter();
41 }
42 return self;
43}
44
45Interface::BodyPartFormatter::Result ApplicationPGPEncryptedBodyPartFormatter::format(Interface::BodyPart *part, HtmlWriter *writer) const
46{
47 Q_UNUSED(writer)
48 const auto p = process(*part);
49 const auto mp = static_cast<MessagePart *>(p.data());
50 if (mp) {
51 mp->html(false);
52 return Ok;
53 }
54 return Failed;
55}
56
57Interface::MessagePart::Ptr ApplicationPGPEncryptedBodyPartFormatter::process(Interface::BodyPart &part) const
58{
59 KMime::Content *node(part.content());
60
61 if (node->decodedContent().trimmed() != "Version: 1") {
62 qCWarning(MIMETREEPARSER_LOG) << "Unknown PGP Version String:" << node->decodedContent().trimmed();
63 }
64
65 if (!part.content()->parent()) {
66 return MessagePart::Ptr();
67 }
68
69 KMime::Content *data = findTypeInDirectChilds(part.content()->parent(), "application/octet-stream");
70
71 if (!data) {
72 return MessagePart::Ptr(); //new MimeMessagePart(part.objectTreeParser(), node, false));
73 }
74
75 part.nodeHelper()->setEncryptionState(node, KMMsgFullyEncrypted);
76
77 EncryptedMessagePart::Ptr mp(new EncryptedMessagePart(part.objectTreeParser(),
78 data->decodedText(), QGpgME::openpgp(),
79 part.nodeHelper()->fromAsString(data), node));
80 mp->setIsEncrypted(true);
81 mp->setDecryptMessage(part.source()->decryptMessage());
82 PartMetaData *messagePart(mp->partMetaData());
83 if (!part.source()->decryptMessage()) {
84 part.nodeHelper()->setNodeProcessed(data, false); // Set the data node to done to prevent it from being processed
85 } else if (KMime::Content *newNode = part.nodeHelper()->decryptedNodeForContent(data)) {
86 // if we already have a decrypted node for this encrypted node, don't do the decryption again
87 return MessagePart::Ptr(new MimeMessagePart(part.objectTreeParser(), newNode, part.objectTreeParser()->showOnlyOneMimePart()));
88 } else {
89 mp->startDecryption(data);
90 if (!messagePart->inProgress) {
91 part.nodeHelper()->setNodeProcessed(data, false); // Set the data node to done to prevent it from being processed
92 if (messagePart->isDecryptable && messagePart->isSigned) {
93 part.nodeHelper()->setSignatureState(node, KMMsgFullySigned);
94 }
95 }
96 }
97 return mp;
98}