From f7f75ff7d11b9e3cc722210f7037fc1e6c3c3b61 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Thu, 10 Sep 2015 15:56:40 -0400 Subject: [PATCH] Unify detection of pgp/mime message part --- program/steps/mail/compose.inc | 21 ++++++---- program/steps/mail/func.inc | 17 ++------ program/lib/Roundcube/rcube_message.php | 22 +++++++++++ program/js/app.js | 1 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 628fc19..c5e9e59 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3481,6 +3481,7 @@ } }).catch(function(err) { console.error(err); + console.log(options); }); } }; diff --git a/program/lib/Roundcube/rcube_message.php b/program/lib/Roundcube/rcube_message.php index 884141a..f478a44 100644 --- a/program/lib/Roundcube/rcube_message.php +++ b/program/lib/Roundcube/rcube_message.php @@ -484,6 +484,28 @@ } /** + * In a multipart/encrypted encrypted message, + * find the encrypted message payload part. + * + * @return rcube_message_part + */ + public function get_multipart_encrypted_part() + { + foreach ($this->mime_parts as $mime_id => $mpart) { + if ($mpart->mimetype == 'multipart/encrypted') { + $this->pgp_mime = true; + } + if ($this->pgp_mime && ($mpart->mimetype == 'application/octet-stream' || + (!empty($mpart->filename) && $mpart->filename != 'version.txt'))) { + $this->encrypted_part = $mime_id; + return $mpart; + } + } + + return false; + } + + /** * Read the message structure returend by the IMAP server * and build flat lists of content parts and attachments * diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index c5450c5..fd87266 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -782,15 +782,13 @@ foreach ($MESSAGE->parts as $part) { if ($part->realtype == 'multipart/encrypted') { // find the encrypted message payload part - foreach ($MESSAGE->mime_parts as $mime_id => $mpart) { - if ($mpart->mimetype == 'application/octet-stream' || !empty($mpart->filename)) { - $RCMAIL->output->set_env('pgp_mime_message', array( - '_mbox' => $RCMAIL->storage->get_folder(), '_uid' => $MESSAGE->uid, '_part' => $mime_id, - )); - $RCMAIL->output->set_env('compose_mode', $compose_mode); - $MESSAGE->pgp_mime = true; - break; - } + if ($pgp_mime_part = $MESSAGE->get_multipart_encrypted_part()) { + $RCMAIL->output->set_env('pgp_mime_message', array( + '_mbox' => $RCMAIL->storage->get_folder(), + '_uid' => $MESSAGE->uid, + '_part' => $pgp_mime_part->mime_id, + )); + $RCMAIL->output->set_env('compose_mode', $compose_mode); } continue; } @@ -1271,6 +1269,11 @@ continue; } + // skip version.txt parts of multipart/encrypted messages + if ($message->pgp_mime && $part->mimetype == 'application/pgp-encrypted' && $part->filename == 'version.txt') { + continue; + } + // skip message/rfc822 attachments on forwards (#1489214) // Thunderbird when forwarding in inline mode displays such attachments // and skips any attachments from inside of such part, this however diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 09cf6ed..9feb767 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -1193,18 +1193,11 @@ // unsupported (e.g. encrypted) if ($part->realtype) { if ($part->realtype == 'multipart/encrypted' || $part->realtype == 'application/pkcs7-mime') { - if (!empty($_SESSION['browser_caps']['pgpmime']) && $part->realtype == 'multipart/encrypted') { - // find the encrypted message payload part - foreach ($MESSAGE->mime_parts as $mime_id => $mpart) { - if ($mpart->mimetype == 'application/octet-stream' || !empty($mpart->filename)) { - $out .= html::span('part-notice', $RCMAIL->gettext('externalmessagedecryption')); - $OUTPUT->set_env('pgp_mime_part', $mime_id); - $OUTPUT->set_env('pgp_mime_container', '#' . $attrib['id']); - $OUTPUT->add_label('loadingdata'); - $MESSAGE->encrypted_part = $mime_id; - break; - } - } + if (!empty($_SESSION['browser_caps']['pgpmime']) && ($pgp_mime_part = $MESSAGE->get_multipart_encrypted_part())) { + $out .= html::span('part-notice', $RCMAIL->gettext('externalmessagedecryption')); + $OUTPUT->set_env('pgp_mime_part', $pgp_mime_part->mime_id); + $OUTPUT->set_env('pgp_mime_container', '#' . $attrib['id']); + $OUTPUT->add_label('loadingdata'); } if (!$MESSAGE->encrypted_part) { -- Gitblit v1.9.1