mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-06 10:14:57 -04:00
Support "identifier" dicts in UIA (#8848)
The spec requires synapse to support `identifier` dicts for `m.login.password` user-interactive auth, which it did not (instead, it required an undocumented `user` parameter.) To fix this properly, we need to pull the code that interprets `identifier` into `AuthHandler.validate_login` so that it can be called from the UIA code. Fixes #5665.
This commit is contained in:
parent
9edff901d1
commit
4d9496559d
5 changed files with 191 additions and 148 deletions
|
@ -38,11 +38,6 @@ class DummyRecaptchaChecker(UserInteractiveAuthChecker):
|
|||
return succeed(True)
|
||||
|
||||
|
||||
class DummyPasswordChecker(UserInteractiveAuthChecker):
|
||||
def check_auth(self, authdict, clientip):
|
||||
return succeed(authdict["identifier"]["user"])
|
||||
|
||||
|
||||
class FallbackAuthTests(unittest.HomeserverTestCase):
|
||||
|
||||
servlets = [
|
||||
|
@ -162,9 +157,6 @@ class UIAuthTests(unittest.HomeserverTestCase):
|
|||
]
|
||||
|
||||
def prepare(self, reactor, clock, hs):
|
||||
auth_handler = hs.get_auth_handler()
|
||||
auth_handler.checkers[LoginType.PASSWORD] = DummyPasswordChecker(hs)
|
||||
|
||||
self.user_pass = "pass"
|
||||
self.user = self.register_user("test", self.user_pass)
|
||||
self.user_tok = self.login("test", self.user_pass)
|
||||
|
@ -234,6 +226,31 @@ class UIAuthTests(unittest.HomeserverTestCase):
|
|||
},
|
||||
)
|
||||
|
||||
def test_grandfathered_identifier(self):
|
||||
"""Check behaviour without "identifier" dict
|
||||
|
||||
Synapse used to require clients to submit a "user" field for m.login.password
|
||||
UIA - check that still works.
|
||||
"""
|
||||
|
||||
device_id = self.get_device_ids()[0]
|
||||
channel = self.delete_device(device_id, 401)
|
||||
session = channel.json_body["session"]
|
||||
|
||||
# Make another request providing the UI auth flow.
|
||||
self.delete_device(
|
||||
device_id,
|
||||
200,
|
||||
{
|
||||
"auth": {
|
||||
"type": "m.login.password",
|
||||
"user": self.user,
|
||||
"password": self.user_pass,
|
||||
"session": session,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
def test_can_change_body(self):
|
||||
"""
|
||||
The client dict can be modified during the user interactive authentication session.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue