Skip to content

Commit e5b1933

Browse files
authored
fix(cells): Invalid invitation token or context always 404s (#112633)
Invalid or expired invite links now return 404 rather than falling through to handle_react. Since the old React route is being removed, the fallback would have silently broken anyway — 404 is the semantically correct response for a link that doesn't resolve to a valid invite. We never want to reveal the org if the token or invite context is not valid
1 parent 3634485 commit e5b1933

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

src/sentry/web/frontend/accept_organization_invite_redirect.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
3+
from django.http import HttpRequest, HttpResponse, HttpResponseNotFound, HttpResponseRedirect
44
from django.urls import reverse
55

66
from sentry.api.endpoints.accept_organization_invite import get_invite_state
@@ -29,11 +29,11 @@ def handle(self, request: HttpRequest, **kwargs) -> HttpResponse:
2929
request=request,
3030
)
3131
if invite_context is None:
32-
return self.handle_react(request, **kwargs)
32+
return HttpResponseNotFound()
3333

3434
helper = ApiInviteHelper(request=request, token=token, invite_context=invite_context)
3535
if not helper.valid_token:
36-
return self.handle_react(request, **kwargs)
36+
return HttpResponseNotFound()
3737

3838
redirect_url = reverse(
3939
"sentry-organization-accept-invite",

tests/sentry/web/frontend/test_accept_organization_invite_redirect.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,9 @@ def test_invalid_token_does_not_leak_org_slug(self) -> None:
3737
reverse("sentry-accept-invite", args=[member.id, "invalidtoken"])
3838
)
3939

40-
assert response.status_code == 200
41-
self.assertTemplateUsed(response, "sentry/base-react.html")
40+
assert response.status_code == 404
4241

43-
def test_unresolved_legacy_invite_falls_back_to_react_page(self) -> None:
42+
def test_unresolved_legacy_invite_returns_404(self) -> None:
4443
response = self.client.get(reverse("sentry-accept-invite", args=[123456, "invalidtoken"]))
4544

46-
assert response.status_code == 200
47-
self.assertTemplateUsed(response, "sentry/base-react.html")
45+
assert response.status_code == 404

0 commit comments

Comments
 (0)