diff --git a/changelog.d/542.feature b/changelog.d/542.feature new file mode 100644 index 00000000..163414e7 --- /dev/null +++ b/changelog.d/542.feature @@ -0,0 +1 @@ +Support Matrix v1.1. diff --git a/sydent/http/httpserver.py b/sydent/http/httpserver.py index 714cedf0..65e59170 100644 --- a/sydent/http/httpserver.py +++ b/sydent/http/httpserver.py @@ -56,6 +56,7 @@ from sydent.http.servlets.termsservlet import TermsServlet from sydent.http.servlets.threepidbindservlet import ThreePidBindServlet from sydent.http.servlets.threepidunbindservlet import ThreePidUnbindServlet +from sydent.http.servlets.versions import VersionsServlet if TYPE_CHECKING: from sydent.sydent import Sydent @@ -97,6 +98,7 @@ def __init__(self, sydent: "Sydent", lookup_pepper: str) -> None: matrix.putChild(b"identity", identity) identity.putChild(b"api", api) identity.putChild(b"v2", v2) + identity.putChild(b"versions", VersionsServlet()) api.putChild(b"v1", v1) validate.putChild(b"email", email) diff --git a/sydent/http/servlets/versions.py b/sydent/http/servlets/versions.py new file mode 100644 index 00000000..52fdc2fb --- /dev/null +++ b/sydent/http/servlets/versions.py @@ -0,0 +1,47 @@ +# Copyright 2022 The Matrix.org Foundation C.I.C. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from twisted.web.server import Request + +from sydent.http.servlets import SydentResource, jsonwrap, send_cors +from sydent.types import JsonDict + + +class VersionsServlet(SydentResource): + isLeaf = True + + @jsonwrap + def render_GET(self, request: Request) -> JsonDict: + """ + Return the supported Matrix versions. + """ + send_cors(request) + + return { + "versions": [ + "r0.1.0", + "r0.2.0", + "r0.2.1", + "r0.3.0", + "v1.1", + "v1.2", + "v1.3", + "v1.4", + "v1.5", + ] + } + + def render_OPTIONS(self, request: Request) -> bytes: + send_cors(request) + return b""