Merge branch 'release-v1.10.0' of github.com:matrix-org/synapse into matrix-org-hotfixes
commit
7d5268d37c
47
CHANGES.md
47
CHANGES.md
|
@ -1,3 +1,50 @@
|
|||
Synapse 1.10.0rc1 (2020-01-31)
|
||||
==============================
|
||||
|
||||
**WARNING**: As of this release Synapse validates `client_secret` parameters in the Client-Server API as per the spec. See [\#6766](https://github.com/matrix-org/synapse/issues/6766) for details.
|
||||
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
- Add experimental support for updated authorization rules for aliases events, from [MSC2260](https://github.com/matrix-org/matrix-doc/pull/2260). ([\#6787](https://github.com/matrix-org/synapse/issues/6787), [\#6790](https://github.com/matrix-org/synapse/issues/6790), [\#6794](https://github.com/matrix-org/synapse/issues/6794))
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
- Warn if postgres database has a non-C locale, as that can cause issues when upgrading locales (e.g. due to upgrading OS). ([\#6734](https://github.com/matrix-org/synapse/issues/6734))
|
||||
- Minor fixes to `PUT /_synapse/admin/v2/users` admin api. ([\#6761](https://github.com/matrix-org/synapse/issues/6761))
|
||||
- Validate `client_secret` parameter using the regex provided by the Client-Server API, temporarily allowing `:` characters for older clients. The `:` character will be removed in a future release. ([\#6767](https://github.com/matrix-org/synapse/issues/6767))
|
||||
- Fix persisting redaction events that have been redacted (or otherwise don't have a redacts key). ([\#6771](https://github.com/matrix-org/synapse/issues/6771))
|
||||
- Fix outbound federation request metrics. ([\#6795](https://github.com/matrix-org/synapse/issues/6795))
|
||||
- Fix bug where querying a remote user's device keys that weren't cached resulted in only returning a single device. ([\#6796](https://github.com/matrix-org/synapse/issues/6796))
|
||||
- Fix race in federation sender worker that delayed sending of device updates. ([\#6799](https://github.com/matrix-org/synapse/issues/6799), [\#6800](https://github.com/matrix-org/synapse/issues/6800))
|
||||
- Fix bug where Synapse didn't invalidate cache of remote users' devices when Synapse left a room. ([\#6801](https://github.com/matrix-org/synapse/issues/6801))
|
||||
- Fix waking up other workers when remote server is detected to have come back online. ([\#6811](https://github.com/matrix-org/synapse/issues/6811))
|
||||
|
||||
|
||||
Improved Documentation
|
||||
----------------------
|
||||
|
||||
- Clarify documentation related to `user_dir` and `federation_reader` workers. ([\#6775](https://github.com/matrix-org/synapse/issues/6775))
|
||||
|
||||
|
||||
Internal Changes
|
||||
----------------
|
||||
|
||||
- Record room versions in the `rooms` table. ([\#6729](https://github.com/matrix-org/synapse/issues/6729), [\#6788](https://github.com/matrix-org/synapse/issues/6788), [\#6810](https://github.com/matrix-org/synapse/issues/6810))
|
||||
- Propagate cache invalidates from workers to other workers. ([\#6748](https://github.com/matrix-org/synapse/issues/6748))
|
||||
- Remove some unnecessary admin handler abstraction methods. ([\#6751](https://github.com/matrix-org/synapse/issues/6751))
|
||||
- Add some debugging for media storage providers. ([\#6757](https://github.com/matrix-org/synapse/issues/6757))
|
||||
- Detect unknown remote devices and mark cache as stale. ([\#6776](https://github.com/matrix-org/synapse/issues/6776), [\#6819](https://github.com/matrix-org/synapse/issues/6819))
|
||||
- Attempt to resync remote users' devices when detected as stale. ([\#6786](https://github.com/matrix-org/synapse/issues/6786))
|
||||
- Delete current state from the database when server leaves a room. ([\#6792](https://github.com/matrix-org/synapse/issues/6792))
|
||||
- When a client asks for a remote user's device keys check if the local cache for that user has been marked as potentially stale. ([\#6797](https://github.com/matrix-org/synapse/issues/6797))
|
||||
- Add background update to clean out left rooms from current state. ([\#6802](https://github.com/matrix-org/synapse/issues/6802), [\#6816](https://github.com/matrix-org/synapse/issues/6816))
|
||||
- Refactoring work in preparation for changing the event redaction algorithm. ([\#6803](https://github.com/matrix-org/synapse/issues/6803), [\#6805](https://github.com/matrix-org/synapse/issues/6805), [\#6806](https://github.com/matrix-org/synapse/issues/6806), [\#6807](https://github.com/matrix-org/synapse/issues/6807), [\#6820](https://github.com/matrix-org/synapse/issues/6820))
|
||||
|
||||
|
||||
Synapse 1.9.1 (2020-01-28)
|
||||
==========================
|
||||
|
||||
|
|
|
@ -76,13 +76,13 @@ for example:
|
|||
dpkg -i matrix-synapse-py3_1.3.0+stretch1_amd64.deb
|
||||
|
||||
|
||||
Upgrading to **<NEXT_VERSION>**
|
||||
===============================
|
||||
Upgrading to v1.10.0
|
||||
====================
|
||||
|
||||
Synapse will now log a warning on start up if used with a PostgreSQL database
|
||||
that has a non-recommended locale set.
|
||||
|
||||
See [docs/postgres.md](docs/postgres.md) for details.
|
||||
See `docs/postgres.md <docs/postgres.md>`_ for details.
|
||||
|
||||
|
||||
Upgrading to v1.8.0
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Record room versions in the `rooms` table.
|
|
@ -1 +0,0 @@
|
|||
Warn if postgres database has a non-C locale, as that can cause issues when upgrading locales (e.g. due to upgrading OS).
|
|
@ -1 +0,0 @@
|
|||
Propagate cache invalidates from workers to other workers.
|
|
@ -1 +0,0 @@
|
|||
Remove some unnecessary admin handler abstraction methods.
|
|
@ -1 +0,0 @@
|
|||
Add some debugging for media storage providers.
|
|
@ -1 +0,0 @@
|
|||
Minor fixes to `PUT /_synapse/admin/v2/users` admin api.
|
|
@ -1 +0,0 @@
|
|||
Validate `client_secret` parameter using the regex provided by the Client-Server API, temporarily allowing `:` characters for older clients. The `:` character will be removed in a future release.
|
|
@ -1 +0,0 @@
|
|||
Fix persisting redaction events that have been redacted (or otherwise don't have a redacts key).
|
|
@ -1 +0,0 @@
|
|||
Clarify documentation related to `user_dir` and `federation_reader` workers.
|
|
@ -1 +0,0 @@
|
|||
Detect unknown remote devices and mark cache as stale.
|
|
@ -1 +0,0 @@
|
|||
Attempt to resync remote users' devices when detected as stale.
|
|
@ -1 +0,0 @@
|
|||
Implement updated authorization rules for aliases events, from [MSC2260](https://github.com/matrix-org/matrix-doc/pull/2260).
|
|
@ -1 +0,0 @@
|
|||
Record room versions in the `rooms` table.
|
|
@ -1 +0,0 @@
|
|||
Implement updated authorization rules for aliases events, from [MSC2260](https://github.com/matrix-org/matrix-doc/pull/2260).
|
|
@ -1 +0,0 @@
|
|||
Delete current state from the database when server leaves a room.
|
|
@ -1 +0,0 @@
|
|||
Implement updated authorization rules for aliases events, from [MSC2260](https://github.com/matrix-org/matrix-doc/pull/2260).
|
|
@ -1 +0,0 @@
|
|||
Fix outbound federation request metrics.
|
|
@ -1 +0,0 @@
|
|||
Fix bug where querying a remote user's device keys that weren't cached resulted in only returning a single device.
|
|
@ -1 +0,0 @@
|
|||
When a client asks for a remote user's device keys check if the local cache for that user has been marked as potentially stale.
|
|
@ -1 +0,0 @@
|
|||
Fix race in federation sender worker that delayed sending of device updates.
|
|
@ -1 +0,0 @@
|
|||
Fix race in federation sender worker that delayed sending of device updates.
|
|
@ -1 +0,0 @@
|
|||
Fix bug where Synapse didn't invalidate cache of remote users' devices when Synapse left a room.
|
|
@ -1 +0,0 @@
|
|||
Add background update to clean out left rooms from current state.
|
|
@ -1 +0,0 @@
|
|||
Refactoring work in preparation for changing the event redaction algorithm.
|
|
@ -1 +0,0 @@
|
|||
Refactoring work in preparation for changing the event redaction algorithm.
|
|
@ -1 +0,0 @@
|
|||
Refactoring work in preparation for changing the event redaction algorithm.
|
|
@ -1 +0,0 @@
|
|||
Refactoring work in preparation for changing the event redaction algorithm.
|
|
@ -1 +0,0 @@
|
|||
Record room versions in the `rooms` table.
|
|
@ -1 +0,0 @@
|
|||
Fix waking up other workers when remote server is detected to have come back online.
|
|
@ -1 +0,0 @@
|
|||
Add background update to clean out left rooms from current state.
|
|
@ -1 +0,0 @@
|
|||
Detect unknown remote devices and mark cache as stale.
|
|
@ -1 +0,0 @@
|
|||
Refactoring work in preparation for changing the event redaction algorithm.
|
|
@ -0,0 +1 @@
|
|||
Fix an issue with cross-signing where device signatures were not sent to remote servers.
|
|
@ -0,0 +1 @@
|
|||
Fix detecting unknown devices from remote encrypted events.
|
|
@ -0,0 +1 @@
|
|||
Detect unexpected sender keys on inbound encrypted events and resync device lists.
|
|
@ -36,7 +36,7 @@ try:
|
|||
except ImportError:
|
||||
pass
|
||||
|
||||
__version__ = "1.9.1"
|
||||
__version__ = "1.10.0rc1"
|
||||
|
||||
if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
|
||||
# We import here so that we don't have to install a bunch of deps when
|
||||
|
|
|
@ -77,12 +77,11 @@ class EventTypes(object):
|
|||
Aliases = "m.room.aliases"
|
||||
Redaction = "m.room.redaction"
|
||||
ThirdPartyInvite = "m.room.third_party_invite"
|
||||
Encryption = "m.room.encryption"
|
||||
RelatedGroups = "m.room.related_groups"
|
||||
|
||||
RoomHistoryVisibility = "m.room.history_visibility"
|
||||
CanonicalAlias = "m.room.canonical_alias"
|
||||
Encryption = "m.room.encryption"
|
||||
Encrypted = "m.room.encrypted"
|
||||
RoomAvatar = "m.room.avatar"
|
||||
RoomEncryption = "m.room.encryption"
|
||||
GuestAccess = "m.room.guest_access"
|
||||
|
|
|
@ -598,7 +598,13 @@ class DeviceListUpdater(object):
|
|||
# happens if we've missed updates.
|
||||
resync = yield self._need_to_do_resync(user_id, pending_updates)
|
||||
|
||||
logger.debug("Need to re-sync devices for %r? %r", user_id, resync)
|
||||
if logger.isEnabledFor(logging.INFO):
|
||||
logger.info(
|
||||
"Received device list update for %s, requiring resync: %s. Devices: %s",
|
||||
user_id,
|
||||
resync,
|
||||
", ".join(u[0] for u in pending_updates),
|
||||
)
|
||||
|
||||
if resync:
|
||||
yield self.user_device_resync(user_id)
|
||||
|
|
|
@ -752,29 +752,75 @@ class FederationHandler(BaseHandler):
|
|||
|
||||
# For encrypted messages we check that we know about the sending device,
|
||||
# if we don't then we mark the device cache for that user as stale.
|
||||
if event.type == EventTypes.Encryption:
|
||||
if event.type == EventTypes.Encrypted:
|
||||
device_id = event.content.get("device_id")
|
||||
sender_key = event.content.get("sender_key")
|
||||
|
||||
cached_devices = await self.store.get_cached_devices_for_user(event.sender)
|
||||
|
||||
resync = False # Whether we should resync device lists.
|
||||
|
||||
device = None
|
||||
if device_id is not None:
|
||||
cached_devices = await self.store.get_cached_devices_for_user(
|
||||
event.sender
|
||||
)
|
||||
if device_id not in cached_devices:
|
||||
device = cached_devices.get(device_id)
|
||||
if device is None:
|
||||
logger.info(
|
||||
"Received event from remote device not in our cache: %s %s",
|
||||
event.sender,
|
||||
device_id,
|
||||
)
|
||||
await self.store.mark_remote_user_device_cache_as_stale(
|
||||
event.sender
|
||||
resync = True
|
||||
|
||||
# We also check if the `sender_key` matches what we expect.
|
||||
if sender_key is not None:
|
||||
# Figure out what sender key we're expecting. If we know the
|
||||
# device and recognize the algorithm then we can work out the
|
||||
# exact key to expect. Otherwise check it matches any key we
|
||||
# have for that device.
|
||||
if device:
|
||||
keys = device.get("keys", {}).get("keys", {})
|
||||
|
||||
if event.content.get("algorithm") == "m.megolm.v1.aes-sha2":
|
||||
# For this algorithm we expect a curve25519 key.
|
||||
key_name = "curve25519:%s" % (device_id,)
|
||||
current_keys = [keys.get(key_name)]
|
||||
else:
|
||||
# We don't know understand the algorithm, so we just
|
||||
# check it matches a key for the device.
|
||||
current_keys = keys.values()
|
||||
elif device_id:
|
||||
# We don't have any keys for the device ID.
|
||||
current_keys = []
|
||||
else:
|
||||
# The event didn't include a device ID, so we just look for
|
||||
# keys across all devices.
|
||||
current_keys = (
|
||||
key
|
||||
for device in cached_devices
|
||||
for key in device.get("keys", {}).get("keys", {}).values()
|
||||
)
|
||||
|
||||
# Immediately attempt a resync in the background
|
||||
if self.config.worker_app:
|
||||
return run_in_background(self._user_device_resync, event.sender)
|
||||
else:
|
||||
return run_in_background(
|
||||
self._device_list_updater.user_device_resync, event.sender
|
||||
)
|
||||
# We now check that the sender key matches (one of) the expected
|
||||
# keys.
|
||||
if sender_key not in current_keys:
|
||||
logger.info(
|
||||
"Received event from remote device with unexpected sender key: %s %s: %s",
|
||||
event.sender,
|
||||
device_id or "<no device_id>",
|
||||
sender_key,
|
||||
)
|
||||
resync = True
|
||||
|
||||
if resync:
|
||||
await self.store.mark_remote_user_device_cache_as_stale(event.sender)
|
||||
|
||||
# Immediately attempt a resync in the background
|
||||
if self.config.worker_app:
|
||||
return run_in_background(self._user_device_resync, event.sender)
|
||||
else:
|
||||
return run_in_background(
|
||||
self._device_list_updater.user_device_resync, event.sender
|
||||
)
|
||||
|
||||
@log_function
|
||||
async def backfill(self, dest, room_id, limit, extremities):
|
||||
|
|
|
@ -360,7 +360,7 @@ class RoomCreationHandler(BaseHandler):
|
|||
(EventTypes.RoomHistoryVisibility, ""),
|
||||
(EventTypes.GuestAccess, ""),
|
||||
(EventTypes.RoomAvatar, ""),
|
||||
(EventTypes.Encryption, ""),
|
||||
(EventTypes.RoomEncryption, ""),
|
||||
(EventTypes.ServerACL, ""),
|
||||
(EventTypes.RelatedGroups, ""),
|
||||
(EventTypes.PowerLevels, ""),
|
||||
|
|
|
@ -286,7 +286,7 @@ class StatsHandler(StateDeltasHandler):
|
|||
room_state["history_visibility"] = event_content.get(
|
||||
"history_visibility"
|
||||
)
|
||||
elif typ == EventTypes.Encryption:
|
||||
elif typ == EventTypes.RoomEncryption:
|
||||
room_state["encryption"] = event_content.get("algorithm")
|
||||
elif typ == EventTypes.Name:
|
||||
room_state["name"] = event_content.get("name")
|
||||
|
|
|
@ -320,6 +320,11 @@ class DeviceWorkerStore(SQLBaseStore):
|
|||
device_display_name = device.get("device_display_name", None)
|
||||
if device_display_name:
|
||||
result["device_display_name"] = device_display_name
|
||||
if "signatures" in device:
|
||||
for sig_user_id, sigs in device["signatures"].items():
|
||||
result["keys"].setdefault("signatures", {}).setdefault(
|
||||
sig_user_id, {}
|
||||
).update(sigs)
|
||||
else:
|
||||
result["deleted"] = True
|
||||
|
||||
|
@ -524,6 +529,11 @@ class DeviceWorkerStore(SQLBaseStore):
|
|||
device_display_name = device.get("device_display_name", None)
|
||||
if device_display_name:
|
||||
result["device_display_name"] = device_display_name
|
||||
if "signatures" in device:
|
||||
for sig_user_id, sigs in device["signatures"].items():
|
||||
result["keys"].setdefault("signatures", {}).setdefault(
|
||||
sig_user_id, {}
|
||||
).update(sigs)
|
||||
|
||||
results.append(result)
|
||||
|
||||
|
|
|
@ -744,7 +744,7 @@ class StatsStore(StateDeltasStore):
|
|||
EventTypes.Create,
|
||||
EventTypes.JoinRules,
|
||||
EventTypes.RoomHistoryVisibility,
|
||||
EventTypes.Encryption,
|
||||
EventTypes.RoomEncryption,
|
||||
EventTypes.Name,
|
||||
EventTypes.Topic,
|
||||
EventTypes.RoomAvatar,
|
||||
|
@ -816,7 +816,7 @@ class StatsStore(StateDeltasStore):
|
|||
room_state["history_visibility"] = event.content.get(
|
||||
"history_visibility"
|
||||
)
|
||||
elif event.type == EventTypes.Encryption:
|
||||
elif event.type == EventTypes.RoomEncryption:
|
||||
room_state["encryption"] = event.content.get("algorithm")
|
||||
elif event.type == EventTypes.Name:
|
||||
room_state["name"] = event.content.get("name")
|
||||
|
|
Loading…
Reference in New Issue