dataflo.ws
Version:
Zero-code JSON config-based dataflow engine for Node, PhoneGap and browser.
173 lines (132 loc) • 3.59 kB
JavaScript
var OAuth = require('oauth').OAuth,
querystring = require('querystring'),
twitterClient = require('node-twitter'),
util = require('util'),
task = require('./base');
// - - - static
var twitterConfig = project.config.consumerConfig.twitter;
//console.log ('<------twitterConfig', twitterConfig);
// - - -
var twitter = module.exports = function(config) {
this.init (config);
};
util.inherits (twitter, task);
util.extend (twitter.prototype, {
run: function() {
var self = this;
self.failed('use method [login|callback|profile]');
},
login: function () {
var self = this;
var req = self.req;
var res = self.res;
var query = req.url.query;
var oa = new OAuth(twitterConfig.requestTokenUrl,
twitterConfig.accessTokenUrl,
twitterConfig.consumerKey,
twitterConfig.consumerSecret,
"1.0",
twitterConfig.callbackUrl,
"HMAC-SHA1");
oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, oauth_authorize_url, additionalParameters ) {
if (error) {
self.failed(error);
} else {
req.twitter_oauth_token_secret = oauth_token_secret;
req.twitter_oauth_token = oauth_token;
self.completed("http://twitter.com/oauth/authenticate?oauth_token=" + oauth_token);
}
});
},
callback: function() {
var self = this;
var req = self.req;
var query = req.url.query;
var tokens = req.user.tokens;
var oa = new OAuth(twitterConfig.requestTokenUrl,
twitterConfig.accessTokenUrl,
twitterConfig.consumerKey,
twitterConfig.consumerSecret,
"1.0",
twitterConfig.callbackUrl,
"HMAC-SHA1");
oa.getOAuthAccessToken(query.oauth_token, tokens.twitter_oauth_token_secret, query.oauth_verifier,
function(error, oauth_token, oauth_token_secret, additionalParameters ) {
if (error) {
self.failed(error);
} else {
tokens.oauth_token_secret = oauth_token_secret;
tokens.oauth_token = oauth_token;
self.completed(additionalParameters.user_id);
}
});
},
profile: function() {
var self = this;
var req = self.req;
var tokens = req.user.tokens;
var oa = new OAuth(twitterConfig.requestTokenUrl,
twitterConfig.accessTokenUrl,
twitterConfig.consumerKey,
twitterConfig.consumerSecret,
"1.0",
twitterConfig.callbackUrl,
"HMAC-SHA1");
oa.getProtectedResource(
"https://api.twitter.com/1.1/users/show.json?id="+self.userId,
"GET",
tokens.oauth_token,
tokens.oauth_token_secret,
function (error, data, response) {
if (error) {
self.failed(error.message);
} else {
try {
var user = JSON.parse(data);
user.tokens = tokens;
self.completed(self.mappingUser(user));
} catch (e) {
self.failed(e);
}
}
}
);
},
postWithMedia: function () {
var self = this;
var req = self.req;
var tokens = req.user.tokens;
var msg = self.message;
var twitterRestClient = new twitterClient.RestClient(
twitterConfig.consumerKey,
twitterConfig.consumerSecret,
tokens.oauth_token,
tokens.oauth_token_secret
);
twitterRestClient.statusesUpdateWithMedia(
{
'status': msg.status,
'media[]': msg.image
},
function (error, result) {
if (error) {
self.failed(error);
} else {
self.completed(result);
}
}
);
},
mappingUser: function(user) {
return {
name: user.name,
externalId: user.id,
username: user.screen_name,
email: user.screen_name+"@twitter.com",
avatar: user.profile_image_url,
link: "https://twitter.com/?id="+user.id,
tokens: user.tokens,
authType: 'twitter'
};
}
});