@@ -60,14 +60,35 @@ DSAuthCodeGrant.prototype.login = function(req, res, next) {
60
60
// Reset
61
61
this . internalLogout ( req , res ) ;
62
62
req . session . authMethod = 'grand-auth' ;
63
- passport . authenticate ( 'docusign' ) ( req , res , next ) ;
63
+
64
+ if ( req . session ?. pkceFailed ) {
65
+ passport . authenticate ( 'docusign' ) ( req , res , next ) ;
66
+ } else {
67
+ passport . authenticate ( 'docusign_pkce' ) ( req , res , next ) ;
68
+ }
64
69
} ;
65
70
66
71
DSAuthCodeGrant . prototype . oauth_callback1 = ( req , res , next ) => {
67
72
// This callback URL is used for the login flow
68
- passport . authenticate ( 'docusign' , { failureRedirect : '/ds/login' } ) ( req , res , next ) ;
73
+ if ( req . session ?. pkceFailed ) {
74
+ passport . authenticate ( 'docusign' , { failureRedirect : '/ds/login' } ) ( req , res , next ) ;
75
+ } else {
76
+ passport . authenticate ( 'docusign_pkce' , { failureRedirect : '/ds/login' } , ( err , user , _info ) => {
77
+ if ( err || ! user ) { return next ( ) ; }
78
+
79
+ req . logIn ( user , function ( err ) {
80
+ if ( err ) { return next ( err ) ; }
81
+ return next ( ) ;
82
+ } ) ;
83
+ } ) ( req , res , next ) ;
84
+ }
69
85
} ;
70
86
DSAuthCodeGrant . prototype . oauth_callback2 = function _oauth_callback2 ( req , res , next ) {
87
+ if ( ! req . session . pkceFailed && ! req ?. user ?. accessToken ) {
88
+ req . session . pkceFailed = true ;
89
+ return res . redirect ( '/ds/login' ) ;
90
+ }
91
+
71
92
this . _accessToken = req . user . accessToken ;
72
93
console . log ( `Received access_token: |${ req . user . accessToken } |` ) ;
73
94
console . log ( `Expires at ${ req . user . tokenExpirationTimestamp . format ( 'dddd, MMMM Do YYYY, h:mm:ss a' ) } ` ) ;
0 commit comments