diff options
author | Richard van der Hoff <richard@matrix.org> | 2016-08-08 16:34:07 +0100 |
---|---|---|
committer | Richard van der Hoff <richard@matrix.org> | 2016-08-08 16:40:39 +0100 |
commit | 6fe6a6f0299c97086a552eda75570eaa66ff2598 (patch) | |
tree | cfaee34a62c400691bd318115c183cdfefc850ab /synapse/handlers/auth.py | |
parent | Merge pull request #992 from matrix-org/erikj/psutil_conditional (diff) | |
download | synapse-6fe6a6f0299c97086a552eda75570eaa66ff2598.tar.xz |
Fix login with m.login.token
login with token (as used by CAS auth) was broken by 067596d, such that it always returned a 401.
Diffstat (limited to 'synapse/handlers/auth.py')
-rw-r--r-- | synapse/handlers/auth.py | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/synapse/handlers/auth.py b/synapse/handlers/auth.py index 2e138f328f..1d3641b7a7 100644 --- a/synapse/handlers/auth.py +++ b/synapse/handlers/auth.py @@ -720,10 +720,11 @@ class AuthHandler(BaseHandler): def validate_short_term_login_token_and_get_user_id(self, login_token): try: - macaroon = pymacaroons.Macaroon.deserialize(login_token) auth_api = self.hs.get_auth() - auth_api.validate_macaroon(macaroon, "login", True) - return self.get_user_from_macaroon(macaroon) + macaroon = pymacaroons.Macaroon.deserialize(login_token) + user_id = auth_api.get_user_id_from_macaroon(macaroon) + auth_api.validate_macaroon(macaroon, "login", True, user_id) + return user_id except (pymacaroons.exceptions.MacaroonException, TypeError, ValueError): raise AuthError(401, "Invalid token", errcode=Codes.UNKNOWN_TOKEN) @@ -736,16 +737,6 @@ class AuthHandler(BaseHandler): macaroon.add_first_party_caveat("user_id = %s" % (user_id,)) return macaroon - def get_user_from_macaroon(self, macaroon): - user_prefix = "user_id = " - for caveat in macaroon.caveats: - if caveat.caveat_id.startswith(user_prefix): - return caveat.caveat_id[len(user_prefix):] - raise AuthError( - self.INVALID_TOKEN_HTTP_STATUS, "No user_id found in token", - errcode=Codes.UNKNOWN_TOKEN - ) - @defer.inlineCallbacks def set_password(self, user_id, newpassword, requester=None): password_hash = self.hash(newpassword) |