1
- var extend = require ( 'xtend' )
2
1
var Querystring = require ( 'querystring' )
3
2
var Url = require ( 'url' )
4
3
var defaultRequest = require ( './request' )
@@ -155,16 +154,13 @@ function createUri (options, tokenType) {
155
154
// Check the required parameters are set.
156
155
expects ( options , 'clientId' , 'authorizationUri' )
157
156
158
- return options . authorizationUri + '?' + Querystring . stringify ( extend (
159
- options . query ,
160
- {
161
- client_id : options . clientId ,
162
- redirect_uri : options . redirectUri ,
163
- scope : sanitizeScope ( options . scopes ) ,
164
- response_type : tokenType ,
165
- state : options . state
166
- }
167
- ) )
157
+ return options . authorizationUri + '?' + Querystring . stringify ( Object . assign ( { } , options . query , {
158
+ client_id : options . clientId ,
159
+ redirect_uri : options . redirectUri ,
160
+ scope : sanitizeScope ( options . scopes ) ,
161
+ response_type : tokenType ,
162
+ state : options . state
163
+ } ) )
168
164
}
169
165
170
166
/**
@@ -195,9 +191,9 @@ function requestOptions (requestOptions, options) {
195
191
return {
196
192
url : requestOptions . url ,
197
193
method : requestOptions . method ,
198
- body : extend ( requestOptions . body , options . body ) ,
199
- query : extend ( requestOptions . query , options . query ) ,
200
- headers : extend ( requestOptions . headers , options . headers )
194
+ body : Object . assign ( { } , requestOptions . body , options . body ) ,
195
+ query : Object . assign ( { } , requestOptions . query , options . query ) ,
196
+ headers : Object . assign ( { } , requestOptions . headers , options . headers )
201
197
}
202
198
}
203
199
@@ -234,7 +230,8 @@ ClientOAuth2.Token = ClientOAuth2Token
234
230
* @return {Object }
235
231
*/
236
232
ClientOAuth2 . prototype . createToken = function ( access , refresh , type , data ) {
237
- var options = extend (
233
+ var options = Object . assign (
234
+ { } ,
238
235
data ,
239
236
typeof access === 'string' ? { access_token : access } : access ,
240
237
typeof refresh === 'string' ? { refresh_token : refresh } : refresh ,
@@ -352,12 +349,12 @@ ClientOAuth2Token.prototype.sign = function (requestObject) {
352
349
/**
353
350
* Refresh a user access token with the supplied token.
354
351
*
352
+ * @param {Object } opts
355
353
* @return {Promise }
356
354
*/
357
- ClientOAuth2Token . prototype . refresh = function ( options ) {
355
+ ClientOAuth2Token . prototype . refresh = function ( opts ) {
358
356
var self = this
359
-
360
- options = extend ( this . client . options , options )
357
+ var options = Object . assign ( { } , this . client . options , opts )
361
358
362
359
if ( ! this . refreshToken ) {
363
360
return Promise . reject ( new Error ( 'No refresh token' ) )
@@ -366,7 +363,7 @@ ClientOAuth2Token.prototype.refresh = function (options) {
366
363
return this . client . _request ( requestOptions ( {
367
364
url : options . accessTokenUri ,
368
365
method : 'POST' ,
369
- headers : extend ( DEFAULT_HEADERS , {
366
+ headers : Object . assign ( { } , DEFAULT_HEADERS , {
370
367
Authorization : auth ( options . clientId , options . clientSecret )
371
368
} ) ,
372
369
body : {
@@ -375,7 +372,7 @@ ClientOAuth2Token.prototype.refresh = function (options) {
375
372
}
376
373
} , options ) )
377
374
. then ( function ( data ) {
378
- return self . client . createToken ( extend ( self . data , data ) )
375
+ return self . client . createToken ( Object . assign ( { } , self . data , data ) )
379
376
} )
380
377
}
381
378
@@ -404,17 +401,17 @@ function OwnerFlow (client) {
404
401
*
405
402
* @param {string } username
406
403
* @param {string } password
404
+ * @param {Object } [opts]
407
405
* @return {Promise }
408
406
*/
409
- OwnerFlow . prototype . getToken = function ( username , password , options ) {
407
+ OwnerFlow . prototype . getToken = function ( username , password , opts ) {
410
408
var self = this
411
-
412
- options = extend ( this . client . options , options )
409
+ var options = Object . assign ( { } , this . client . options , opts )
413
410
414
411
return this . client . _request ( requestOptions ( {
415
412
url : options . accessTokenUri ,
416
413
method : 'POST' ,
417
- headers : extend ( DEFAULT_HEADERS , {
414
+ headers : Object . assign ( { } , DEFAULT_HEADERS , {
418
415
Authorization : auth ( options . clientId , options . clientSecret )
419
416
} ) ,
420
417
body : {
@@ -443,11 +440,11 @@ function TokenFlow (client) {
443
440
/**
444
441
* Get the uri to redirect the user to for implicit authentication.
445
442
*
446
- * @param {Object } options
443
+ * @param {Object } [opts]
447
444
* @return {string }
448
445
*/
449
- TokenFlow . prototype . getUri = function ( options ) {
450
- options = extend ( this . client . options , options )
446
+ TokenFlow . prototype . getUri = function ( opts ) {
447
+ var options = Object . assign ( { } , this . client . options , opts )
451
448
452
449
return createUri ( options , 'token' )
453
450
}
@@ -456,12 +453,11 @@ TokenFlow.prototype.getUri = function (options) {
456
453
* Get the user access token from the uri.
457
454
*
458
455
* @param {string|Object } uri
459
- * @param {Object } [options ]
456
+ * @param {Object } [opts ]
460
457
* @return {Promise }
461
458
*/
462
- TokenFlow . prototype . getToken = function ( uri , options ) {
463
- options = extend ( this . client . options , options )
464
-
459
+ TokenFlow . prototype . getToken = function ( uri , opts ) {
460
+ var options = Object . assign ( { } , this . client . options , opts )
465
461
var url = typeof uri === 'object' ? uri : Url . parse ( uri , true )
466
462
var expectedUrl = Url . parse ( options . redirectUri )
467
463
@@ -480,7 +476,8 @@ TokenFlow.prototype.getToken = function (uri, options) {
480
476
// Extract data from both the fragment and query string. The fragment is most
481
477
// important, but the query string is also used because some OAuth 2.0
482
478
// implementations (Instagram) have a bug where state is passed via query.
483
- var data = extend (
479
+ var data = Object . assign (
480
+ { } ,
484
481
typeof url . query === 'string' ? Querystring . parse ( url . query ) : ( url . query || { } ) ,
485
482
typeof url . hash === 'string' ? Querystring . parse ( url . hash . substr ( 1 ) ) : ( url . hash || { } )
486
483
)
@@ -515,20 +512,19 @@ function CredentialsFlow (client) {
515
512
/**
516
513
* Request an access token using the client credentials.
517
514
*
518
- * @param {Object } [options ]
515
+ * @param {Object } [opts ]
519
516
* @return {Promise }
520
517
*/
521
- CredentialsFlow . prototype . getToken = function ( options ) {
518
+ CredentialsFlow . prototype . getToken = function ( opts ) {
522
519
var self = this
523
-
524
- options = extend ( this . client . options , options )
520
+ var options = Object . assign ( { } , this . client . options , opts )
525
521
526
522
expects ( options , 'clientId' , 'clientSecret' , 'accessTokenUri' )
527
523
528
524
return this . client . _request ( requestOptions ( {
529
525
url : options . accessTokenUri ,
530
526
method : 'POST' ,
531
- headers : extend ( DEFAULT_HEADERS , {
527
+ headers : Object . assign ( { } , DEFAULT_HEADERS , {
532
528
Authorization : auth ( options . clientId , options . clientSecret )
533
529
} ) ,
534
530
body : {
@@ -555,10 +551,11 @@ function CodeFlow (client) {
555
551
/**
556
552
* Generate the uri for doing the first redirect.
557
553
*
554
+ * @param {Object } [opts]
558
555
* @return {string }
559
556
*/
560
- CodeFlow . prototype . getUri = function ( options ) {
561
- options = extend ( this . client . options , options )
557
+ CodeFlow . prototype . getUri = function ( opts ) {
558
+ var options = Object . assign ( { } , this . client . options , opts )
562
559
563
560
return createUri ( options , 'code' )
564
561
}
@@ -568,13 +565,12 @@ CodeFlow.prototype.getUri = function (options) {
568
565
* the user access token.
569
566
*
570
567
* @param {string|Object } uri
571
- * @param {Object } [options ]
568
+ * @param {Object } [opts ]
572
569
* @return {Promise }
573
570
*/
574
- CodeFlow . prototype . getToken = function ( uri , options ) {
571
+ CodeFlow . prototype . getToken = function ( uri , opts ) {
575
572
var self = this
576
-
577
- options = extend ( this . client . options , options )
573
+ var options = Object . assign ( { } , this . client . options , opts )
578
574
579
575
expects ( options , 'clientId' , 'accessTokenUri' )
580
576
@@ -610,7 +606,7 @@ CodeFlow.prototype.getToken = function (uri, options) {
610
606
return Promise . reject ( new TypeError ( 'Missing code, unable to request token' ) )
611
607
}
612
608
613
- var headers = extend ( DEFAULT_HEADERS )
609
+ var headers = Object . assign ( { } , DEFAULT_HEADERS )
614
610
var body = { code : data . code , grant_type : 'authorization_code' , redirect_uri : options . redirectUri }
615
611
616
612
// `client_id`: REQUIRED, if the client is not authenticating with the
@@ -648,18 +644,16 @@ function JwtBearerFlow (client) {
648
644
* Request an access token using a JWT token.
649
645
*
650
646
* @param {string } token A JWT token.
651
- * @param {Object } [options ]
647
+ * @param {Object } [opts ]
652
648
* @return {Promise }
653
649
*/
654
- JwtBearerFlow . prototype . getToken = function ( token , options ) {
650
+ JwtBearerFlow . prototype . getToken = function ( token , opts ) {
655
651
var self = this
656
-
657
- options = extend ( this . client . options , options )
652
+ var options = Object . assign ( { } , this . client . options , opts )
653
+ var headers = Object . assign ( { } , DEFAULT_HEADERS )
658
654
659
655
expects ( options , 'accessTokenUri' )
660
656
661
- var headers = extend ( DEFAULT_HEADERS )
662
-
663
657
// Authentication of the client is optional, as described in
664
658
// Section 3.2.1 of OAuth 2.0 [RFC6749]
665
659
if ( options . clientId ) {
0 commit comments