mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-12 12:52:11 -04:00
Track device IDs for pushers (#13831)
Second half of the MSC3881 implementation
This commit is contained in:
parent
0fd2f2d460
commit
ccca14140a
7 changed files with 154 additions and 10 deletions
|
@ -22,6 +22,7 @@ from synapse.logging.context import make_deferred_yieldable
|
|||
from synapse.push import PusherConfig, PusherConfigException
|
||||
from synapse.rest.client import login, push_rule, pusher, receipts, room
|
||||
from synapse.server import HomeServer
|
||||
from synapse.storage.databases.main.registration import TokenLookupResult
|
||||
from synapse.types import JsonDict
|
||||
from synapse.util import Clock
|
||||
|
||||
|
@ -771,6 +772,7 @@ class HTTPPusherTests(HomeserverTestCase):
|
|||
lang=None,
|
||||
data={"url": "http://example.com/_matrix/push/v1/notify"},
|
||||
enabled=enabled,
|
||||
device_id=user_tuple.device_id,
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -885,19 +887,21 @@ class HTTPPusherTests(HomeserverTestCase):
|
|||
self.assertEqual(len(channel.json_body["pushers"]), 1)
|
||||
self.assertTrue(channel.json_body["pushers"][0]["org.matrix.msc3881.enabled"])
|
||||
|
||||
def test_update_different_device_access_token(self) -> None:
|
||||
def test_update_different_device_access_token_device_id(self) -> None:
|
||||
"""Tests that if we create a pusher from one device, the update it from another
|
||||
device, the access token associated with the pusher stays the same.
|
||||
device, the access token and device ID associated with the pusher stays the
|
||||
same.
|
||||
"""
|
||||
# Create a user with a pusher.
|
||||
user_id, access_token = self._make_user_with_pusher("user")
|
||||
|
||||
# Get the token ID for the current access token, since that's what we store in
|
||||
# the pushers table.
|
||||
# the pushers table. Also get the device ID from it.
|
||||
user_tuple = self.get_success(
|
||||
self.hs.get_datastores().main.get_user_by_access_token(access_token)
|
||||
)
|
||||
token_id = user_tuple.token_id
|
||||
device_id = user_tuple.device_id
|
||||
|
||||
# Generate a new access token, and update the pusher with it.
|
||||
new_token = self.login("user", "pass")
|
||||
|
@ -909,7 +913,48 @@ class HTTPPusherTests(HomeserverTestCase):
|
|||
)
|
||||
pushers: List[PusherConfig] = list(ret)
|
||||
|
||||
# Check that we still have one pusher, and that the access token associated with
|
||||
# it didn't change.
|
||||
# Check that we still have one pusher, and that the access token and device ID
|
||||
# associated with it didn't change.
|
||||
self.assertEqual(len(pushers), 1)
|
||||
self.assertEqual(pushers[0].access_token, token_id)
|
||||
self.assertEqual(pushers[0].device_id, device_id)
|
||||
|
||||
@override_config({"experimental_features": {"msc3881_enabled": True}})
|
||||
def test_device_id(self) -> None:
|
||||
"""Tests that a pusher created with a given device ID shows that device ID in
|
||||
GET /pushers requests.
|
||||
"""
|
||||
self.register_user("user", "pass")
|
||||
access_token = self.login("user", "pass")
|
||||
|
||||
# We create the pusher with an HTTP request rather than with
|
||||
# _make_user_with_pusher so that we can test the device ID is correctly set when
|
||||
# creating a pusher via an API call.
|
||||
self.make_request(
|
||||
method="POST",
|
||||
path="/pushers/set",
|
||||
content={
|
||||
"kind": "http",
|
||||
"app_id": "m.http",
|
||||
"app_display_name": "HTTP Push Notifications",
|
||||
"device_display_name": "pushy push",
|
||||
"pushkey": "a@example.com",
|
||||
"lang": "en",
|
||||
"data": {"url": "http://example.com/_matrix/push/v1/notify"},
|
||||
},
|
||||
access_token=access_token,
|
||||
)
|
||||
|
||||
# Look up the user info for the access token so we can compare the device ID.
|
||||
lookup_result: TokenLookupResult = self.get_success(
|
||||
self.hs.get_datastores().main.get_user_by_access_token(access_token)
|
||||
)
|
||||
|
||||
# Get the user's devices and check it has the correct device ID.
|
||||
channel = self.make_request("GET", "/pushers", access_token=access_token)
|
||||
self.assertEqual(channel.code, 200)
|
||||
self.assertEqual(len(channel.json_body["pushers"]), 1)
|
||||
self.assertEqual(
|
||||
channel.json_body["pushers"][0]["org.matrix.msc3881.device_id"],
|
||||
lookup_result.device_id,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue