@@ -299,14 +299,7 @@ Service_.prototype.handleCallback = function(callbackRequest) {
299
299
} ,
300
300
muteHttpExceptions : true
301
301
} ) ;
302
- var token = this . parseToken_ ( response . getContentText ( ) ) ;
303
- if ( response . getResponseCode ( ) != 200 ) {
304
- var reason = token . error ;
305
- if ( ! reason ) {
306
- reason = response . getResponseCode ( ) + ': ' + JSON . stringify ( token ) ;
307
- }
308
- throw 'Error retrieving token: ' + reason ;
309
- }
302
+ var token = this . getTokenFromResponse_ ( response ) ;
310
303
this . saveToken_ ( token ) ;
311
304
return true ;
312
305
} ;
@@ -374,6 +367,24 @@ Service_.prototype.getLastError = function() {
374
367
return this . lastError_ ;
375
368
} ;
376
369
370
+ /**
371
+ * Gets the token from a UrlFetchApp response.
372
+ * @param {UrlFetchApp.HTTPResponse } response The response object.
373
+ * @return {Object } The parsed token.
374
+ * @throws If the token cannot be parsed or the response contained an error.
375
+ */
376
+ Service_ . prototype . getTokenFromResponse_ = function ( response ) {
377
+ var token = this . parseToken_ ( response . getContentText ( ) ) ;
378
+ if ( response . getResponseCode ( ) != 200 || token . error ) {
379
+ var reason = [ token . error , token . error_description , token . error_uri ] . filter ( Boolean ) . join ( ', ' ) ;
380
+ if ( ! reason ) {
381
+ reason = response . getResponseCode ( ) + ': ' + JSON . stringify ( token ) ;
382
+ }
383
+ throw 'Error retrieving token: ' + reason ;
384
+ }
385
+ return token ;
386
+ } ;
387
+
377
388
/**
378
389
* Parses the token using the service's token format.
379
390
* @param {string } content The serialized token content.
@@ -432,14 +443,7 @@ Service_.prototype.refresh = function() {
432
443
} ,
433
444
muteHttpExceptions : true
434
445
} ) ;
435
- var newToken = this . parseToken_ ( response . getContentText ( ) ) ;
436
- if ( response . getResponseCode ( ) != 200 ) {
437
- var reason = newToken . error ;
438
- if ( ! reason ) {
439
- reason = response . getResponseCode ( ) + ': ' + JSON . stringify ( newToken ) ;
440
- }
441
- throw 'Error retrieving token: ' + reason ;
442
- }
446
+ var newToken = this . getTokenFromResponse_ ( response ) ;
443
447
if ( ! newToken . refresh_token ) {
444
448
newToken . refresh_token = token . refresh_token ;
445
449
}
@@ -541,14 +545,7 @@ Service_.prototype.exchangeJwt_ = function() {
541
545
} ,
542
546
muteHttpExceptions : true
543
547
} ) ;
544
- var token = this . parseToken_ ( response . getContentText ( ) ) ;
545
- if ( response . getResponseCode ( ) != 200 ) {
546
- var reason = token . error ;
547
- if ( ! reason ) {
548
- reason = response . getResponseCode ( ) + ': ' + JSON . stringify ( token ) ;
549
- }
550
- throw 'Error retrieving token: ' + reason ;
551
- }
548
+ var token = this . getTokenFromResponse_ ( response ) ;
552
549
this . saveToken_ ( token ) ;
553
550
} ;
554
551
0 commit comments