Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/sentry/api/endpoints/organization_intercom_jwt.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,12 @@ def get(
user = request.user
now = int(datetime.datetime.now(datetime.UTC).timestamp())
exp = now + JWT_VALIDITY_WINDOW_SECONDS
# intercom creates chat history based on this ID so we need one per (org, user) pair
intercom_user_id = f"{user.id}-{organization.id}"

# Build JWT claims - user_id is required by Intercom
claims = {
"user_id": str(user.id),
"user_id": intercom_user_id,
"email": user.email,
"iat": now,
"exp": exp,
Expand All @@ -90,7 +92,7 @@ def get(
created_at = int(user.last_active.timestamp())

user_data = {
"userId": str(user.id),
"userId": intercom_user_id,
"email": user.email,
"name": user.get_display_name(),
"createdAt": created_at,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def test_get_jwt_without_secret_configured(self) -> None:
def test_get_jwt_success(self) -> None:
"""With feature flag and secret configured, should return JWT and user data."""
test_secret = "test-intercom-secret-key"
intercom_user_id = f"{self.user.id}-{self.organization.id}"

with (
self.feature("organizations:intercom-support"),
Expand All @@ -39,7 +40,7 @@ def test_get_jwt_success(self) -> None:

# Verify user data
user_data = response.data["userData"]
assert user_data["userId"] == str(self.user.id)
assert user_data["userId"] == intercom_user_id
assert user_data["email"] == self.user.email
assert user_data["organizationId"] == str(self.organization.id)
assert user_data["organizationName"] == self.organization.name
Expand All @@ -49,7 +50,7 @@ def test_get_jwt_success(self) -> None:
token = response.data["jwt"]
decoded = jwt.decode(token, test_secret, algorithms=["HS256"], audience=False)

assert decoded["user_id"] == str(self.user.id)
assert decoded["user_id"] == intercom_user_id
assert decoded["email"] == self.user.email
assert "iat" in decoded
assert "exp" in decoded
Expand Down
Loading