Commit 1e27dae2adeea79c7fb813df4d2383f0307d8b0f

Authored by Adhidarma Hadiwinoto
1 parent 0533906628
Exists in master

perbaikan balikan dari smsin

Showing 1 changed file with 1 additions and 1 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 keepalive_interval = 60 * 1000; 13 var keepalive_interval = 60 * 1000;
14 var last_message_hash = ''; 14 var last_message_hash = '';
15 var log_level = 'info'; 15 var log_level = 'info';
16 16
17 if (config.globals.log_level) { 17 if (config.globals.log_level) {
18 log_level = config.globals.log_level; 18 log_level = config.globals.log_level;
19 } 19 }
20 20
21 var logger = new (winston.Logger)({ 21 var logger = new (winston.Logger)({
22 transports: [ 22 transports: [
23 new (winston.transports.Console)({ 23 new (winston.transports.Console)({
24 timestamp: function() { 24 timestamp: function() {
25 return strftime('%F %T', new Date()); 25 return strftime('%F %T', new Date());
26 }, 26 },
27 level: log_level 27 level: log_level
28 }), 28 }),
29 new (winston.transports.DailyRotateFile)({ 29 new (winston.transports.DailyRotateFile)({
30 filename: __dirname + '/logs/log', 30 filename: __dirname + '/logs/log',
31 timestamp: function() { 31 timestamp: function() {
32 return strftime('%F %T', new Date()); 32 return strftime('%F %T', new Date());
33 }, 33 },
34 level: log_level 34 level: log_level
35 }) 35 })
36 ] 36 ]
37 }); 37 });
38 38
39 39
40 var ym = require('yahoomessenger'); 40 var ym = require('yahoomessenger');
41 ym.newInstance(); 41 ym.newInstance();
42 42
43 function onReady(){ 43 function onReady(){
44 ym.login(config.globals.username, config.globals.password); 44 ym.login(config.globals.username, config.globals.password);
45 } 45 }
46 46
47 function onLoginSuccessful(data) { 47 function onLoginSuccessful(data) {
48 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data}); 48 logger.info('Login successful as ' + data.firstname + ' ' + data.lastname + ' (' + data.user_id + ')', {data: data});
49 } 49 }
50 50
51 function onLoginError(data) { 51 function onLoginError(data) {
52 logger.warn('Login error', {data: data}); 52 logger.warn('Login error', {data: data});
53 } 53 }
54 54
55 55
56 function sendIgnoreResponse(destination, message) { 56 function sendIgnoreResponse(destination, message) {
57 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); 57 ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message);
58 } 58 }
59 59
60 function onPm(data) { 60 function onPm(data) {
61 logger.info('onPM()', {data: data}); 61 logger.info('onPM()', {data: data});
62 62
63 var message = striptags(data.message); 63 var message = striptags(data.message);
64 64
65 var message_hash = data.sender + ': ' + data.message; 65 var message_hash = data.sender + ': ' + data.message;
66 if (message_hash == last_message_hash) { 66 if (message_hash == last_message_hash) {
67 logger.info('Ignoring duplicate message', {data: data}); 67 logger.info('Ignoring duplicate message', {data: data});
68 return; 68 return;
69 } 69 }
70 last_message_hash = message_hash; 70 last_message_hash = message_hash;
71 71
72 var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:"; 72 var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:";
73 if (config.globals.greeting_prefix) { 73 if (config.globals.greeting_prefix) {
74 greeting_prefix = config.globals.greeting_prefix; 74 greeting_prefix = config.globals.greeting_prefix;
75 } 75 }
76 76
77 ym.sendPM(data.sender, greeting_prefix + ' ' + message); 77 ym.sendPM(data.sender, greeting_prefix + ' ' + message);
78 78
79 forwardMessageToAAA(data.sender, message); 79 forwardMessageToAAA(data.sender, message);
80 } 80 }
81 81
82 function onOfflinePM(data) { 82 function onOfflinePM(data) {
83 logger.verbose('onOfflinePM()', {data: data}); 83 logger.verbose('onOfflinePM()', {data: data});
84 sendIgnoreResponse(data.sender, data.message); 84 sendIgnoreResponse(data.sender, data.message);
85 } 85 }
86 86
87 function onBuddyAddRequest(data) { 87 function onBuddyAddRequest(data) {
88 logger.info('onBuddyAddRequest()', {data: data}); 88 logger.info('onBuddyAddRequest()', {data: data});
89 ym.acceptAddBuddy(data.username); 89 ym.acceptAddBuddy(data.username);
90 logger.info('Accept buddy add request: ' + data.username, {data: data}); 90 logger.info('Accept buddy add request: ' + data.username, {data: data});
91 } 91 }
92 92
93 function onHttpIncomingMessage(request, response) { 93 function onHttpIncomingMessage(request, response) {
94 var qs = url.parse(request.url, true).query; 94 var qs = url.parse(request.url, true).query;
95 logger.info("onHttpIncomingMessage()", {qs: qs}); 95 logger.info("onHttpIncomingMessage()", {qs: qs});
96 response.end('OK'); 96 response.end('OK');
97 97
98 logger.info('Sending message to ' + qs.PhoneNumber + ': ' + qs.text); 98 logger.info('Sending message to ' + qs.PhoneNumber + ': ' + qs.text);
99 ym.sendPM(qs.to, qs.msg); 99 ym.sendPM(qs.PhoneNumber, qs.text);
100 100
101 } 101 }
102 102
103 function formatTimestamp(ts) { 103 function formatTimestamp(ts) {
104 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); 104 var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z');
105 return strftime('%F %T', _ts); 105 return strftime('%F %T', _ts);
106 } 106 }
107 107
108 function forwardMessageToAAA(sender, message) { 108 function forwardMessageToAAA(sender, message) {
109 var request_opts = { 109 var request_opts = {
110 url: config.globals.aaa, 110 url: config.globals.aaa,
111 qs: { 111 qs: {
112 PhoneNumber: sender, 112 PhoneNumber: sender,
113 Text: message, 113 Text: message,
114 Res_Port: config.globals.listen_port, 114 Res_Port: config.globals.listen_port,
115 SMSCID: config.globals.smscid 115 SMSCID: config.globals.smscid
116 } 116 }
117 }; 117 };
118 logger.verbose('Forward message to AAA', {request_opts: request_opts}); 118 logger.verbose('Forward message to AAA', {request_opts: request_opts});
119 119
120 request(request_opts, function(err, response, body) { 120 request(request_opts, function(err, response, body) {
121 if (err) { 121 if (err) {
122 logger.info('Request error: ' + err); 122 logger.info('Request error: ' + err);
123 return; 123 return;
124 } 124 }
125 125
126 logger.info('Response: ' + response); 126 logger.info('Response: ' + response);
127 logger.info('Body: ' + body); 127 logger.info('Body: ' + body);
128 128
129 }); 129 });
130 } 130 }
131 131
132 function createHttpServer() { 132 function createHttpServer() {
133 logger.verbose('createHttpServer()'); 133 logger.verbose('createHttpServer()');
134 134
135 var httpServer = http.createServer(onHttpIncomingMessage); 135 var httpServer = http.createServer(onHttpIncomingMessage);
136 httpServer.listen(config.globals.listen_port, function(){ 136 httpServer.listen(config.globals.listen_port, function(){
137 logger.info("HTTP server listening on " + config.globals.listen_port); 137 logger.info("HTTP server listening on " + config.globals.listen_port);
138 }); 138 });
139 } 139 }
140 140
141 createHttpServer(); 141 createHttpServer();
142 ym.on('ready', onReady); 142 ym.on('ready', onReady);
143 ym.on('loginSuccessful', onLoginSuccessful); 143 ym.on('loginSuccessful', onLoginSuccessful);
144 ym.on('loginError', onLoginError); 144 ym.on('loginError', onLoginError);
145 ym.on('pm', onPm); 145 ym.on('pm', onPm);
146 ym.on('buddyAddRequest', onBuddyAddRequest); 146 ym.on('buddyAddRequest', onBuddyAddRequest);
147 147
148 setInterval(function() { 148 setInterval(function() {
149 logger.info('Sending keepalive packet'); 149 logger.info('Sending keepalive packet');
150 ym.keepAlive(); 150 ym.keepAlive();
151 }, keepalive_interval); 151 }, keepalive_interval);
152 152