Skip to content

Instantly share code, notes, and snippets.

@dscape
Created November 15, 2011 17:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dscape/1367691 to your computer and use it in GitHub Desktop.
Save dscape/1367691 to your computer and use it in GitHub Desktop.
var oauth = require('oauth')
, request = require('request')
;
module.exports = function(app, params, cb) {
if(!params.consumer_key) { throw new Error('Please provide a consumer key.'); }
if(!params.consumer_secret) { throw new Error('Please provide a consumer secret.'); }
if(!params.callback_url) { throw new Error('Please provide callback url.'); }
if(!cb) { throw new Error('Please provide a callback'); }
var base_route = params.base_route || '/auth/twitter'
, cb_route = base_route + '/callback'
, twitter_url = params.twitter_url || 'https://twitter.com'
, consumer_key = params.consumer_key
, consumer_secret = params.consumer_secret
, callback_url = params.callback_url
;
function consumer() {
return new oauth.OAuth(
twitter_url + "/oauth/request_token"
, twitter_url + "/oauth/access_token"
, consumer_key
, consumer_secret
, "1.0A"
, callback_url + cb_route
, "HMAC-SHA1");
}
app.get(base_route, function(request, response) {
consumer().getOAuthRequestToken(
function(error, oauth_token, oauth_token_secret, results) {
if (error) { return cb(error,request,response); }
else {
request.session.oauth_request_token = oauth_token;
request.session.oauth_request_token_secret = oauth_token_secret;
response.redirect( twitter_url + "/oauth/authorize?oauth_token=" +
request.session.oauth_request_token );
}
});
});
app.get(cb_route, function(request, response) {
if(request.query.denied) {
return cb( new Error('You choose not to login. Try again when you are ready!')
, request, response, 'twitter');
}
consumer().getOAuthAccessToken( request.session.oauth_request_token
, request.session.oauth_request_token_secret
, request.query.oauth_verifier
, function(error, oauth_access_token, oauth_access_token_secret, results) {
if (error) { return cb(error,request,response,'twitter'); }
request.session.oauth_access_token = oauth_access_token;
request.session.oauth_access_token_secret = oauth_access_token_secret;
consumer().get( twitter_url + "/account/verify_credentials.json"
, request.session.oauth_access_token
, request.session.oauth_access_token_secret
, function (error, twitter_user) {
if (error) { return cb(error,request,response,'twitter'); }
try {
cb(null,request,response,'twitter',JSON.parse(twitter_user));
} catch(exc) {
cb(exc,request,response,'twitter');
}
});
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment