@@ -60,14 +60,35 @@ DSAuthCodeGrant.prototype.login = function(req, res, next) {
6060 // Reset
6161 this . internalLogout ( req , res ) ;
6262 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+ }
6469} ;
6570
6671DSAuthCodeGrant . prototype . oauth_callback1 = ( req , res , next ) => {
6772 // 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+ }
6985} ;
7086DSAuthCodeGrant . 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+
7192 this . _accessToken = req . user . accessToken ;
7293 console . log ( `Received access_token: |${ req . user . accessToken } |` ) ;
7394 console . log ( `Expires at ${ req . user . tokenExpirationTimestamp . format ( 'dddd, MMMM Do YYYY, h:mm:ss a' ) } ` ) ;
0 commit comments