summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/BugMail.pm8
-rw-r--r--extensions/SecureMail/Extension.pm43
2 files changed, 36 insertions, 15 deletions
diff --git a/Bugzilla/BugMail.pm b/Bugzilla/BugMail.pm
index 59b911878..6466448bc 100644
--- a/Bugzilla/BugMail.pm
+++ b/Bugzilla/BugMail.pm
@@ -453,6 +453,10 @@ sub sendMail {
sub enqueue {
my ($vars) = @_;
+
+ # BMO: allow modification of the email at the time it was generated
+ Bugzilla::Hook::process('bugmail_enqueue', { vars => $vars });
+
# we need to flatten all objects to a hash before pushing to the job queue.
# the hashes need to be inflated in the dequeue method.
$vars->{bug} = _flatten_object($vars->{bug});
@@ -544,6 +548,10 @@ sub _generate_bugmail {
$email->content_type_set('multipart/alternative');
}
$email->parts_set(\@parts);
+
+ # BMO: allow modification of the email given the enqueued variables
+ Bugzilla::Hook::process('bugmail_generate', { vars => $vars, email => $email });
+
return $email;
}
diff --git a/extensions/SecureMail/Extension.pm b/extensions/SecureMail/Extension.pm
index 492ce0cb6..90fafc06f 100644
--- a/extensions/SecureMail/Extension.pm
+++ b/extensions/SecureMail/Extension.pm
@@ -248,6 +248,25 @@ sub _send_test_email {
##############################################################################
# Encrypting the email
##############################################################################
+
+# determine if the bug should be encrypted at the time it is generated
+sub bugmail_enqueue {
+ my ($self, $args) = @_;
+ my $vars = $args->{vars};
+ if (_should_secure_bug($vars->{bug})) {
+ $vars->{bugzilla_encrypt} = 1;
+ }
+}
+
+sub bugmail_generate {
+ my ($self, $args) = @_;
+ my $vars = $args->{vars};
+ my $email = $args->{email};
+ if ($vars->{bugzilla_encrypt}) {
+ $email->header_set('X-Bugzilla-Encrypt', 1);
+ }
+}
+
sub mailer_before_send {
my ($self, $args) = @_;
@@ -556,7 +575,11 @@ sub _make_secure {
# Note: the $bug_id is required within the parentheses in order to keep
# gmail's threading algorithm happy.
$subject =~ s/($bug_id\])\s+(.*)$/$1$new (Secure bug $bug_id in $product :: $component)/;
- $email->header_set('Subject', $subject);
+ {
+ # avoid excessive line wrapping done by Encode.
+ local $Encode::Encoding{'MIME-Q'}->{'bpl'} = 998;
+ $email->header_set('Subject', encode('MIME-Q', $subject));
+ }
}
}
@@ -581,21 +604,18 @@ sub _pgp_encrypt {
# Insert the subject into the part's body, as the subject of the message will
# be sanitised.
# XXX this incorrectly assumes all parts of the message are the body
-# we should only alter parts who's parent is multipart/alternative
+# we should only alter parts whose parent is multipart/alternative
sub _insert_subject {
my ($part, $subject) = @_;
my $content_type = $part->content_type or return;
if ($content_type =~ /^text\/plain/) {
- if (!is_7bit_clean($subject)) {
- $part->encoding_set('quoted-printable');
- }
$part->body_str_set("Subject: $subject\015\012\015\012" . $part->body_str);
}
elsif ($content_type =~ /^text\/html/) {
my $tree = HTML::Tree->new->parse_content($part->body_str);
my $body = $tree->look_down(qw(_tag body));
- $body->unshift_content(['div', "Subject: $subject"], ['br']);
- _set_body_from_tree($part, $tree);
+ $body->unshift_content(['h1', "Subject: $subject"], ['br']);
+ $part->body_str_set($tree->as_HTML);
}
}
@@ -644,16 +664,9 @@ sub _filter_bug_links {
}
}
if ($updated) {
- _set_body_from_tree($part, $tree);
+ $part->body_str_set($tree->as_HTML);
}
});
}
-sub _set_body_from_tree {
- my ($part, $tree) = @_;
- $part->body_set($tree->as_HTML);
- $part->charset_set('UTF-8') if Bugzilla->params->{'utf8'};
- $part->encoding_set('quoted-printable');
-}
-
__PACKAGE__->NAME;