Browse Source

fix(auth): Associate org member on single-org register (#18922)

Evan Purkhiser 4 years ago
parent
commit
102313af59

+ 8 - 1
src/sentry/web/frontend/auth_login.py

@@ -13,7 +13,7 @@ from sentry.api.invite_helper import ApiInviteHelper, remove_invite_cookie
 from sentry.auth.superuser import is_active_superuser
 from sentry.constants import WARN_SESSION_EXPIRED
 from sentry.http import get_server_hostname
-from sentry.models import AuthProvider, Organization, OrganizationStatus
+from sentry.models import AuthProvider, Organization, OrganizationStatus, OrganizationMember
 from sentry.signals import join_request_link_viewed, user_signup
 from sentry.web.forms.accounts import AuthenticationForm, RegistrationForm
 from sentry.web.frontend.base import BaseView
@@ -141,6 +141,13 @@ class AuthLoginView(BaseView):
             request.session.pop("can_register", None)
             request.session.pop("invite_email", None)
 
+            # In single org mode, associate the user to the orgnaization
+            if settings.SENTRY_SINGLE_ORGANIZATION:
+                organization = Organization.get_default()
+                OrganizationMember.objects.create(
+                    organization=organization, role=organization.default_role, user=user
+                )
+
             # Attempt to directly accept any pending invites
             invite_helper = ApiInviteHelper.from_cookie(request=request, instance=self)
 

+ 22 - 0
tests/sentry/web/frontend/test_auth_login.py

@@ -3,6 +3,7 @@ from __future__ import absolute_import
 import pytest
 from sentry.utils.compat import mock
 
+from django.test import override_settings
 from django.conf import settings
 from django.core.urlresolvers import reverse
 from django.utils.http import urlquote
@@ -99,6 +100,27 @@ class AuthLoginTest(TestCase):
             )
         ]
 
+    @override_settings(SENTRY_SINGLE_ORGANIZATION=True)
+    def test_registration_single_org(self):
+        options.set("auth.allow-registration", True)
+        with self.feature("auth:register"):
+            resp = self.client.post(
+                self.path,
+                {
+                    "username": "test-a-really-long-email-address@example.com",
+                    "password": "foobar",
+                    "name": "Foo Bar",
+                    "op": "register",
+                },
+            )
+        assert resp.status_code == 302, (
+            resp.context["register_form"].errors if resp.status_code == 200 else None
+        )
+        user = User.objects.get(username="test-a-really-long-email-address@example.com")
+
+        # User is part of the default org
+        assert OrganizationMember.objects.filter(user=user).exists()
+
     def test_register_renders_correct_template(self):
         options.set("auth.allow-registration", True)
         register_path = reverse("sentry-register")