1 | var OAuth = require('oauth').OAuth,
|
2 | querystring = require('querystring'),
|
3 | twitterClient = require('node-twitter'),
|
4 | util = require('util'),
|
5 | task = require('./base');
|
6 |
|
7 |
|
8 |
|
9 | var twitterConfig = project.config.consumerConfig.twitter;
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | var twitter = module.exports = function(config) {
|
17 |
|
18 | this.init (config);
|
19 |
|
20 | };
|
21 |
|
22 | util.inherits (twitter, task);
|
23 |
|
24 | util.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 | });
|