Fix error in `get_user_ip_and_agents` when fetching from the database (#10968)

This commit is contained in:
Sean Quah 2021-10-01 17:22:13 +01:00 committed by GitHub
parent 32072dcdac
commit d1cbad388f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 2 deletions

1
changelog.d/10968.bugfix Normal file
View File

@ -0,0 +1 @@
Fix `/admin/whois/{user_id}` endpoint, which was broken in v1.44.0rc1.

View File

@ -591,8 +591,8 @@ class ClientIpStore(ClientIpWorkerStore):
) )
results.update( results.update(
((row["access_token"], row["ip"]), (row["user_agent"], row["last_seen"])) ((access_token, ip), (user_agent, last_seen))
for row in rows for access_token, ip, user_agent, last_seen in rows
) )
return [ return [
{ {

View File

@ -15,9 +15,12 @@
from unittest.mock import Mock from unittest.mock import Mock
from parameterized import parameterized
import synapse.rest.admin import synapse.rest.admin
from synapse.http.site import XForwardedForRequest from synapse.http.site import XForwardedForRequest
from synapse.rest.client import login from synapse.rest.client import login
from synapse.types import UserID
from tests import unittest from tests import unittest
from tests.server import make_request from tests.server import make_request
@ -143,6 +146,37 @@ class ClientIpStoreTestCase(unittest.HomeserverTestCase):
], ],
) )
@parameterized.expand([(False,), (True,)])
def test_get_user_ip_and_agents(self, after_persisting: bool):
"""Test `get_user_ip_and_agents` for persisted and unpersisted data"""
self.reactor.advance(12345678)
user_id = "@user:id"
user = UserID.from_string(user_id)
# Insert a user IP
self.get_success(
self.store.insert_client_ip(
user_id, "access_token", "ip", "user_agent", "MY_DEVICE"
)
)
if after_persisting:
# Trigger the storage loop
self.reactor.advance(10)
self.assertEqual(
self.get_success(self.store.get_user_ip_and_agents(user)),
[
{
"access_token": "access_token",
"ip": "ip",
"user_agent": "user_agent",
"last_seen": 12345678000,
},
],
)
@override_config({"limit_usage_by_mau": False, "max_mau_value": 50}) @override_config({"limit_usage_by_mau": False, "max_mau_value": 50})
def test_disabled_monthly_active_user(self): def test_disabled_monthly_active_user(self):
user_id = "@user:server" user_id = "@user:server"