You've already forked snikket-web-portal
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user