Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit d1cbad3

Browse files
authored
Fix error in get_user_ip_and_agents when fetching from the database (#10968)
1 parent 32072dc commit d1cbad3

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

changelog.d/10968.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix `/admin/whois/{user_id}` endpoint, which was broken in v1.44.0rc1.

synapse/storage/databases/main/client_ips.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -591,8 +591,8 @@ def get_recent(txn):
591591
)
592592

593593
results.update(
594-
((row["access_token"], row["ip"]), (row["user_agent"], row["last_seen"]))
595-
for row in rows
594+
((access_token, ip), (user_agent, last_seen))
595+
for access_token, ip, user_agent, last_seen in rows
596596
)
597597
return [
598598
{

tests/storage/test_client_ips.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515

1616
from unittest.mock import Mock
1717

18+
from parameterized import parameterized
19+
1820
import synapse.rest.admin
1921
from synapse.http.site import XForwardedForRequest
2022
from synapse.rest.client import login
23+
from synapse.types import UserID
2124

2225
from tests import unittest
2326
from tests.server import make_request
@@ -143,6 +146,37 @@ def test_insert_new_client_ip_none_device_id(self):
143146
],
144147
)
145148

149+
@parameterized.expand([(False,), (True,)])
150+
def test_get_user_ip_and_agents(self, after_persisting: bool):
151+
"""Test `get_user_ip_and_agents` for persisted and unpersisted data"""
152+
self.reactor.advance(12345678)
153+
154+
user_id = "@user:id"
155+
user = UserID.from_string(user_id)
156+
157+
# Insert a user IP
158+
self.get_success(
159+
self.store.insert_client_ip(
160+
user_id, "access_token", "ip", "user_agent", "MY_DEVICE"
161+
)
162+
)
163+
164+
if after_persisting:
165+
# Trigger the storage loop
166+
self.reactor.advance(10)
167+
168+
self.assertEqual(
169+
self.get_success(self.store.get_user_ip_and_agents(user)),
170+
[
171+
{
172+
"access_token": "access_token",
173+
"ip": "ip",
174+
"user_agent": "user_agent",
175+
"last_seen": 12345678000,
176+
},
177+
],
178+
)
179+
146180
@override_config({"limit_usage_by_mau": False, "max_mau_value": 50})
147181
def test_disabled_monthly_active_user(self):
148182
user_id = "@user:server"

0 commit comments

Comments
 (0)