Implement token revocation

Fixes #18.
This commit is contained in:
Jonas Schäfer
2021-01-21 18:49:58 +01:00
parent 47bf47c7b3
commit 2f7b99c3cc

View File

@@ -245,6 +245,10 @@ class ProsodyClient:
def _login_endpoint(self) -> str: def _login_endpoint(self) -> str:
return "{}/oauth2/token".format(self._endpoint_base) return "{}/oauth2/token".format(self._endpoint_base)
@property
def _revoke_endpoint(self) -> str:
return "{}/oauth2/revoke".format(self._endpoint_base)
@property @property
def _rest_endpoint(self) -> str: def _rest_endpoint(self) -> str:
return "{}/rest".format(self._endpoint_base) return "{}/rest".format(self._endpoint_base)
@@ -978,10 +982,24 @@ class ProsodyClient:
) as resp: ) as resp:
self._raise_error_from_response(resp) self._raise_error_from_response(resp)
@autosession
async def revoke_token(
self,
*,
session: aiohttp.ClientSession) -> None:
request = aiohttp.FormData()
request.add_field("token", self.session_token)
request.add_field("token_type_hint", "access_token")
async with session.post(self._revoke_endpoint, data=request) as resp:
resp.raise_for_status()
async def logout(self) -> None: async def logout(self) -> None:
# this currently only kills the cookie stuff, we may want to invalidate try:
# the token on the server side, toos await self.revoke_token()
# See-Also: https://issues.prosody.im/1503 except aiohttp.ClientError:
self.logger.warn("failed to revoke token!",
exc_info=True)
http_session.pop(self.SESSION_TOKEN, None) http_session.pop(self.SESSION_TOKEN, None)
http_session.pop(self.SESSION_ADDRESS, None) http_session.pop(self.SESSION_ADDRESS, None)
http_session.pop(self.SESSION_CACHED_SCOPE, None) http_session.pop(self.SESSION_CACHED_SCOPE, None)