Browse Source

ref: Improve SSO enabled link emails

Evan Purkhiser 7 years ago
parent
commit
6f5a7aa661

+ 1 - 3
src/sentry/auth/helper.py

@@ -724,9 +724,7 @@ class AuthHelper(object):
             data=self.auth_provider.get_audit_log_data(),
         )
 
-        email_missing_links.delay(
-            organization_id=self.organization.id,
-        )
+        email_missing_links.delay(self.organization.id, request.user.id, self.provider.key)
 
         messages.add_message(
             self.request,

+ 7 - 14
src/sentry/models/organizationmember.py

@@ -154,23 +154,16 @@ class OrganizationMember(Model):
             logger = get_logger(name='sentry.mail')
             logger.exception(e)
 
-    def send_sso_link_email(self):
+    def send_sso_link_email(self, configurer, provider):
         from sentry.utils.email import MessageBuilder
 
+        link_args = {'organization_slug': self.organization.slug}
+
         context = {
-            'email':
-            self.email,
-            'organization_name':
-            self.organization.name,
-            'url':
-            absolute_uri(
-                reverse(
-                    'sentry-auth-organization',
-                    kwargs={
-                        'organization_slug': self.organization.slug,
-                    }
-                )
-            ),
+            'organization': self.organization,
+            'configurer': configurer,
+            'provider': provider,
+            'url': absolute_uri(reverse('sentry-auth-organization', kwargs=link_args)),
         }
 
         msg = MessageBuilder(

+ 10 - 9
src/sentry/tasks/auth.py

@@ -2,21 +2,22 @@ from __future__ import absolute_import, print_function
 
 import logging
 
-from sentry.models import Organization, OrganizationMember
+from sentry.models import Organization, OrganizationMember, User
 from sentry.tasks.base import instrumented_task
+from sentry.auth import manager
+from sentry.auth.exceptions import ProviderNotRegistered
 
 logger = logging.getLogger('sentry.auth')
 
 
 @instrumented_task(name='sentry.tasks.send_sso_link_emails', queue='auth')
-def email_missing_links(organization_id, **kwargs):
+def email_missing_links(org_id, configurer_id, provider_key, **kwargs):
     try:
-        org = Organization.objects.get(id=organization_id)
-    except Organization.DoesNotExist:
-        logger.warning(
-            'Organization(id=%s) does not exist',
-            organization_id,
-        )
+        org = Organization.objects.get(id=org_id)
+        configurer = User.objects.get(id=configurer_id)
+        provider = manager.get(provider_key)
+    except(Organization.DoesNotExist, User.DoesNotExist, ProviderNotRegistered) as e:
+        logger.warning('Could not send SSO link emails: %s', e)
         return
 
     member_list = OrganizationMember.objects.filter(
@@ -24,4 +25,4 @@ def email_missing_links(organization_id, **kwargs):
         flags=~getattr(OrganizationMember.flags, 'sso:linked'),
     )
     for member in member_list:
-        member.send_sso_link_email()
+        member.send_sso_link_email(configurer, provider)

+ 9 - 2
src/sentry/templates/sentry/emails/auth-link-identity.html

@@ -3,7 +3,14 @@
 {% load i18n %}
 
 {% block main %}
-  <p>SSO has been configured for the <strong>{{ organization_name }}</strong> organization.</p>
+  <h3>{{ provider.name }} SSO Enabled</h3>
 
-  <p>We'll need you to link your existing account with the SSO provider by visiting the following url: {{ url }}</p>
+  <p>
+    <strong>{{ provider.name }}</strong> Single Sign-On has been configured for the
+    <strong>{{ organization_name }}</strong> organization. Link your Sentry account to enable
+    signing on with your <strong>{{ provider.name }}</strong> account.
+  </p>
+
+  <p><a href="{{ url|safe }}" class="btn">Link Account</a></p>
+  <p><small>SSO was enabled by <strong>{{ configurer.email }}</strong></small></p>
 {% endblock %}

+ 4 - 3
src/sentry/templates/sentry/emails/auth-link-identity.txt

@@ -1,6 +1,7 @@
-SSO has been configured for the {{ organization_name }} organization.
+{{ provider.name }} Single Sign-On has been configured for the {{ organization_name }} organization.
 
-We'll need you to link your existing account with the SSO provider by visiting the following url:
+Link your Sentry account to enable signing on with your {{ provider.name }} account by visiting the following url:
 
-    {{ url }}
+{{ url }}
 
+SSO was enabled by {{ configurer.email }}

+ 1 - 1
src/sentry/web/frontend/organization_auth_settings.py

@@ -92,7 +92,7 @@ class OrganizationAuthSettingsView(OrganizationView):
                 next_uri = reverse('sentry-organization-auth-settings', args=[organization.slug])
                 return self.redirect(next_uri)
             elif op == 'reinvite':
-                email_missing_links.delay(organization_id=organization.id)
+                email_missing_links.delay(organization.id, request.user.id, provider.key)
 
                 messages.add_message(
                     request,

+ 2 - 2
tests/sentry/tasks/test_auth.py

@@ -11,7 +11,7 @@ class EmailMissingLinksTest(TestCase):
     def test_simple(self):
         user = self.create_user(email='bar@example.com')
         organization = self.create_organization(owner=user, name='Test')
-        AuthProvider.objects.create(
+        provider = AuthProvider.objects.create(
             organization=organization,
             provider='dummy',
         )
@@ -29,7 +29,7 @@ class EmailMissingLinksTest(TestCase):
             flags=0,
         )
         with self.tasks():
-            email_missing_links(organization.id)
+            email_missing_links(organization.id, user.id, provider.provider)
 
         assert len(mail.outbox) == 1
         assert mail.outbox[0].to == [user2.email]