Commit a0d0965f8fd36f1cd83d44cdb1b45579ec3bf9e2

Authored by Adhidarma Hadiwinoto
1 parent 94ae1cf187
Exists in master

bug fixed

Showing 1 changed file with 2 additions and 2 deletions Inline Diff

1 var http = require('http'); 1 var http = require('http');
2 var url = require('url'); 2 var url = require('url');
3 var winston = require('winston'); 3 var winston = require('winston');
4 var strftime = require('strftime'); 4 var strftime = require('strftime');
5 var strptime = require('micro-strptime').strptime; 5 var strptime = require('micro-strptime').strptime;
6 var request = require('request'); 6 var request = require('request');
7 var striptags = require('striptags'); 7 var striptags = require('striptags');
8 var fs = require('fs'); 8 var fs = require('fs');
9 var ini = require('ini'); 9 var ini = require('ini');
10 10
11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 11 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
12 12
13 var last_message_hash; 13 var last_message_hash;
14 14
15 var logger = new (winston.Logger)({ 15 var logger = new (winston.Logger)({
16 transports: [ 16 transports: [
17 new (winston.transports.Console)({ 17 new (winston.transports.Console)({
18 timestamp: function() { 18 timestamp: function() {
19 return strftime('%F %T', new Date()); 19 return strftime('%F %T', new Date());
20 } 20 }
21 }), 21 }),
22 new (winston.transports.DailyRotateFile)({ 22 new (winston.transports.DailyRotateFile)({
23 filename: __dirname + '/logs/log', 23 filename: __dirname + '/logs/log',
24 timestamp: function() { 24 timestamp: function() {
25 return strftime('%F %T', new Date()); 25 return strftime('%F %T', new Date());
26 } 26 }
27 }) 27 })
28 ] 28 ]
29 }); 29 });
30 30
31 31
32 var ym = require('yahoomessenger'); 32 var ym = require('yahoomessenger');
33 ym.newInstance(); 33 ym.newInstance();
34 34
35 function onReady(){ 35 function onReady(){
36 ym.login(config.globals.username, config.globals.password); 36 ym.login(config.globals.username, config.globals.password);
37 } 37 }
38 38
39 function onLoginSuccessful(data) { 39 function onLoginSuccessful(data) {
40 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); 40 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data});
41 } 41 }
42 42
43 function sendIgnoreResponse(destination, message) { 43 function sendIgnoreResponse(destination, message) {
44 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); 44 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
45 } 45 }
46 46
47 function onPm(data) { 47 function onPm(data) {
48 logger.verbose('onPM()', {data: data}); 48 logger.verbose('onPM()', {data: data});
49 49
50 var message = striptags(data.message); 50 var message = striptags(data.message);
51 /* 51 /*
52 var new_message_hash = data.sender + ': ' + message; 52 var new_message_hash = data.sender + ': ' + message;
53 53
54 if (last_message_hash == new_message_hash) { 54 if (last_message_hash == new_message_hash) {
55 return; 55 return;
56 } 56 }
57 last_message_hash = new_message_hash;
57 */ 58 */
58 59
59 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; 60 var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:";
60 if (config.globals.greeting_suffix) { 61 if (config.globals.greeting_suffix) {
61 greeting_suffix = config.globals.greeting_suffix; 62 greeting_suffix = config.globals.greeting_suffix;
62 } 63 }
63 64
64 last_message_hash = new_message_hash;
65 ym.sendPM(data.sender, greeting_suffix + ' ' + message); 65 ym.sendPM(data.sender, greeting_suffix + ' ' + message);
66 66
67 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); 67 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time));
68 } 68 }
69 69
70 function onOfflinePM(data) { 70 function onOfflinePM(data) {
71 logger.verbose('onOfflinePM()', {data: data}); 71 logger.verbose('onOfflinePM()', {data: data});
72 sendIgnoreResponse(data.sender, data.message); 72 sendIgnoreResponse(data.sender, data.message);
73 } 73 }
74 74
75 function onBuddyAddRequest(data) { 75 function onBuddyAddRequest(data) {
76 logger.info('onBuddyAddRequest()', {data: data}); 76 logger.info('onBuddyAddRequest()', {data: data});
77 ym.acceptAddBuddy(data.username); 77 ym.acceptAddBuddy(data.username);
78 logger.info('Accept buddy add request: ' + data.username, {data: data}); 78 logger.info('Accept buddy add request: ' + data.username, {data: data});
79 } 79 }
80 80
81 function onHttpIncomingMessage(request, response) { 81 function onHttpIncomingMessage(request, response) {
82 var qs = url.parse(request.url, true).query; 82 var qs = url.parse(request.url, true).query;
83 logger.info("onHttpIncomingMessage()", {qs: qs}); 83 logger.info("onHttpIncomingMessage()", {qs: qs});
84 84
85 var destination = qs.to.replace(config.globals.msisdn_suffix, ''); 85 var destination = qs.to.replace(config.globals.msisdn_suffix, '');
86 logger.info('Sending message to ' + destination + ': ' + qs.msg); 86 logger.info('Sending message to ' + destination + ': ' + qs.msg);
87 ym.sendPM(destination, qs.msg); 87 ym.sendPM(destination, qs.msg);
88 response.end('OK'); 88 response.end('OK');
89 } 89 }
90 90
91 function formatTimestamp(ts) { 91 function formatTimestamp(ts) {
92 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); 92 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
93 return strftime('%F %T', _ts); 93 return strftime('%F %T', _ts);
94 } 94 }
95 95
96 function forwardMessageToEvo(sender, message, ts) { 96 function forwardMessageToEvo(sender, message, ts) {
97 var msisdn = sender + config.globals.msisdn_suffix; 97 var msisdn = sender + config.globals.msisdn_suffix;
98 var opts = { 98 var opts = {
99 url: config.globals.evo_url, 99 url: config.globals.evo_url,
100 qs: { 100 qs: {
101 msg: message, 101 msg: message,
102 msisdn: msisdn, 102 msisdn: msisdn,
103 smsc: config.globals.smsc, 103 smsc: config.globals.smsc,
104 ts: ts 104 ts: ts
105 } 105 }
106 }; 106 };
107 107
108 logger.info("Forwarding message to evo", {request_opts: opts}); 108 logger.info("Forwarding message to evo", {request_opts: opts});
109 request(opts, function(err, response, body) { 109 request(opts, function(err, response, body) {
110 if (err) { 110 if (err) {
111 logger.warn('Error forwarding to evo: ' + err); 111 logger.warn('Error forwarding to evo: ' + err);
112 return; 112 return;
113 } 113 }
114 }); 114 });
115 } 115 }
116 116
117 function createHttpServer() { 117 function createHttpServer() {
118 logger.verbose('createHttpServer()'); 118 logger.verbose('createHttpServer()');
119 119
120 var httpServer = http.createServer(onHttpIncomingMessage); 120 var httpServer = http.createServer(onHttpIncomingMessage);
121 httpServer.listen(config.globals.listen_port, function(){ 121 httpServer.listen(config.globals.listen_port, function(){
122 logger.info("HTTP server listening on " + config.globals.listen_port); 122 logger.info("HTTP server listening on " + config.globals.listen_port);
123 }); 123 });
124 } 124 }
125 125
126 createHttpServer(); 126 createHttpServer();
127 ym.on('ready', onReady); 127 ym.on('ready', onReady);
128 ym.on('loginSuccessful', onLoginSuccessful); 128 ym.on('loginSuccessful', onLoginSuccessful);
129 ym.on('pm', onPm); 129 ym.on('pm', onPm);
130 ym.on('buddyAddRequest', onBuddyAddRequest); 130 ym.on('buddyAddRequest', onBuddyAddRequest);