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

Add missing support for MSC3882 unstable r1 support #16364

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions synapse/rest/client/capabilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ async def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
"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,
},
}
}

Expand Down
1 change: 1 addition & 0 deletions synapse/rest/client/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ def on_GET(self, request: SynapseRequest) -> Tuple[int, JsonDict]:
# 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())
Expand Down
5 changes: 4 additions & 1 deletion synapse/rest/client/login_token_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
),
Expand Down
2 changes: 2 additions & 0 deletions tests/rest/client/test_capabilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ def test_get_get_token_login_fields_when_disabled(self) -> None:

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:
Expand All @@ -214,3 +215,4 @@ def test_get_get_token_login_fields_when_enabled(self) -> None:

self.assertEqual(channel.code, HTTPStatus.OK)
self.assertTrue(capabilities["m.get_login_token"]["enabled"])
self.assertTrue(capabilities["org.matrix.msc3882.get_login_token"]["enabled"])
6 changes: 5 additions & 1 deletion tests/rest/client/test_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,11 @@ def test_get_login_flows_with_login_via_existing_enabled(self) -> None:
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"},
],
Expand Down
42 changes: 40 additions & 2 deletions tests/rest/client/test_login_token_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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:
Expand Down Expand Up @@ -143,7 +144,7 @@ def test_expires_in(self) -> None:
}
)
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(
Expand All @@ -166,3 +167,40 @@ def test_unstable_support(self) -> None:
)
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)
Loading