Merge remote-tracking branch 'origin/release-v1.12.4' into matrix-org-hotfixes
commit
8288218b29
|
@ -0,0 +1 @@
|
||||||
|
Always send users their own device updates.
|
|
@ -0,0 +1 @@
|
||||||
|
Document that account_data get requests can be routed to a worker.
|
|
@ -268,6 +268,8 @@ Additionally, the following REST endpoints can be handled for GET requests:
|
||||||
|
|
||||||
^/_matrix/client/(api/v1|r0|unstable)/pushrules/.*$
|
^/_matrix/client/(api/v1|r0|unstable)/pushrules/.*$
|
||||||
^/_matrix/client/(api/v1|r0|unstable)/groups/.*$
|
^/_matrix/client/(api/v1|r0|unstable)/groups/.*$
|
||||||
|
^/_matrix/client/(api/v1|r0|unstable)/user/[^/]*/account_data/
|
||||||
|
^/_matrix/client/(api/v1|r0|unstable)/user/[^/]*/rooms/[^/]*/account_data/
|
||||||
|
|
||||||
Additionally, the following REST endpoints can be handled, but all requests must
|
Additionally, the following REST endpoints can be handled, but all requests must
|
||||||
be routed to the same instance:
|
be routed to the same instance:
|
||||||
|
|
|
@ -98,6 +98,10 @@ from synapse.rest.client.v1.voip import VoipRestServlet
|
||||||
from synapse.rest.client.v2_alpha import groups, sync, user_directory
|
from synapse.rest.client.v2_alpha import groups, sync, user_directory
|
||||||
from synapse.rest.client.v2_alpha._base import client_patterns
|
from synapse.rest.client.v2_alpha._base import client_patterns
|
||||||
from synapse.rest.client.v2_alpha.account import ThreepidRestServlet
|
from synapse.rest.client.v2_alpha.account import ThreepidRestServlet
|
||||||
|
from synapse.rest.client.v2_alpha.account_data import (
|
||||||
|
AccountDataServlet,
|
||||||
|
RoomAccountDataServlet,
|
||||||
|
)
|
||||||
from synapse.rest.client.v2_alpha.keys import KeyChangesServlet, KeyQueryServlet
|
from synapse.rest.client.v2_alpha.keys import KeyChangesServlet, KeyQueryServlet
|
||||||
from synapse.rest.client.v2_alpha.register import RegisterRestServlet
|
from synapse.rest.client.v2_alpha.register import RegisterRestServlet
|
||||||
from synapse.rest.client.versions import VersionsRestServlet
|
from synapse.rest.client.versions import VersionsRestServlet
|
||||||
|
@ -475,6 +479,8 @@ class GenericWorkerServer(HomeServer):
|
||||||
ProfileDisplaynameRestServlet(self).register(resource)
|
ProfileDisplaynameRestServlet(self).register(resource)
|
||||||
ProfileRestServlet(self).register(resource)
|
ProfileRestServlet(self).register(resource)
|
||||||
KeyUploadServlet(self).register(resource)
|
KeyUploadServlet(self).register(resource)
|
||||||
|
AccountDataServlet(self).register(resource)
|
||||||
|
RoomAccountDataServlet(self).register(resource)
|
||||||
|
|
||||||
sync.register_servlets(self, resource)
|
sync.register_servlets(self, resource)
|
||||||
events.register_servlets(self, resource)
|
events.register_servlets(self, resource)
|
||||||
|
|
|
@ -125,8 +125,14 @@ class DeviceWorkerHandler(BaseHandler):
|
||||||
users_who_share_room = yield self.store.get_users_who_share_room_with_user(
|
users_who_share_room = yield self.store.get_users_who_share_room_with_user(
|
||||||
user_id
|
user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
tracked_users = set(users_who_share_room)
|
||||||
|
|
||||||
|
# Always tell the user about their own devices
|
||||||
|
tracked_users.add(user_id)
|
||||||
|
|
||||||
changed = yield self.store.get_users_whose_devices_changed(
|
changed = yield self.store.get_users_whose_devices_changed(
|
||||||
from_token.device_list_key, users_who_share_room
|
from_token.device_list_key, tracked_users
|
||||||
)
|
)
|
||||||
|
|
||||||
# Then work out if any users have since joined
|
# Then work out if any users have since joined
|
||||||
|
@ -456,7 +462,11 @@ class DeviceHandler(DeviceWorkerHandler):
|
||||||
|
|
||||||
room_ids = yield self.store.get_rooms_for_user(user_id)
|
room_ids = yield self.store.get_rooms_for_user(user_id)
|
||||||
|
|
||||||
yield self.notifier.on_new_event("device_list_key", position, rooms=room_ids)
|
# specify the user ID too since the user should always get their own device list
|
||||||
|
# updates, even if they aren't in any rooms.
|
||||||
|
yield self.notifier.on_new_event(
|
||||||
|
"device_list_key", position, users=[user_id], rooms=room_ids
|
||||||
|
)
|
||||||
|
|
||||||
if hosts:
|
if hosts:
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|
|
@ -1146,9 +1146,14 @@ class SyncHandler(object):
|
||||||
user_id
|
user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
tracked_users = set(users_who_share_room)
|
||||||
|
|
||||||
|
# Always tell the user about their own devices
|
||||||
|
tracked_users.add(user_id)
|
||||||
|
|
||||||
# Step 1a, check for changes in devices of users we share a room with
|
# Step 1a, check for changes in devices of users we share a room with
|
||||||
users_that_have_changed = await self.store.get_users_whose_devices_changed(
|
users_that_have_changed = await self.store.get_users_whose_devices_changed(
|
||||||
since_token.device_list_key, users_who_share_room
|
since_token.device_list_key, tracked_users
|
||||||
)
|
)
|
||||||
|
|
||||||
# Step 1b, check for newly joined rooms
|
# Step 1b, check for newly joined rooms
|
||||||
|
|
|
@ -38,8 +38,12 @@ class AccountDataServlet(RestServlet):
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
self.store = hs.get_datastore()
|
self.store = hs.get_datastore()
|
||||||
self.notifier = hs.get_notifier()
|
self.notifier = hs.get_notifier()
|
||||||
|
self._is_worker = hs.config.worker_app is not None
|
||||||
|
|
||||||
async def on_PUT(self, request, user_id, account_data_type):
|
async def on_PUT(self, request, user_id, account_data_type):
|
||||||
|
if self._is_worker:
|
||||||
|
raise Exception("Cannot handle PUT /account_data on worker")
|
||||||
|
|
||||||
requester = await self.auth.get_user_by_req(request)
|
requester = await self.auth.get_user_by_req(request)
|
||||||
if user_id != requester.user.to_string():
|
if user_id != requester.user.to_string():
|
||||||
raise AuthError(403, "Cannot add account data for other users.")
|
raise AuthError(403, "Cannot add account data for other users.")
|
||||||
|
@ -86,8 +90,12 @@ class RoomAccountDataServlet(RestServlet):
|
||||||
self.auth = hs.get_auth()
|
self.auth = hs.get_auth()
|
||||||
self.store = hs.get_datastore()
|
self.store = hs.get_datastore()
|
||||||
self.notifier = hs.get_notifier()
|
self.notifier = hs.get_notifier()
|
||||||
|
self._is_worker = hs.config.worker_app is not None
|
||||||
|
|
||||||
async def on_PUT(self, request, user_id, room_id, account_data_type):
|
async def on_PUT(self, request, user_id, room_id, account_data_type):
|
||||||
|
if self._is_worker:
|
||||||
|
raise Exception("Cannot handle PUT /account_data on worker")
|
||||||
|
|
||||||
requester = await self.auth.get_user_by_req(request)
|
requester = await self.auth.get_user_by_req(request)
|
||||||
if user_id != requester.user.to_string():
|
if user_id != requester.user.to_string():
|
||||||
raise AuthError(403, "Cannot add account data for other users.")
|
raise AuthError(403, "Cannot add account data for other users.")
|
||||||
|
|
Loading…
Reference in New Issue