UNPKG

3.59 kBJavaScriptView Raw
1var OAuth = require('oauth').OAuth,
2 querystring = require('querystring'),
3 twitterClient = require('node-twitter'),
4 util = require('util'),
5 task = require('./base');
6
7// - - - static
8
9var twitterConfig = project.config.consumerConfig.twitter;
10
11//console.log ('<------twitterConfig', twitterConfig);
12
13
14// - - -
15
16var twitter = module.exports = function(config) {
17
18 this.init (config);
19
20};
21
22util.inherits (twitter, task);
23
24util.extend (twitter.prototype, {
25
26 run: function() {
27
28 var self = this;
29 self.failed('use method [login|callback|profile]');
30
31 },
32
33 login: function () {
34
35 var self = this;
36 var req = self.req;
37 var res = self.res;
38
39 var query = req.url.query;
40
41 var oa = new OAuth(twitterConfig.requestTokenUrl,
42 twitterConfig.accessTokenUrl,
43 twitterConfig.consumerKey,
44 twitterConfig.consumerSecret,
45 "1.0",
46 twitterConfig.callbackUrl,
47 "HMAC-SHA1");
48
49 oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, oauth_authorize_url, additionalParameters ) {
50
51 if (error) {
52
53 self.failed(error);
54
55 } else {
56
57 req.twitter_oauth_token_secret = oauth_token_secret;
58 req.twitter_oauth_token = oauth_token;
59
60 self.completed("http://twitter.com/oauth/authenticate?oauth_token=" + oauth_token);
61 }
62
63 });
64 },
65
66 callback: function() {
67
68 var self = this;
69 var req = self.req;
70 var query = req.url.query;
71 var tokens = req.user.tokens;
72
73 var oa = new OAuth(twitterConfig.requestTokenUrl,
74 twitterConfig.accessTokenUrl,
75 twitterConfig.consumerKey,
76 twitterConfig.consumerSecret,
77 "1.0",
78 twitterConfig.callbackUrl,
79 "HMAC-SHA1");
80
81 oa.getOAuthAccessToken(query.oauth_token, tokens.twitter_oauth_token_secret, query.oauth_verifier,
82 function(error, oauth_token, oauth_token_secret, additionalParameters ) {
83 if (error) {
84 self.failed(error);
85 } else {
86
87 tokens.oauth_token_secret = oauth_token_secret;
88 tokens.oauth_token = oauth_token;
89
90 self.completed(additionalParameters.user_id);
91 }
92 });
93 },
94
95 profile: function() {
96 var self = this;
97 var req = self.req;
98 var tokens = req.user.tokens;
99 var oa = new OAuth(twitterConfig.requestTokenUrl,
100 twitterConfig.accessTokenUrl,
101 twitterConfig.consumerKey,
102 twitterConfig.consumerSecret,
103 "1.0",
104 twitterConfig.callbackUrl,
105 "HMAC-SHA1");
106
107 oa.getProtectedResource(
108 "https://api.twitter.com/1.1/users/show.json?id="+self.userId,
109 "GET",
110 tokens.oauth_token,
111 tokens.oauth_token_secret,
112
113 function (error, data, response) {
114
115 if (error) {
116 self.failed(error.message);
117 } else {
118 try {
119 var user = JSON.parse(data);
120 user.tokens = tokens;
121 self.completed(self.mappingUser(user));
122 } catch (e) {
123 self.failed(e);
124 }
125 }
126 }
127 );
128 },
129
130 postWithMedia: function () {
131 var self = this;
132 var req = self.req;
133 var tokens = req.user.tokens;
134 var msg = self.message;
135
136 var twitterRestClient = new twitterClient.RestClient(
137 twitterConfig.consumerKey,
138 twitterConfig.consumerSecret,
139 tokens.oauth_token,
140 tokens.oauth_token_secret
141 );
142
143 twitterRestClient.statusesUpdateWithMedia(
144 {
145 'status': msg.status,
146 'media[]': msg.image
147 },
148 function (error, result) {
149 if (error) {
150 self.failed(error);
151 } else {
152 self.completed(result);
153 }
154 }
155 );
156 },
157
158 mappingUser: function(user) {
159
160 return {
161 name: user.name,
162 externalId: user.id,
163 username: user.screen_name,
164 email: user.screen_name+"@twitter.com",
165 avatar: user.profile_image_url,
166 link: "https://twitter.com/?id="+user.id,
167 tokens: user.tokens,
168 authType: 'twitter'
169 };
170
171 }
172});