summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitch Jackson <mitch@freeside.biz>2017-12-03 23:05:13 +0000
committerMitch Jackson <mitch@freeside.biz>2017-12-03 23:05:13 +0000
commitf1efa648c501e910f675475c522dde7ed44c671f (patch)
treef8b30f25a47ee51ed7a48267d513a6953fc8e0e2
parent48e20d8f1d1b7bccbe0f1a37786cb2c42074a5fc (diff)
RT#76877 Add an outgoing email notification blacklist
-rw-r--r--rt/etc/RT_SiteConfig.pm2
-rw-r--r--rt/lib/RT/Action/SendEmail_Local.pm63
2 files changed, 65 insertions, 0 deletions
diff --git a/rt/etc/RT_SiteConfig.pm b/rt/etc/RT_SiteConfig.pm
index 6420d11..e22d202 100644
--- a/rt/etc/RT_SiteConfig.pm
+++ b/rt/etc/RT_SiteConfig.pm
@@ -58,6 +58,8 @@ Set($MessageBoxRichTextHeight, 368);
#Set(@Plugins,(qw(Extension::QuickDelete RT::FM)));
+# Enable blacklist for e-mail notifications (matches via case insensitive regex)
+#Set(@NotifyBlacklist,(qw(reddit.com slashdot.org frank)));
# Define default lifecycle to include resolved_quiet status workflow
Set(%Lifecycles,
diff --git a/rt/lib/RT/Action/SendEmail_Local.pm b/rt/lib/RT/Action/SendEmail_Local.pm
new file mode 100644
index 0000000..64a04de
--- /dev/null
+++ b/rt/lib/RT/Action/SendEmail_Local.pm
@@ -0,0 +1,63 @@
+use strict;
+use warnings;
+no warnings qw(redefine);
+
+package RT::Action::SendEmail;
+
+=head1 DESCRIPTION
+
+Overlay for RT::Action::SendEmail to implement a global email notifications
+blacklist. All components that send email using the SendEmail action will
+be affected by this blacklist.
+
+The web interface uses these filters to decide which email addresses to
+display as sendable. This gives us the added bonus of transparency. If
+an e-mail address is blacklisted, it will never appear in the recipient
+list on a ticket correspondance.
+
+=head1 USAGE
+
+To enable the blacklist, add a configuration option to RT_SiteConfig.pm
+
+ Set(@NotifyBlacklist,(qw(reddit.com slashdot.org frank)));
+
+If an email address regex matches any item in the list, no email is sent
+
+=head1 DEV NOTE
+
+This overlay implementation will need to be maintained if RT updates
+the SendEmail action to filter addresses differently. The benefit of
+using rt overlays is our library changes easily persist between rt versions,
+and don't need to be reimplemented with each release of rt. The downside
+of overlays if the underlying rt core functionality changes, our overlay
+may break rt until it is removed or updated.
+
+For information on RT library overlays,
+see L<https://rt-wiki.bestpractical.com/wiki/CustomizingWithOverlays>
+
+=cut
+
+sub RecipientFilter {
+ my $self = shift;
+
+ unless (ref $self->{RecipientFilter}) {
+ my @blacklist;
+ eval { @blacklist = @RT::NotifyBlacklist };
+ if (@blacklist) {
+ push @{$self->{RecipientFilter}}, {
+ All => 1,
+ Callback => sub {
+ my $email = shift;
+ for my $block (@blacklist) {
+ return "$email is blacklisted by NotifyBlacklist, skipping"
+ if $email =~ /$block/i;
+ }
+ return 0;
+ }
+ };
+ }
+ }
+ push @{ $self->{RecipientFilter}}, {@_};
+}
+
+1;