pull/16364/merge
Hugh Nimmo-Smith 2023-12-15 14:35:23 +01:00 committed by GitHub
commit 3a6896b1ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 55 additions and 4 deletions

View File

@ -68,6 +68,9 @@ class CapabilitiesRestServlet(RestServlet):
"m.get_login_token": {
"enabled": self.config.auth.login_via_existing_enabled,
},
"org.matrix.msc3882.get_login_token": {
"enabled": self.config.auth.login_via_existing_enabled,
},
}
}

View File

@ -175,6 +175,7 @@ class LoginRestServlet(RestServlet):
# If the login token flow is enabled advertise the get_login_token flag.
if self._get_login_token_enabled:
tokenTypeFlow["get_login_token"] = True
tokenTypeFlow["org.matrix.msc3882.get_login_token"] = True
flows.append(tokenTypeFlow)
flows.extend({"type": t} for t in self.auth_handler.get_supported_login_types())

View File

@ -53,7 +53,10 @@ class LoginTokenRequestServlet(RestServlet):
*client_patterns(
"/login/get_token$", releases=["v1"], v1=False, unstable=False
),
# TODO: this is no longer needed once unstable MSC3882 does not need to be supported:
# TODO: these are no longer needed once unstable MSC3882 does not need to be supported:
*client_patterns(
"/org.matrix.msc3882/login/get_token$", releases=[], v1=False, unstable=True
),
*client_patterns(
"/org.matrix.msc3882/login/token$", releases=[], v1=False, unstable=True
),

View File

@ -200,6 +200,7 @@ class CapabilitiesTestCase(unittest.HomeserverTestCase):
self.assertEqual(channel.code, HTTPStatus.OK)
self.assertFalse(capabilities["m.get_login_token"]["enabled"])
self.assertFalse(capabilities["org.matrix.msc3882.get_login_token"]["enabled"])
@override_config({"login_via_existing_session": {"enabled": True}})
def test_get_get_token_login_fields_when_enabled(self) -> None:
@ -214,3 +215,4 @@ class CapabilitiesTestCase(unittest.HomeserverTestCase):
self.assertEqual(channel.code, HTTPStatus.OK)
self.assertTrue(capabilities["m.get_login_token"]["enabled"])
self.assertTrue(capabilities["org.matrix.msc3882.get_login_token"]["enabled"])

View File

@ -527,7 +527,11 @@ class LoginRestServletTestCase(unittest.HomeserverTestCase):
self.assertCountEqual(
channel.json_body["flows"],
[
{"type": "m.login.token", "get_login_token": True},
{
"type": "m.login.token",
"get_login_token": True,
"org.matrix.msc3882.get_login_token": True,
},
{"type": "m.login.password"},
{"type": "m.login.application_service"},
],

View File

@ -15,7 +15,7 @@
from twisted.test.proto_helpers import MemoryReactor
from synapse.rest import admin
from synapse.rest.client import login, login_token_request, versions
from synapse.rest.client import capabilities, login, login_token_request, versions
from synapse.server import HomeServer
from synapse.util import Clock
@ -31,6 +31,7 @@ class LoginTokenRequestServletTestCase(unittest.HomeserverTestCase):
admin.register_servlets,
login_token_request.register_servlets,
versions.register_servlets, # TODO: remove once unstable revision 0 support is removed
capabilities.register_servlets, # TODO: remove once unstable revision 1 support is removed
]
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
@ -143,7 +144,7 @@ class LoginTokenRequestServletTestCase(unittest.HomeserverTestCase):
}
)
def test_unstable_support(self) -> None:
# TODO: remove support for unstable MSC3882 is no longer needed
# TODO: remove when unstable MSC3882 is no longer needed
# check feature is advertised in versions response:
channel = self.make_request(
@ -166,3 +167,40 @@ class LoginTokenRequestServletTestCase(unittest.HomeserverTestCase):
)
self.assertEqual(channel.code, 200)
self.assertEqual(channel.json_body["expires_in"], 15)
@override_config(
{
"login_via_existing_session": {
"enabled": True,
"require_ui_auth": False,
"token_timeout": "15s",
}
}
)
def test_unstable_revision1_support(self) -> None:
# TODO: remove when unstable MSC3882 is no longer needed
self.register_user(self.user, self.password)
token = self.login(self.user, self.password)
# check feature is advertised in versions response:
channel = self.make_request(
"GET", "/_matrix/client/v3/capabilities", {}, access_token=token
)
self.assertEqual(channel.code, 200)
self.assertEqual(
channel.json_body["capabilities"]["org.matrix.msc3882.get_login_token"][
"enabled"
],
True,
)
# check feature is available via the r1 unstable endpoint and returns an expires_in_ms value in milliseconds
channel = self.make_request(
"POST",
"/_matrix/client/unstable/org.matrix.msc3882/login/get_token",
{},
access_token=token,
)
self.assertEqual(channel.code, 200)
self.assertEqual(channel.json_body["expires_in_ms"], 15000)