Skip to content

Commit 64cd872

Browse files
Lms24HazAT
andauthored
fix(setup-wizard): Always create a new user API token (#69388)
In the wizard endpoint, we’d reuse existing user auth tokens of the authenticated user if: 1. the user was part of multiple orgs (==> we can't create an org-based token) 2. AND we found one that satisfied the necessary permissions for sourcemap upload. With #68148 being merged, we cannot do this anymore. Plain user auth token values are only gonna be available directly after the token was created. For the fix, this PR makes a change to the wizard endpoint to always create a new user API token. This now works just like when we create an org token for single-org users. Closes: #69381 --------- Co-authored-by: Daniel Griesser <[email protected]>
1 parent 57cb0dd commit 64cd872

File tree

2 files changed

+10
-19
lines changed

2 files changed

+10
-19
lines changed

src/sentry/web/frontend/setup_wizard.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,12 @@ def get_token(mappings: list[OrganizationMapping], user: RpcUser):
154154
return token
155155

156156
# Otherwise, generate a user token
157-
tokens = ApiToken.objects.filter(user_id=user.id)
158-
token = next((token for token in tokens if "project:releases" in token.get_scopes()), None)
159-
if token is None:
160-
token = ApiToken.objects.create(
161-
user_id=user.id,
162-
scope_list=["project:releases"],
163-
token_type=AuthTokenType.USER,
164-
expires_at=None,
165-
)
157+
token = ApiToken.objects.create(
158+
user_id=user.id,
159+
scope_list=["project:releases"],
160+
token_type=AuthTokenType.USER,
161+
expires_at=None,
162+
)
166163
return serialize(token)
167164

168165

tests/sentry/web/frontend/test_setup_wizard.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
from django.urls import reverse
33

44
from sentry.api.endpoints.setup_wizard import SETUP_WIZARD_CACHE_KEY
5-
from sentry.api.serializers import serialize
65
from sentry.cache import default_cache
7-
from sentry.models.apitoken import ApiToken
86
from sentry.models.projectkey import ProjectKey
97
from sentry.silo.base import SiloMode
108
from sentry.testutils.cases import PermissionTestCase
@@ -90,13 +88,6 @@ def test_project_multiple_keys(self):
9088
assert len(cached.get("projects")[0].get("keys")) == 2
9189

9290
def test_return_user_auth_token_if_multiple_orgs(self):
93-
user_api_token = ApiToken.objects.create_or_update(
94-
user=self.user,
95-
scope_list=["project:releases"],
96-
refresh_token=None,
97-
expires_at=None,
98-
)[0]
99-
10091
self.org = self.create_organization(name="org1", owner=self.user)
10192
self.org2 = self.create_organization(name="org2", owner=self.user)
10293
self.team = self.create_team(organization=self.org, name="Mariachi Band")
@@ -116,7 +107,10 @@ def test_return_user_auth_token_if_multiple_orgs(self):
116107
self.assertTemplateUsed(resp, "sentry/setup-wizard.html")
117108
cached = default_cache.get(key)
118109

119-
assert cached.get("apiKeys") == serialize(user_api_token)
110+
assert cached.get("apiKeys") is not None
111+
112+
token = cached.get("apiKeys")["token"]
113+
assert token.startswith("sntryu_")
120114

121115
def test_return_org_auth_token_if_one_org(self):
122116
self.org = self.create_organization(owner=self.user)

0 commit comments

Comments
 (0)