diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2020-11-30 19:20:56 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-30 19:20:56 +0000 |
commit | 59e18a1333526b922b318c4165ec09570e80bf5c (patch) | |
tree | be550156cf81fc7a6cfc0a1ac97fe32e43ea5af6 | |
parent | Allow per-room profile to be used for server notice user (#8799) (diff) | |
download | synapse-59e18a1333526b922b318c4165ec09570e80bf5c.tar.xz |
Simplify appservice login code (#8847)
we don't need to support legacy login dictionaries here.
-rw-r--r-- | changelog.d/8847.misc | 1 | ||||
-rw-r--r-- | synapse/rest/client/v1/login.py | 27 |
2 files changed, 22 insertions, 6 deletions
diff --git a/changelog.d/8847.misc b/changelog.d/8847.misc new file mode 100644 index 0000000000..5028997b04 --- /dev/null +++ b/changelog.d/8847.misc @@ -0,0 +1 @@ +Simplify `uk.half-shot.msc2778.login.application_service` login handler. diff --git a/synapse/rest/client/v1/login.py b/synapse/rest/client/v1/login.py index 94452fcbf5..074bdd66c9 100644 --- a/synapse/rest/client/v1/login.py +++ b/synapse/rest/client/v1/login.py @@ -154,13 +154,28 @@ class LoginRestServlet(RestServlet): async def _do_appservice_login( self, login_submission: JsonDict, appservice: ApplicationService ): - logger.info( - "Got appservice login request with identifier: %r", - login_submission.get("identifier"), - ) + identifier = login_submission.get("identifier") + logger.info("Got appservice login request with identifier: %r", identifier) - identifier = convert_client_dict_legacy_fields_to_identifier(login_submission) - qualified_user_id = self._get_qualified_user_id(identifier) + if not isinstance(identifier, dict): + raise SynapseError( + 400, "Invalid identifier in login submission", Codes.INVALID_PARAM + ) + + # this login flow only supports identifiers of type "m.id.user". + if identifier.get("type") != "m.id.user": + raise SynapseError( + 400, "Unknown login identifier type", Codes.INVALID_PARAM + ) + + user = identifier.get("user") + if not isinstance(user, str): + raise SynapseError(400, "Invalid user in identifier", Codes.INVALID_PARAM) + + if user.startswith("@"): + qualified_user_id = user + else: + qualified_user_id = UserID(user, self.hs.hostname).to_string() if not appservice.is_interested_in_user(qualified_user_id): raise LoginError(403, "Invalid access_token", errcode=Codes.FORBIDDEN) |