codekingpro/portable-devtools
114k
1from authlib.common.encoding import json_loads2from authlib.common.urls import urlparse, url_decode3from .errors import InsecureTransportError4 5 6class OAuth2Request:7 def __init__(self, method: str, uri: str, body=None, headers=None):8 InsecureTransportError.check(uri)9 #: HTTP method10 self.method = method11 self.uri = uri12 self.body = body13 #: HTTP headers14 self.headers = headers or {}15 16 self.client = None17 self.auth_method = None18 self.user = None19 self.authorization_code = None20 self.refresh_token = None21 self.credential = None22 23 @property24 def args(self):25 query = urlparse.urlparse(self.uri).query26 return dict(url_decode(query))27 28 @property29 def form(self):30 return self.body or {}31 32 @property33 def data(self):34 data = {}35 data.update(self.args)36 data.update(self.form)37 return data38 39 @property40 def client_id(self) -> str:41 """The authorization server issues the registered client a client42 identifier -- a unique string representing the registration43 information provided by the client. The value is extracted from44 request.45 46 :return: string47 """48 return self.data.get('client_id')49 50 @property51 def response_type(self) -> str:52 rt = self.data.get('response_type')53 if rt and ' ' in rt:54 # sort multiple response types55 return ' '.join(sorted(rt.split()))56 return rt57 58 @property59 def grant_type(self) -> str:60 return self.form.get('grant_type')61 62 @property63 def redirect_uri(self):64 return self.data.get('redirect_uri')65 66 @property67 def scope(self) -> str:68 return self.data.get('scope')69 70 @property71 def state(self):72 return self.data.get('state')73 74 75class JsonRequest:76 def __init__(self, method, uri, body=None, headers=None):77 self.method = method78 self.uri = uri79 self.body = body80 self.headers = headers or {}81 82 @property83 def data(self):84 return json_loads(self.body)85 