Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Declare support for Matrix 1.6 (#15559)
Browse files Browse the repository at this point in the history
Adds logging for key server requests which include a key ID.
This is technically in violation of the 1.6 spec, but is the only
way to remain backwards compatibly with earlier versions of
Synapse (and possibly other homeservers) which *did* include
the key ID.
  • Loading branch information
clokep authored May 12, 2023
1 parent 808105b commit def4804
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog.d/15559.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Advertise support for Matrix 1.6 on `/_matrix/client/versions`.
1 change: 1 addition & 0 deletions synapse/rest/client/versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def on_GET(self, request: Request) -> Tuple[int, JsonDict]:
"v1.3",
"v1.4",
"v1.5",
"v1.6",
],
# as per MSC1497:
"unstable_features": {
Expand Down
11 changes: 11 additions & 0 deletions synapse/rest/key/v2/local_key_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ class LocalKey(RestServlet):
"""HTTP resource containing encoding the TLS X.509 certificate and NACL
signature verification keys for this server::
GET /_matrix/key/v2/server HTTP/1.1
GET /_matrix/key/v2/server/a.key.id HTTP/1.1
HTTP/1.1 200 OK
Expand Down Expand Up @@ -100,6 +102,15 @@ def response_json_object(self) -> JsonDict:
def on_GET(
self, request: Request, key_id: Optional[str] = None
) -> Tuple[int, JsonDict]:
# Matrix 1.6 drops support for passing the key_id, this is incompatible
# with earlier versions and is allowed in order to support both.
# A warning is issued to help determine when it is safe to drop this.
if key_id:
logger.warning(
"Request for local server key with deprecated key ID (logging to determine usage level for future removal): %s",
key_id,
)

time_now = self.clock.time_msec()
# Update the expiry time if less than half the interval remains.
if time_now + self.config.key.key_refresh_interval / 2 > self.valid_until_ts:
Expand Down
11 changes: 10 additions & 1 deletion synapse/rest/key/v2/remote_key_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ async def on_GET(
self, request: Request, server: str, key_id: Optional[str] = None
) -> Tuple[int, JsonDict]:
if server and key_id:
# Matrix 1.6 drops support for passing the key_id, this is incompatible
# with earlier versions and is allowed in order to support both.
# A warning is issued to help determine when it is safe to drop this.
logger.warning(
"Request for remote server key with deprecated key ID (logging to determine usage level for future removal): %s / %s",
server,
key_id,
)

minimum_valid_until_ts = parse_integer(request, "minimum_valid_until_ts")
arguments = {}
if minimum_valid_until_ts is not None:
Expand Down Expand Up @@ -161,7 +170,7 @@ async def query_keys(

time_now_ms = self.clock.time_msec()

# Map server_name->key_id->int. Note that the value of the init is unused.
# Map server_name->key_id->int. Note that the value of the int is unused.
# XXX: why don't we just use a set?
cache_misses: Dict[str, Dict[str, int]] = {}
for (server_name, key_id, _), key_results in cached.items():
Expand Down

0 comments on commit def4804

Please sign in to comment.