# HG changeset patch # User Kim Alvefur # Date 1653742985 -7200 # Node ID ccce785f53e11c002b8dade1d88349d6eb25f972 # Parent ad133c6190972a05d6111b31d10d8af2c261b8c2 mod_rest: Add an example OAuth client (needs mod_http_oauth2) diff -r ad133c619097 -r ccce785f53e1 mod_rest/example/prosody_oauth.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_rest/example/prosody_oauth.py Sat May 28 15:03:05 2022 +0200 @@ -0,0 +1,37 @@ +from oauthlib.oauth2 import LegacyApplicationClient +from requests_oauthlib import OAuth2Session + + +class ProsodyRestClient(LegacyApplicationClient): + pass + + +class ProsodyRestSession(OAuth2Session): + def __init__(self, base_url=None, token_url=None, rest_url=None, *args, **kwargs): + if base_url and not token_url: + token_url = base_url + "/oauth2/token" + if base_url and not rest_url: + rest_url = base_url + "/rest" + self._prosody_rest_url = rest_url + self._prosody_token_url = token_url + + super().__init__(client=ProsodyRestClient(*args, **kwargs)) + + def fetch_token(self, *args, **kwargs): + return super().fetch_token(token_url=self._prosody_token_url, *args, **kwargs) + + def xmpp(self, json=None, *args, **kwargs): + return self.post(self._prosody_rest_url, json=json, *args, **kwargs) + + +if __name__ == "__main__": + # Example usage + + # from prosody_oauth import ProsodyRestSession + from getpass import getpass + + p = ProsodyRestSession(base_url=input("Base URL: "), client_id="app") + + p.fetch_token(username=input("XMPP Address: "), password=getpass("Password: ")) + + print(p.xmpp(json={"disco": True, "to": "jabber.org"}).json())