Commit 5887365d3aa64972baa4433edb0239023e5999a6

Authored by Adhidarma Hadiwinoto
1 parent 0a76459cbd
Exists in master

verbos

Showing 1 changed file with 1 additions and 0 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.info('onPM()', {data: data}); 48 logger.info('onPM()', {data: data});
49 49
50 var message = striptags(data.message); 50 var message = striptags(data.message);
51 var new_message_hash = data.sender + ': ' + message; 51 var new_message_hash = data.sender + ': ' + message;
52 52
53 if (last_message_hash == new_message_hash) { 53 if (last_message_hash == new_message_hash) {
54 return; 54 return;
55 } 55 }
56 56
57 last_message_hash = new_message_hash; 57 last_message_hash = new_message_hash;
58 ym.sendPM(data.sender, "Pesan anda telah diterima dan akan segera diproses: " + message); 58 ym.sendPM(data.sender, "Pesan anda telah diterima dan akan segera diproses: " + message);
59 59
60 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); 60 forwardMessageToEvo(data.sender, message, formatTimestamp(data.time));
61 } 61 }
62 62
63 function onOfflinePM(data) { 63 function onOfflinePM(data) {
64 logger.info('onOfflinePM()', {data: data}); 64 logger.info('onOfflinePM()', {data: data});
65 sendIgnoreResponse(data.sender, data.message); 65 sendIgnoreResponse(data.sender, data.message);
66 } 66 }
67 67
68 function onBuddyAddRequest(data) { 68 function onBuddyAddRequest(data) {
69 logger.info('onBuddyAddRequest()', {data: data}); 69 logger.info('onBuddyAddRequest()', {data: data});
70 ym.acceptAddBuddy(data.username); 70 ym.acceptAddBuddy(data.username);
71 logger.info('Accept buddy add request: ' + data.username, {data: data}); 71 logger.info('Accept buddy add request: ' + data.username, {data: data});
72 } 72 }
73 73
74 function onHttpIncomingMessage(request, response) { 74 function onHttpIncomingMessage(request, response) {
75 var qs = url.parse(request.url, true).query; 75 var qs = url.parse(request.url, true).query;
76 logger.info("onHttpIncomingMessage()", {qs: qs}); 76 logger.info("onHttpIncomingMessage()", {qs: qs});
77 77
78 var destination = qs.to.replace(config.globals.msisdn_suffix, ''); 78 var destination = qs.to.replace(config.globals.msisdn_suffix, '');
79 logger.info('Sending message to ' + destination + ': ' + qs.msg);
79 ym.sendPM(destination, qs.msg); 80 ym.sendPM(destination, qs.msg);
80 response.end('OK'); 81 response.end('OK');
81 } 82 }
82 83
83 function formatTimestamp(ts) { 84 function formatTimestamp(ts) {
84 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); 85 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
85 return strftime('%F %T', _ts); 86 return strftime('%F %T', _ts);
86 } 87 }
87 88
88 function forwardMessageToEvo(sender, message, ts) { 89 function forwardMessageToEvo(sender, message, ts) {
89 var msisdn = sender + config.globals.msisdn_suffix; 90 var msisdn = sender + config.globals.msisdn_suffix;
90 var opts = { 91 var opts = {
91 url: config.globals.evo_url, 92 url: config.globals.evo_url,
92 qs: { 93 qs: {
93 msg: message, 94 msg: message,
94 msisdn: msisdn, 95 msisdn: msisdn,
95 smsc: config.globals.smsc, 96 smsc: config.globals.smsc,
96 ts: ts 97 ts: ts
97 } 98 }
98 }; 99 };
99 100
100 logger.info("Forwarding message to evo", {request_opts: opts}); 101 logger.info("Forwarding message to evo", {request_opts: opts});
101 request(opts, function(err, response, body) { 102 request(opts, function(err, response, body) {
102 if (err) { 103 if (err) {
103 logger.warn('Error forwarding to evo: ' + err); 104 logger.warn('Error forwarding to evo: ' + err);
104 return; 105 return;
105 } 106 }
106 }); 107 });
107 } 108 }
108 109
109 function createHttpServer() { 110 function createHttpServer() {
110 logger.verbose('createHttpServer()'); 111 logger.verbose('createHttpServer()');
111 112
112 var httpServer = http.createServer(onHttpIncomingMessage); 113 var httpServer = http.createServer(onHttpIncomingMessage);
113 httpServer.listen(config.globals.listen_port, function(){ 114 httpServer.listen(config.globals.listen_port, function(){
114 logger.info("HTTP server listening on " + config.globals.listen_port); 115 logger.info("HTTP server listening on " + config.globals.listen_port);
115 }); 116 });
116 } 117 }
117 118
118 createHttpServer(); 119 createHttpServer();
119 ym.on('ready', onReady); 120 ym.on('ready', onReady);
120 ym.on('loginSuccessful', onLoginSuccessful); 121 ym.on('loginSuccessful', onLoginSuccessful);
121 ym.on('pm', onPm); 122 ym.on('pm', onPm);
122 ym.on('buddyAddRequest', onBuddyAddRequest); 123 ym.on('buddyAddRequest', onBuddyAddRequest);
123 124