|
@@ -1,5 +1,8 @@
|
|
|
-from typing import Optional
|
|
|
+from __future__ import annotations
|
|
|
|
|
|
+from typing import Mapping, Optional
|
|
|
+
|
|
|
+from django.conf import settings
|
|
|
from django.urls import reverse
|
|
|
from rest_framework import status
|
|
|
from rest_framework.request import Request
|
|
@@ -11,12 +14,19 @@ from sentry.api.invite_helper import (
|
|
|
add_invite_details_to_session,
|
|
|
remove_invite_details_from_session,
|
|
|
)
|
|
|
-from sentry.models import AuthProvider, OrganizationMemberMapping
|
|
|
+from sentry.models import (
|
|
|
+ AuthProvider,
|
|
|
+ OrganizationMapping,
|
|
|
+ OrganizationMember,
|
|
|
+ OrganizationMemberMapping,
|
|
|
+)
|
|
|
from sentry.services.hybrid_cloud.organization import (
|
|
|
RpcUserInviteContext,
|
|
|
RpcUserOrganizationContext,
|
|
|
organization_service,
|
|
|
)
|
|
|
+from sentry.silo import SiloMode
|
|
|
+from sentry.types.region import RegionResolutionError, get_region_by_name
|
|
|
from sentry.utils import auth
|
|
|
|
|
|
|
|
@@ -41,16 +51,45 @@ class AcceptOrganizationInvite(Endpoint):
|
|
|
user_id: int,
|
|
|
) -> Optional[RpcUserInviteContext]:
|
|
|
if organization_slug is None:
|
|
|
- member_mapping = OrganizationMemberMapping.objects.filter(
|
|
|
- organizationmember_id=member_id
|
|
|
- ).first()
|
|
|
- if member_mapping is None:
|
|
|
- return None
|
|
|
- invite_context = organization_service.get_invite_by_id(
|
|
|
- organization_id=member_mapping.organization_id,
|
|
|
- organization_member_id=member_id,
|
|
|
- user_id=user_id,
|
|
|
- )
|
|
|
+ # TODO: Remove once the organization mapping migration is complete
|
|
|
+ if SiloMode.get_current_mode() == SiloMode.MONOLITH:
|
|
|
+ om = OrganizationMember.objects.filter(id=member_id).first()
|
|
|
+ if om is None:
|
|
|
+ return None
|
|
|
+ invite_context = organization_service.get_invite_by_id(
|
|
|
+ organization_id=om.organization_id,
|
|
|
+ organization_member_id=member_id,
|
|
|
+ user_id=user_id,
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ member_mapping: OrganizationMemberMapping | None = None
|
|
|
+ member_mappings: Mapping[int, OrganizationMemberMapping] = {
|
|
|
+ omm.organization_id: omm
|
|
|
+ for omm in OrganizationMemberMapping.objects.filter(
|
|
|
+ organizationmember_id=member_id
|
|
|
+ ).all()
|
|
|
+ }
|
|
|
+ org_mappings = OrganizationMapping.objects.filter(
|
|
|
+ organization_id__in=list(member_mappings.keys())
|
|
|
+ )
|
|
|
+ for mapping in org_mappings:
|
|
|
+ try:
|
|
|
+ if (
|
|
|
+ get_region_by_name(mapping.region_name).name
|
|
|
+ == settings.SENTRY_MONOLITH_REGION
|
|
|
+ ):
|
|
|
+ member_mapping = member_mappings.get(mapping.organization_id)
|
|
|
+ break
|
|
|
+ except RegionResolutionError:
|
|
|
+ pass
|
|
|
+
|
|
|
+ if member_mapping is None:
|
|
|
+ return None
|
|
|
+ invite_context = organization_service.get_invite_by_id(
|
|
|
+ organization_id=member_mapping.organization_id,
|
|
|
+ organization_member_id=member_id,
|
|
|
+ user_id=user_id,
|
|
|
+ )
|
|
|
else:
|
|
|
invite_context = organization_service.get_invite_by_slug(
|
|
|
organization_member_id=member_id,
|