@@ -213,6 +213,8 @@ def _get_state_csrf_token():
213213 return 'box_csrf_token_' + '' .join (ascii_alphabet [int (system_random .random () * ascii_len )] for _ in range (16 ))
214214
215215 def _store_tokens (self , access_token , refresh_token ):
216+ self ._access_token = access_token
217+ self ._refresh_token = refresh_token
216218 if self ._store_tokens_callback is not None :
217219 self ._store_tokens_callback (access_token , refresh_token )
218220
@@ -240,17 +242,41 @@ def send_token_request(self, data, access_token, expect_refresh_token=True):
240242 url ,
241243 data = data ,
242244 headers = headers ,
243- access_token = access_token
245+ access_token = access_token ,
244246 )
245247 if not network_response .ok :
246248 raise BoxOAuthException (network_response .status_code , network_response .content , url , 'POST' )
247249 try :
248250 response = network_response .json ()
249- self . _access_token = response ['access_token' ]
250- self . _refresh_token = response .get ('refresh_token' , None )
251- if self . _refresh_token is None and expect_refresh_token :
251+ access_token = response ['access_token' ]
252+ refresh_token = response .get ('refresh_token' , None )
253+ if refresh_token is None and expect_refresh_token :
252254 raise BoxOAuthException (network_response .status_code , network_response .content , url , 'POST' )
253255 except (ValueError , KeyError ):
254256 raise BoxOAuthException (network_response .status_code , network_response .content , url , 'POST' )
255- self ._store_tokens (self . _access_token , self . _refresh_token )
257+ self ._store_tokens (access_token , refresh_token )
256258 return self ._access_token , self ._refresh_token
259+
260+ def revoke (self ):
261+ """
262+ Revoke the authorization for the current access/refresh token pair.
263+ """
264+ with self ._refresh_lock :
265+ access_token , refresh_token = self ._get_tokens ()
266+ token_to_revoke = access_token or refresh_token
267+ if token_to_revoke is None :
268+ return
269+ url = '{base_auth_url}/revoke' .format (base_auth_url = API .OAUTH2_API_URL )
270+ network_response = self ._network_layer .request (
271+ 'POST' ,
272+ url ,
273+ data = {
274+ 'client_id' : self ._client_id ,
275+ 'client_secret' : self ._client_secret ,
276+ 'token' : token_to_revoke ,
277+ },
278+ access_token = access_token ,
279+ )
280+ if not network_response .ok :
281+ raise BoxOAuthException (network_response .status_code , network_response .content , url , 'POST' )
282+ self ._store_tokens (None , None )
0 commit comments