diff --git a/src/sentry/plugins/sentry_mail/models.py b/src/sentry/plugins/sentry_mail/models.py
index d2ea9c3be26620..3736cdf2b954ae 100644
--- a/src/sentry/plugins/sentry_mail/models.py
+++ b/src/sentry/plugins/sentry_mail/models.py
@@ -368,6 +368,9 @@ def handle_user_report(self, payload, project, **kwargs):
if not participants:
return
+ org = group.organization
+ enhanced_privacy = org.flags.enhanced_privacy
+
context = {
'project': project,
'project_link': absolute_uri(u'/{}/{}/'.format(
@@ -387,6 +390,7 @@ def handle_user_report(self, payload, project, **kwargs):
)),
'group': group,
'report': payload['report'],
+ 'enhanced_privacy': enhanced_privacy,
}
subject_prefix = self.get_option('subject_prefix', project) or self._subject_prefix()
diff --git a/src/sentry/templates/sentry/emails/activity/generic.html b/src/sentry/templates/sentry/emails/activity/generic.html
index 5682fe0ac554b7..bcae4119214338 100644
--- a/src/sentry/templates/sentry/emails/activity/generic.html
+++ b/src/sentry/templates/sentry/emails/activity/generic.html
@@ -28,7 +28,7 @@
{{ activity_name }}
{% endblock %}
- {% if group %}
+ {% if group and not enhanced_privacy %}
{% include "sentry/emails/group_header.html" %}
{% endif %}
diff --git a/src/sentry/templates/sentry/emails/activity/new-user-feedback.html b/src/sentry/templates/sentry/emails/activity/new-user-feedback.html
index 32dd9bd696e842..0c44fda3cd5e55 100644
--- a/src/sentry/templates/sentry/emails/activity/new-user-feedback.html
+++ b/src/sentry/templates/sentry/emails/activity/new-user-feedback.html
@@ -7,17 +7,25 @@
{% block activity %}
New Feedback from {{ report.name }}
-
-
-
- {% email_avatar report.name report.email size 48 %}
- |
-
-
- |
-
- {{ report.comments|urlize|linebreaks }}
- |
-
-
+ {% if enhanced_privacy %}
+
+ Details about this feedback are not shown in this notification since enhanced privacy
+ controls are enabled. For more details about this feedback,
view on Sentry.
+
+
+ {% else %}
+
+
+
+ {% email_avatar report.name report.email size 48 %}
+ |
+
+
+ |
+
+ {{ report.comments|urlize|linebreaks }}
+ |
+
+
+ {% endif %}
{% endblock %}
diff --git a/src/sentry/templates/sentry/emails/activity/new-user-feedback.txt b/src/sentry/templates/sentry/emails/activity/new-user-feedback.txt
index 2bf7249e5db9d4..0747792e223647 100644
--- a/src/sentry/templates/sentry/emails/activity/new-user-feedback.txt
+++ b/src/sentry/templates/sentry/emails/activity/new-user-feedback.txt
@@ -4,8 +4,14 @@
{{ report.name }} left a new comment:
+{% if enhanced_privacy %}
+Details about this feedback are not shown in this notification since enhanced privacy
+controls are enabled. For more details about this feedback, view on Sentry.
+
+{% else %}
{{ report.comments }}
+{% endif %}
## Details
diff --git a/src/sentry/web/frontend/debug/debug_new_user_feedback_email.py b/src/sentry/web/frontend/debug/debug_new_user_feedback_email.py
index 513d5cd1778cb1..8912d0595145bb 100644
--- a/src/sentry/web/frontend/debug/debug_new_user_feedback_email.py
+++ b/src/sentry/web/frontend/debug/debug_new_user_feedback_email.py
@@ -2,10 +2,13 @@
from django.views.generic import View
-from sentry.models import Group, Organization, Project
+from sentry.models import Organization, Project
from .mail import MailPreview
+from sentry.utils.http import absolute_uri
+from sentry.utils.samples import create_sample_event
+
class DebugNewUserFeedbackEmailView(View):
def get(self, request):
@@ -20,11 +23,21 @@ def get(self, request):
slug='project',
name='My Project',
)
- group = Group(
- id=1,
+
+ event = create_sample_event(
project=project,
+ platform='python',
+ event_id='595',
+ timestamp=1452683305,
)
+ group = event.group
+ link = absolute_uri(u'/{}/{}/issues/{}/feedback/'.format(
+ project.organization.slug,
+ project.slug,
+ group.id,
+ ))
+
return MailPreview(
html_template='sentry/emails/activity/new-user-feedback.html',
text_template='sentry/emails/activity/new-user-feedback.txt',
@@ -35,5 +48,8 @@ def get(self, request):
'email': 'homer.simpson@example.com',
'comments': 'I hit a bug.\n\nI went to https://example.com, hit the any key, and then it stopped working. DOH!',
},
+ 'link': link,
+ 'reason': 'are subscribed to this issue',
+ 'enhanced_privacy': False,
},
).render(request)
diff --git a/tests/sentry/plugins/mail/tests.py b/tests/sentry/plugins/mail/tests.py
index c832e2d2d4d58c..27c6e568a283a3 100644
--- a/tests/sentry/plugins/mail/tests.py
+++ b/tests/sentry/plugins/mail/tests.py
@@ -9,6 +9,7 @@
import six
from django.contrib.auth.models import AnonymousUser
from django.core import mail
+from django.db.models import F
from django.utils import timezone
from exam import fixture
from mock import Mock
@@ -20,8 +21,8 @@
from sentry.digests.notifications import build_digest, event_to_record
from sentry.interfaces.stacktrace import Stacktrace
from sentry.models import (
- Activity, Event, Group, GroupSubscription, OrganizationMember, OrganizationMemberTeam,
- ProjectOwnership, Rule, UserOption, UserReport
+ Activity, Event, Group, GroupSubscription, Organization, OrganizationMember,
+ OrganizationMemberTeam, ProjectOwnership, Rule, UserOption, UserReport
)
from sentry.ownership.grammar import Owner, Matcher, dump_schema
from sentry.plugins import Notification
@@ -424,17 +425,19 @@ class MailPluginSignalsTest(TestCase):
def plugin(self):
return MailPlugin()
- def test_user_feedback(self):
+ def create_report(self):
user_foo = self.create_user('foo@example.com')
+ self.project.teams.first().organization.member_set.create(user=user_foo)
- report = UserReport.objects.create(
+ return UserReport.objects.create(
project=self.project,
group=self.group,
name='Homer Simpson',
email='homer.simpson@example.com'
)
- self.project.teams.first().organization.member_set.create(user=user_foo)
+ def test_user_feedback(self):
+ report = self.create_report()
with self.tasks():
self.plugin.handle_signal(
@@ -446,9 +449,39 @@ def test_user_feedback(self):
)
assert len(mail.outbox) == 1
+ msg = mail.outbox[0]
+
+ # email includes issue metadata
+ assert 'group-header' in msg.alternatives[0][0]
+ assert 'enhanced privacy' not in msg.body
+
+ assert msg.subject == u'[Sentry] {} - New Feedback from Homer Simpson'.format(
+ self.group.qualified_short_id,
+ )
+ assert msg.to == [self.user.email]
+
+ def test_user_feedback__enhanced_privacy(self):
+ self.organization.update(flags=F('flags').bitor(Organization.flags.enhanced_privacy))
+ assert self.organization.flags.enhanced_privacy.is_set is True
+ report = self.create_report()
+
+ with self.tasks():
+ self.plugin.handle_signal(
+ name='user-reports.created',
+ project=self.project,
+ payload={
+ 'report': serialize(report, AnonymousUser(), UserReportWithGroupSerializer()),
+ },
+ )
+
+ assert len(mail.outbox) == 1
msg = mail.outbox[0]
+ # email does not include issue metadata
+ assert 'group-header' not in msg.alternatives[0][0]
+ assert 'enhanced privacy' in msg.body
+
assert msg.subject == u'[Sentry] {} - New Feedback from Homer Simpson'.format(
self.group.qualified_short_id,
)