codekingpro/portable-devtools
114k
1from oauthlib.oauth2 import WebApplicationClient, InsecureTransportError2from oauthlib.oauth2 import is_secure_transport3from requests.auth import AuthBase4 5 6class OAuth2(AuthBase):7 """Adds proof of authorization (OAuth2 token) to the request."""8 9 def __init__(self, client_id=None, client=None, token=None):10 """Construct a new OAuth 2 authorization object.11 12 :param client_id: Client id obtained during registration13 :param client: :class:`oauthlib.oauth2.Client` to be used. Default is14 WebApplicationClient which is useful for any15 hosted application but not mobile or desktop.16 :param token: Token dictionary, must include access_token17 and token_type.18 """19 self._client = client or WebApplicationClient(client_id, token=token)20 if token:21 for k, v in token.items():22 setattr(self._client, k, v)23 24 def __call__(self, r):25 """Append an OAuth 2 token to the request.26 27 Note that currently HTTPS is required for all requests. There may be28 a token type that allows for plain HTTP in the future and then this29 should be updated to allow plain HTTP on a white list basis.30 """31 if not is_secure_transport(r.url):32 raise InsecureTransportError()33 r.url, r.headers, r.body = self._client.add_token(34 r.url, http_method=r.method, body=r.body, headers=r.headers35 )36 return r37 