diff options
author | Brendan Abolivier <babolivier@matrix.org> | 2022-01-26 14:21:13 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-26 14:21:13 +0000 |
commit | 2d3bd9aa670eedd299cc03093459929adec41918 (patch) | |
tree | b7baca8830fc7b3fde9c596405097dd6c6295cfc /synapse/rest | |
parent | Improvements to bundling aggregations. (#11815) (diff) | |
download | synapse-2d3bd9aa670eedd299cc03093459929adec41918.tar.xz |
Add a module callback to set username at registration (#11790)
This is in the context of mainlining the Tchap fork of Synapse. Currently in Tchap usernames are derived from the user's email address (extracted from the UIA results, more specifically the m.login.email.identity step). This change also exports the check_username method from the registration handler as part of the module API, so that a module can check if the username it's trying to generate is correct and doesn't conflict with an existing one, and fallback gracefully if not. Co-authored-by: David Robertson <davidr@element.io>
Diffstat (limited to 'synapse/rest')
-rw-r--r-- | synapse/rest/client/register.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/synapse/rest/client/register.py b/synapse/rest/client/register.py index c59dae7c03..e3492f9f93 100644 --- a/synapse/rest/client/register.py +++ b/synapse/rest/client/register.py @@ -425,6 +425,7 @@ class RegisterRestServlet(RestServlet): self.ratelimiter = hs.get_registration_ratelimiter() self.password_policy_handler = hs.get_password_policy_handler() self.clock = hs.get_clock() + self.password_auth_provider = hs.get_password_auth_provider() self._registration_enabled = self.hs.config.registration.enable_registration self._refresh_tokens_enabled = ( hs.config.registration.refreshable_access_token_lifetime is not None @@ -638,7 +639,16 @@ class RegisterRestServlet(RestServlet): if not password_hash: raise SynapseError(400, "Missing params: password", Codes.MISSING_PARAM) - desired_username = params.get("username", None) + desired_username = await ( + self.password_auth_provider.get_username_for_registration( + auth_result, + params, + ) + ) + + if desired_username is None: + desired_username = params.get("username", None) + guest_access_token = params.get("guest_access_token", None) if desired_username is not None: |