|
|
@@ -654,6 +654,71 @@ class ClientIpStoreTestCase(unittest.HomeserverTestCase): |
|
|
|
r, |
|
|
|
) |
|
|
|
|
|
|
|
def test_invalid_user_agents_are_ignored(self) -> None: |
|
|
|
# First make sure we have completed all updates. |
|
|
|
self.wait_for_background_updates() |
|
|
|
|
|
|
|
user_id1 = "@user1:id" |
|
|
|
user_id2 = "@user2:id" |
|
|
|
device_id1 = "MY_DEVICE1" |
|
|
|
device_id2 = "MY_DEVICE2" |
|
|
|
access_token1 = "access_token1" |
|
|
|
access_token2 = "access_token2" |
|
|
|
|
|
|
|
# Insert a user IP 1 |
|
|
|
self.get_success( |
|
|
|
self.store.store_device( |
|
|
|
user_id1, |
|
|
|
device_id1, |
|
|
|
"display name1", |
|
|
|
) |
|
|
|
) |
|
|
|
# Insert a user IP 2 |
|
|
|
self.get_success( |
|
|
|
self.store.store_device( |
|
|
|
user_id2, |
|
|
|
device_id2, |
|
|
|
"display name2", |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
self.get_success( |
|
|
|
self.store.insert_client_ip( |
|
|
|
user_id1, access_token1, "ip", "sync-v3-proxy-", device_id1 |
|
|
|
) |
|
|
|
) |
|
|
|
self.get_success( |
|
|
|
self.store.insert_client_ip( |
|
|
|
user_id2, access_token2, "ip", "user_agent", device_id2 |
|
|
|
) |
|
|
|
) |
|
|
|
# Force persisting to disk |
|
|
|
self.reactor.advance(200) |
|
|
|
|
|
|
|
# We should see that in the DB |
|
|
|
result = self.get_success( |
|
|
|
self.store.db_pool.simple_select_list( |
|
|
|
table="user_ips", |
|
|
|
keyvalues={}, |
|
|
|
retcols=["access_token", "ip", "user_agent", "device_id", "last_seen"], |
|
|
|
desc="get_user_ip_and_agents", |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
# ensure user1 is filtered out |
|
|
|
self.assertEqual( |
|
|
|
result, |
|
|
|
[ |
|
|
|
{ |
|
|
|
"access_token": access_token2, |
|
|
|
"ip": "ip", |
|
|
|
"user_agent": "user_agent", |
|
|
|
"device_id": device_id2, |
|
|
|
"last_seen": 0, |
|
|
|
} |
|
|
|
], |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
class ClientIpAuthTestCase(unittest.HomeserverTestCase): |
|
|
|
servlets = [ |
|
|
|