Skip to content

Commit

Permalink
Simplify return from OAuth provider.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredhanson committed Feb 9, 2016
1 parent 9e4ae0d commit 0191942
Showing 1 changed file with 48 additions and 68 deletions.
116 changes: 48 additions & 68 deletions lib/strategy.js
Expand Up @@ -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';
Expand Down Expand Up @@ -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.
*
Expand Down

0 comments on commit 0191942

Please sign in to comment.