@@ -51,27 +51,18 @@ def set_dict(self, auth_token_dict):
5151 self .token_type = auth_token_dict .get ("token_type" )
5252
5353
54- def refresh_auth_token (bb , auth_token ):
54+ def refresh_auth_token (bb , auth_token ) -> AuthorizationToken :
5555 data = {
5656 "client_id" : bb .client_id ,
5757 "grant_type" : "refresh_token" ,
5858 "refresh_token" : auth_token .refresh_token ,
5959 }
60-
61- headers = SDK_HEADERS
62-
63- token_response = requests .post (
64- url = bb .auth_token_url ,
65- data = data ,
66- headers = headers ,
67- auth = (bb .client_id , bb .client_secret ),
68- )
69-
60+ token_response = _do_post (data , bb , (bb .client_id , bb .client_secret ))
7061 token_response .raise_for_status ()
7162 return AuthorizationToken (token_response .json ())
7263
7364
74- def generate_authorize_url (bb , auth_data ):
65+ def generate_authorize_url (bb , auth_data ) -> str :
7566 params = {
7667 "client_id" : bb .client_id ,
7768 "redirect_uri" : bb .callback_url ,
@@ -94,31 +85,31 @@ def base64_url_encode(buffer):
9485 return buffer_result
9586
9687
97- def get_random_string (length ):
88+ def get_random_string (length ) -> str :
9889 letters = string .ascii_letters + string .digits + string .punctuation
9990 result = "" .join (random .choice (letters ) for i in range (length ))
10091 return result
10192
10293
103- def generate_pkce_data ():
94+ def generate_pkce_data () -> dict :
10495 verifier = generate_random_state (32 )
10596 code_challenge = base64 .urlsafe_b64encode (
10697 hashlib .sha256 (verifier .encode ("ASCII" )).digest ()
10798 )
10899 return {"code_challenge" : code_challenge .decode ("utf-8" ), "verifier" : verifier }
109100
110101
111- def generate_random_state (num ):
102+ def generate_random_state (num ) -> str :
112103 return base64_url_encode (get_random_string (num ))
113104
114105
115- def generate_auth_data ():
106+ def generate_auth_data () -> dict :
116107 auth_data = {"state" : generate_random_state (32 )}
117108 auth_data .update (generate_pkce_data ())
118109 return auth_data
119110
120111
121- def get_access_token_from_code (bb , auth_data , callback_code ):
112+ def get_access_token_from_code (bb , auth_data , callback_code ) -> dict :
122113 data = {
123114 "client_id" : bb .client_id ,
124115 "client_secret" : bb .client_secret ,
@@ -129,14 +120,7 @@ def get_access_token_from_code(bb, auth_data, callback_code):
129120 "code_challenge" : auth_data ["code_challenge" ],
130121 }
131122
132- mp_encoder = MultipartEncoder (data )
133- headers = SDK_HEADERS
134- headers ["content-type" ] = mp_encoder .content_type
135- token_response = requests .post (
136- url = bb .auth_token_url ,
137- data = mp_encoder ,
138- headers = headers
139- )
123+ token_response = _do_post (data , bb , None )
140124 token_response .raise_for_status ()
141125 token_dict = token_response .json ()
142126 token_dict ["expires_at" ] = datetime .datetime .now (
@@ -157,3 +141,19 @@ def get_authorization_token(bb, auth_data, callback_code, callback_state):
157141 raise ValueError ("Provided callback state does not match." )
158142
159143 return AuthorizationToken (get_access_token_from_code (bb , auth_data , callback_code ))
144+
145+
146+ def _do_post (data , bb , auth ):
147+ mp_encoder = MultipartEncoder (data )
148+ headers = SDK_HEADERS
149+ headers ["content-type" ] = mp_encoder .content_type
150+ return requests .post (
151+ url = bb .auth_token_url ,
152+ data = mp_encoder ,
153+ headers = headers
154+ ) if not auth else requests .post (
155+ url = bb .auth_token_url ,
156+ data = mp_encoder ,
157+ headers = headers ,
158+ auth = auth
159+ )
0 commit comments