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, )