From 0191942fb6f34f2a4a795418e04fe0390e63027c Mon Sep 17 00:00:00 2001 From: Jared Hanson Date: Mon, 8 Feb 2016 17:05:12 -0800 Subject: [PATCH] Simplify return from OAuth provider. --- lib/strategy.js | 116 ++++++++++++++++++++---------------------------- 1 file changed, 48 insertions(+), 68 deletions(-) diff --git a/lib/strategy.js b/lib/strategy.js index b7224dc..9d55ae2 100644 --- a/lib/strategy.js +++ b/lib/strategy.js @@ -148,22 +148,55 @@ OAuth2Strategy.prototype.authenticate = function(req, options) { } if (req.query && req.query.code) { - if (this._stateProvider) { - var state = req.query.state; - this._stateProvider.verify(req, state, function(err, ok, info) { - if (err) { return self.error(err); } - if (!ok) { - return self.fail(info, 403); - } - /* Proceed with token exchange */ - self._getOAuthAccessToken(req, callbackURL, options); - }); - - return; - } - - this._getOAuthAccessToken(req, callbackURL, options); + var state = req.query.state; + this._stateProvider.verify(req, state, function(err, ok, info) { + if (err) { return self.error(err); } + if (!ok) { + return self.fail(info, 403); + } + + var code = req.query.code; + + var params = self.tokenParams(options); + params.grant_type = 'authorization_code'; + params.redirect_uri = callbackURL; + + self._oauth2.getOAuthAccessToken(code, params, + function(err, accessToken, refreshToken, params) { + if (err) { return self.error(self._createOAuthError('Failed to obtain access token', err)); } + + self._loadUserProfile(accessToken, function(err, profile) { + if (err) { return self.error(err); } + + function verified(err, user, info) { + if (err) { return self.error(err); } + if (!user) { return self.fail(info); } + self.success(user, info); + } + try { + if (self._passReqToCallback) { + var arity = self._verify.length; + if (arity == 6) { + self._verify(req, accessToken, refreshToken, params, profile, verified); + } else { // arity == 5 + self._verify(req, accessToken, refreshToken, profile, verified); + } + } else { + var arity = self._verify.length; + if (arity == 5) { + self._verify(accessToken, refreshToken, params, profile, verified); + } else { // arity == 4 + self._verify(accessToken, refreshToken, profile, verified); + } + } + } catch (ex) { + return self.error(ex); + } + }); + } + ); + }); } else { var params = this.authorizationParams(options); params.response_type = 'code'; @@ -263,59 +296,6 @@ OAuth2Strategy.prototype.parseErrorResponse = function(body, status) { return null; }; -/** - * Exchange the code provided on the request for an access token - * - * @param {Object} req - * @param {String} callbackURL - * @param {Object} options - * @api private - */ -OAuth2Strategy.prototype._getOAuthAccessToken = function(req, callbackURL, options) { - var code = req.query.code; - var self = this; - - var params = this.tokenParams(options); - params.grant_type = 'authorization_code'; - params.redirect_uri = callbackURL; - - this._oauth2.getOAuthAccessToken(code, params, - function(err, accessToken, refreshToken, params) { - if (err) { return self.error(self._createOAuthError('Failed to obtain access token', err)); } - - self._loadUserProfile(accessToken, function(err, profile) { - if (err) { return self.error(err); } - - function verified(err, user, info) { - if (err) { return self.error(err); } - if (!user) { return self.fail(info); } - self.success(user, info); - } - - try { - if (self._passReqToCallback) { - var arity = self._verify.length; - if (arity == 6) { - self._verify(req, accessToken, refreshToken, params, profile, verified); - } else { // arity == 5 - self._verify(req, accessToken, refreshToken, profile, verified); - } - } else { - var arity = self._verify.length; - if (arity == 5) { - self._verify(accessToken, refreshToken, params, profile, verified); - } else { // arity == 4 - self._verify(accessToken, refreshToken, profile, verified); - } - } - } catch (ex) { - return self.error(ex); - } - }); - } - ); -}; - /** * Load user profile, contingent upon options. *