|  | 
| 4 | 4 | from oauthlib.oauth2 import WebApplicationClient, InsecureTransportError | 
| 5 | 5 | from oauthlib.oauth2 import LegacyApplicationClient | 
| 6 | 6 | from oauthlib.oauth2 import TokenExpiredError, is_secure_transport | 
|  | 7 | +from oauthlib.oauth2.rfc6749.errors import CustomOAuth2Error | 
| 7 | 8 | import requests | 
| 8 | 9 | 
 | 
| 9 | 10 | log = logging.getLogger(__name__) | 
| @@ -199,6 +200,17 @@ def authorization_url(self, url, state=None, **kwargs): | 
| 199 | 200 |             state, | 
| 200 | 201 |         ) | 
| 201 | 202 | 
 | 
|  | 203 | +    def validate_token_response(self, r): | 
|  | 204 | +        message = "" | 
|  | 205 | +        try: | 
|  | 206 | +            r.raise_for_status() | 
|  | 207 | +        except requests.HTTPError as e: | 
|  | 208 | +            message = str(e) | 
|  | 209 | +            if r.text: | 
|  | 210 | +                message += f"\nBody: {r.text}" | 
|  | 211 | +        if message: | 
|  | 212 | +            raise CustomOAuth2Error('Response error', message, uri=r.request.url, status_code=r.status_code) | 
|  | 213 | + | 
| 202 | 214 |     def fetch_token( | 
| 203 | 215 |         self, | 
| 204 | 216 |         token_url, | 
| @@ -403,6 +415,7 @@ def fetch_token( | 
| 403 | 415 |             log.debug("Invoking hook %s.", hook) | 
| 404 | 416 |             r = hook(r) | 
| 405 | 417 | 
 | 
|  | 418 | +        self.validate_token_response(r) | 
| 406 | 419 |         self._client.parse_request_body_response(r.text, scope=self.scope) | 
| 407 | 420 |         self.token = self._client.token | 
| 408 | 421 |         log.debug("Obtained token %s.", self.token) | 
| @@ -493,6 +506,7 @@ def refresh_token( | 
| 493 | 506 |             log.debug("Invoking hook %s.", hook) | 
| 494 | 507 |             r = hook(r) | 
| 495 | 508 | 
 | 
|  | 509 | +        self.validate_token_response(r) | 
| 496 | 510 |         self.token = self._client.parse_request_body_response(r.text, scope=self.scope) | 
| 497 | 511 |         if "refresh_token" not in self.token: | 
| 498 | 512 |             log.debug("No new refresh token given. Re-using old.") | 
|  | 
0 commit comments