Commit 901cf9158a0ce2c4f18ca97e6947c847747b0c40

Authored by Adhidarma Hadiwinoto
1 parent 32b39897af
Exists in master

db ke ym

Showing 2 changed files with 25 additions and 26 deletions Inline Diff

1 var iniparser = require('iniparser'); 1 var iniparser = require('iniparser');
2 var config = iniparser.parseSync('./config.ini'); 2 var config = iniparser.parseSync('./config.ini');
3 3
4 if (config.yahoomessenger.keepalive_interval == null) { 4 if (config.yahoomessenger.keepalive_interval == null) {
5 config.yahoomessenger.keepalive_interval = 60; 5 config.yahoomessenger.keepalive_interval = 60;
6 } 6 }
7 7
8 var strftime = require('strftime'); 8 var strftime = require('strftime');
9 9
10 var logger = require('winston'); 10 var logger = require('winston');
11 logger.remove(logger.transports.Console); 11 logger.remove(logger.transports.Console);
12 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); 12 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }});
13 13
14 var db = require('./db.js');
15 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger);
16
17
18 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) {
19
20 db_connection.query(
21 'INSERT INTO messages SET ?',
22 {
23 transport: 'YAHOO',
24 logger: logger_id,
25 direction: direction,
26 partner: partner,
27 message: message,
28 sentdate: sentdate,
29 },
30
31 function(err) {
32 if (err != null) {
33 logger.error("Error on inserting messages to DB, error: " + err);
34 }
35 }
36 );
37 }
38 14
39 var ym = require('./ym'); 15 var ym = require('./ym');
40 var YahooMessenger = ym.start(config, logger); 16 var YahooMessenger = ym.start(config, logger);
41 17
42 var http = require('http'); 18 var http = require('http');
43 var nsr = require('node-simple-router'); 19 var nsr = require('node-simple-router');
44 var router = nsr(); 20 var router = nsr();
45 21
46 router.get('/hello', function(request, response) { 22 router.get('/hello', function(request, response) {
47 response.end('Hello bro'); 23 response.end('Hello bro');
48 }); 24 });
49 25
50 router.get('/broadcastPing', function(request, response) { 26 router.get('/broadcastPing', function(request, response) {
51 response.end('Ok'); 27 response.end('Ok');
52 broadcast(config.yahoomessenger.report_to, 'PING'); 28 broadcast(config.yahoomessenger.report_to, 'PING');
53 }); 29 });
54 30
55 router.get('/status', function(request, response) { 31 router.get('/status', function(request, response) {
56 response.writeHead(200, {"Content-Type": "text/plain"}); 32 response.writeHead(200, {"Content-Type": "text/plain"});
57 response.write(config.yahoomessenger.status); 33 response.write(config.yahoomessenger.status);
58 response.end(); 34 response.end();
59 }); 35 });
60 36
61 router.post('/status', function(request, response) { 37 router.post('/status', function(request, response) {
62 var apikey = request.body.apikey; 38 var apikey = request.body.apikey;
63 if (apikey != config.httpserver.apikey) { 39 if (apikey != config.httpserver.apikey) {
64 response.end('Invalid APIKEY: ' + apikey); 40 response.end('Invalid APIKEY: ' + apikey);
65 return; 41 return;
66 } 42 }
67 response.end('Ok'); 43 response.end('Ok');
68 44
69 config.yahoomessenger.status = request.body.status; 45 config.yahoomessenger.status = request.body.status;
70 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); 46 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status);
71 }); 47 });
72 48
73 router.get('/relogin/:apikey', function(request, response) { 49 router.get('/relogin/:apikey', function(request, response) {
74 var apikey = request.params.apikey; 50 var apikey = request.params.apikey;
75 51
76 if (apikey != config.httpserver.apikey){ 52 if (apikey != config.httpserver.apikey){
77 response.end('Invalid APIKEY: ' + apikey); 53 response.end('Invalid APIKEY: ' + apikey);
78 return; 54 return;
79 } 55 }
80 56
81 logger.info("Logging out"); 57 logger.info("Logging out");
82 YahooMessenger.logout(); 58 YahooMessenger.logout();
83 59
84 logger.info("Logout"); 60 logger.info("Logout");
85 clearTimeout(keepAliveTimer); 61 clearTimeout(keepAliveTimer);
86 62
87 ymLogin(); 63 ymLogin();
88 }); 64 });
89 65
90 logger.info("Starting http server on port " + config.httpserver.listen_port); 66 logger.info("Starting http server on port " + config.httpserver.listen_port);
91 var httpServer = http.createServer(router).listen(config.httpserver.listen_port); 67 var httpServer = http.createServer(router).listen(config.httpserver.listen_port);
92 68
93 69
1 var YahooMessenger = require("yahoomessenger"); 1 var YahooMessenger = require("yahoomessenger");
2 var striptags = require('striptags'); 2 var striptags = require('striptags');
3 var db = require('./db.js');
4
5 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) {
6
7 db_connection.query(
8 'INSERT INTO messages SET ?',
9 {
10 transport: 'YAHOO',
11 logger: logger_id,
12 direction: direction,
13 partner: partner,
14 message: message,
15 sentdate: sentdate,
16 },
17
18 function(err) {
19 if (err != null) {
20 logger.error("Error on inserting messages to DB, error: " + err);
21 }
22 }
23 );
24 }
3 25
4 function start(config, logger) { 26 function start(config, logger) {
5 var oldMessages = []; 27 var oldMessages = [];
6 28
7 var keepAliveTimer; 29 var keepAliveTimer;
8 30
9 var _keepAliveLoop = function() { 31 var _keepAliveLoop = function() {
10 logger.info('Keep alive loop'); 32 logger.info('Keep alive loop');
11 33
12 YahooMessenger.keepAlive(); 34 YahooMessenger.keepAlive();
13 keepAliveLoop(); 35 keepAliveLoop();
14 } 36 }
15 37
16 function isAdmin(user) { 38 function isAdmin(user) {
17 var admins = config.yahoomessenger.admin.split(','); 39 var admins = config.yahoomessenger.admin.split(',');
18 40
19 return (admins.indexOf(user) >= 0); 41 return (admins.indexOf(user) >= 0);
20 } 42 }
21 43
22 function keepAliveLoop() { 44 function keepAliveLoop() {
23 keepAliveTimer = setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); 45 keepAliveTimer = setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000);
24 } 46 }
25 47
26 function login(){ 48 function login(){
27 logger.info("Login to YM as " + config.yahoomessenger.username) 49 logger.info("Login to YM as " + config.yahoomessenger.username)
28 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); 50 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password);
29 } 51 }
30 52
31 function pm(destination, message) { 53 function pm(destination, message) {
32 logger.info("Sending to " + destination + ": " + message); 54 logger.info("Sending to " + destination + ": " + message);
33 55
34 YahooMessenger.sendPM(destination, message); 56 YahooMessenger.sendPM(destination, message);
35 } 57 }
36 58
37 function sendPM(destination, message) { 59 function sendPM(destination, message) {
38 pm(destination, message); 60 pm(destination, message);
39 } 61 }
40 62
41 function broadcast(destinations, message, exclude) { 63 function broadcast(destinations, message, exclude) {
42 var destinations = destinations.split(','); 64 var destinations = destinations.split(',');
43 var destinationCount = destinations.length; 65 var destinationCount = destinations.length;
44 66
45 for (var i=0; i < destinationCount; i++) { 67 for (var i=0; i < destinationCount; i++) {
46 destination = destinations[i]; 68 destination = destinations[i];
47 if (destination == exclude) { 69 if (destination == exclude) {
48 continue; 70 continue;
49 } 71 }
50 72
51 sendPM(destination, message); 73 sendPM(destination, message);
52 } 74 }
53 } 75 }
54 76
55 function onReady() { 77 function onReady() {
56 login(); 78 login();
57 } 79 }
58 80
59 function onLoginSuccesful(data) { 81 function onLoginSuccesful(data) {
60 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); 82 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')');
61 83
62 if (config.yahoomessenger.status) { 84 if (config.yahoomessenger.status) {
63 logger.info('Set status to: ' + config.yahoomessenger.status); 85 logger.info('Set status to: ' + config.yahoomessenger.status);
64 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); 86 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status);
65 }; 87 };
66 88
67 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); 89 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message);
68 keepAliveLoop(); 90 keepAliveLoop();
69 } 91 }
70 92
71 function onBuddyAddRequest(data) { 93 function onBuddyAddRequest(data) {
72 logger.info("Got request to add buddy from " + data.username); 94 logger.info("Got request to add buddy from " + data.username);
73 YahooMessenger.acceptAddBuddy(data.username); 95 YahooMessenger.acceptAddBuddy(data.username);
74 } 96 }
75 97
76 function onPM(data) { 98 function onPM(data) {
77 var direction = 'IN'; 99 var direction = 'IN';
78 100
79 if (config.globals.debug == 1) { 101 if (config.globals.debug == 1) {
80 console.log(data); 102 console.log(data);
81 } 103 }
82 104
83 // check duplicate message 105 // check duplicate message
84 if (oldMessages.indexOf(data.message_id) >= 0) { 106 if (oldMessages.indexOf(data.message_id) >= 0) {
85 return; 107 return;
86 } 108 }
87 109
88 oldMessages.unshift(data.message_id); 110 oldMessages.unshift(data.message_id);
89 if (oldMessages.length > 30) { 111 if (oldMessages.length > 30) {
90 oldMessages = oldMessages.slice(0, 10); 112 oldMessages = oldMessages.slice(0, 10);
91 } 113 }
92 114
93 partner = data.sender; 115 partner = data.sender;
94 if (partner == data.user_id) { 116 if (partner == data.user_id) {
95 partner = data.target_user; 117 partner = data.target_user;
96 direction = 'OUT'; 118 direction = 'OUT';
97 } 119 }
98 120
99 var message = striptags(data.message).trim(); 121 var message = striptags(data.message).trim();
100 122
101 logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message); 123 logger.info('New ' + direction + ' message from ' + data.sender + ' to ' + data.target_user + ': ' + message);
102 124
103 if (isAdmin(data.sender)) { 125 if (isAdmin(data.sender)) {
104 logger.info('Sender (' + data.sender + ') is an admin'); 126 logger.info('Sender (' + data.sender + ') is an admin');
105 } 127 }
106 128
107 var sentdate = Date.parse(data.time); 129 var sentdate = Date.parse(data.time);
108 var strftime = require('strftime'); 130 var strftime = require('strftime');
109 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); 131 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate);
110 132
111 /*
112 insertMessages( 133 insertMessages(
113 db_connection, 134 db_connection,
114 data.user_id, 135 data.user_id,
115 direction, 136 direction,
116 partner, 137 partner,
117 message, 138 message,
118 sentdate 139 sentdate
119 ); 140 );
120 */
121 141
122 broadcast(config.yahoomessenger.report_to, '@' + data.sender + ': ' + message, partner); 142 broadcast(config.yahoomessenger.report_to, '@' + data.sender + ': ' + message, partner);
123 143
124 if ((direction == 'IN') && (isAdmin(partner))) { 144 if ((direction == 'IN') && (isAdmin(partner))) {
125 if (message.charAt(0) == '@') { 145 if (message.charAt(0) == '@') {
126 target = message.split(' ', 1).join(); 146 target = message.split(' ', 1).join();
127 target = target.slice(1); 147 target = target.slice(1);
128 148
129 var messageToForward = message.replace('@' + target, '').trim(); 149 var messageToForward = message.replace('@' + target, '').trim();
130 if (messageToForward == '') { 150 if (messageToForward == '') {
131 return; 151 return;
132 } 152 }
133 153
134 logger.info('Forward to ' + target + ': ' + messageToForward); 154 logger.info('Forward to ' + target + ': ' + messageToForward);
135 sendPM(target, '@' + partner + ': ' + messageToForward); 155 sendPM(target, '@' + partner + ': ' + messageToForward);
136 156
137 } else if (message.charAt(0) == '+') { 157 } else if (message.charAt(0) == '+') {
138 target = message.split(' ', 1).join(); 158 target = message.split(' ', 1).join();
139 target = target.slice(1); 159 target = target.slice(1);
140 160
141 var messageToForward = message.replace('+' + target, '').trim(); 161 var messageToForward = message.replace('+' + target, '').trim();
142 if (messageToForward == '') { 162 if (messageToForward == '') {
143 return; 163 return;
144 } 164 }
145 165
146 logger.info('Clean forward to ' + target + ': ' + messageToForward); 166 logger.info('Clean forward to ' + target + ': ' + messageToForward);
147 sendPM(target, messageToForward); 167 sendPM(target, messageToForward);
148 } 168 }
149 } 169 }
150 } 170 }
151 171
172 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger);
173
174
152 YahooMessenger.newInstance(); 175 YahooMessenger.newInstance();
153 YahooMessenger.on('ready', onReady); 176 YahooMessenger.on('ready', onReady);
154 YahooMessenger.on('loginSuccessful', onLoginSuccesful); 177 YahooMessenger.on('loginSuccessful', onLoginSuccesful);
155 YahooMessenger.on('buddyAddRequest', onBuddyAddRequest); 178 YahooMessenger.on('buddyAddRequest', onBuddyAddRequest);
156 YahooMessenger.on('pm', onPM); 179 YahooMessenger.on('pm', onPM);
157 180
158 return YahooMessenger; 181 return YahooMessenger;
159 } 182 }
160 183