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

code_spécifique_watcha
Sean Quah 3 years ago committed by GitHub
parent 32072dcdac
commit d1cbad388f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/10968.bugfix
  2. 4
      synapse/storage/databases/main/client_ips.py
  3. 34
      tests/storage/test_client_ips.py

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

@ -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 [
{ {

@ -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"

Loading…
Cancel
Save