Declare support for Matrix 1.6 (#15559)

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.
This commit is contained in:
Patrick Cloke 2023-05-12 07:31:50 -04:00 committed by GitHub
parent 808105bd31
commit def480442d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 1 deletions

View File

@ -0,0 +1 @@
Advertise support for Matrix 1.6 on `/_matrix/client/versions`.

View File

@ -79,6 +79,7 @@ class VersionsRestServlet(RestServlet):
"v1.3", "v1.3",
"v1.4", "v1.4",
"v1.5", "v1.5",
"v1.6",
], ],
# as per MSC1497: # as per MSC1497:
"unstable_features": { "unstable_features": {

View File

@ -34,6 +34,8 @@ class LocalKey(RestServlet):
"""HTTP resource containing encoding the TLS X.509 certificate and NACL """HTTP resource containing encoding the TLS X.509 certificate and NACL
signature verification keys for this server:: 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 GET /_matrix/key/v2/server/a.key.id HTTP/1.1
HTTP/1.1 200 OK HTTP/1.1 200 OK
@ -100,6 +102,15 @@ class LocalKey(RestServlet):
def on_GET( def on_GET(
self, request: Request, key_id: Optional[str] = None self, request: Request, key_id: Optional[str] = None
) -> Tuple[int, JsonDict]: ) -> 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() time_now = self.clock.time_msec()
# Update the expiry time if less than half the interval remains. # 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: if time_now + self.config.key.key_refresh_interval / 2 > self.valid_until_ts:

View File

@ -126,6 +126,15 @@ class RemoteKey(RestServlet):
self, request: Request, server: str, key_id: Optional[str] = None self, request: Request, server: str, key_id: Optional[str] = None
) -> Tuple[int, JsonDict]: ) -> Tuple[int, JsonDict]:
if server and key_id: 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") minimum_valid_until_ts = parse_integer(request, "minimum_valid_until_ts")
arguments = {} arguments = {}
if minimum_valid_until_ts is not None: if minimum_valid_until_ts is not None:
@ -161,7 +170,7 @@ class RemoteKey(RestServlet):
time_now_ms = self.clock.time_msec() 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? # XXX: why don't we just use a set?
cache_misses: Dict[str, Dict[str, int]] = {} cache_misses: Dict[str, Dict[str, int]] = {}
for (server_name, key_id, _), key_results in cached.items(): for (server_name, key_id, _), key_results in cached.items():