Commit 14addc222c6b1022f1ee5290f0ca131684921537

Authored by Adhidarma Hadiwinoto
1 parent 7ce81fc753
Exists in master

typo

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

1 var request = require('request'); 1 var request = require('request');
2 var http = require('http'); 2 var http = require('http');
3 var url = require('url'); 3 var url = require('url');
4 var fs = require('fs'); 4 var fs = require('fs');
5 var ini = require('ini'); 5 var ini = require('ini');
6 var strftime = require('strftime'); 6 var strftime = require('strftime');
7 var xmpp = require('simple-xmpp'); 7 var xmpp = require('simple-xmpp');
8 var winston = require('winston'); 8 var winston = require('winston');
9 9
10 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 10 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
11 11
12 var webadmin = require('./webadmin'); 12 var webadmin = require('./webadmin');
13 13
14 var warming_up = true; 14 var warming_up = true;
15 15
16 var log_level = 'info'; 16 var log_level = 'info';
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 function pingMySelf() { 39 function pingMySelf() {
40 if (warming_up) { 40 if (warming_up) {
41 return; 41 return;
42 } 42 }
43 43
44 sendMessage(config.globals.jid.replace(/\/.*/, ''), "PING " + strftime('%F %T', new Date())); 44 sendMessage(config.globals.jid.replace(/\/.*/, ''), "PING " + strftime('%F %T', new Date()));
45 } 45 }
46 46
47 function xmppConnect() { 47 function xmppConnect() {
48 logger.info('Connecting to XMPP server'); 48 logger.info('Connecting to XMPP server');
49 49
50 xmpp.connect({ 50 xmpp.connect({
51 jid: config.globals.jid, 51 jid: config.globals.jid,
52 password: config.globals.password, 52 password: config.globals.password,
53 }); 53 });
54 54
55 // check for incoming subscription requests 55 // check for incoming subscription requests
56 xmpp.getRoster(); 56 xmpp.getRoster();
57 } 57 }
58 58
59 function onHttpIncomingMessage(request, response) { 59 function onHttpIncomingMessage(request, response) {
60 var qs = url.parse(request.url, true).query; 60 var qs = url.parse(request.url, true).query;
61 logger.verbose("onHttpIncomingMessage()", {qs: qs}); 61 logger.verbose("onHttpIncomingMessage()", {qs: qs});
62 62
63 //logger.info('Sending xmpp message from ' + config.globals.jid + ' to ' + qs.to + ': ' + qs.msg); 63 //logger.info('Sending xmpp message from ' + config.globals.jid + ' to ' + qs.to + ': ' + qs.msg);
64 sendMessage(qs.to, qs.msg); 64 sendMessage(qs.to, qs.msg);
65 response.end('OK'); 65 response.end('OK');
66 } 66 }
67 67
68 function createHttpListener() { 68 function createHttpListener() {
69 69
70 var httpServer = http.createServer(function(request,response){ 70 var httpServer = http.createServer(function(request,response){
71 71
72 var qs = url.parse(request.url, true).query; 72 var qs = url.parse(request.url, true).query;
73 logger.verbose('Incoming message from EVO', {qs: qs}); 73 logger.verbose('Incoming message from EVO', {qs: qs});
74 response.end('OK'); 74 response.end('OK');
75 75
76 sendMessage(qs.to, qs.msg); 76 sendMessage(qs.to, qs.msg);
77 }); 77 });
78 78
79 httpServer.listen(config.globals.listen_port, function(){ 79 httpServer.listen(config.globals.listen_port, function(){
80 logger.info("HTTP server listening on " + config.globals.listen_port); 80 logger.info("HTTP server listening on " + config.globals.listen_port);
81 }) 81 })
82 } 82 }
83 83
84 function sendMessage(destination, message) { 84 function sendMessage(destination, message) {
85 if (destination != config.globals.jid.replace(/\/.*/, '')) { 85 if (destination != config.globals.jid.replace(/\/.*/, '')) {
86 logger.info('Sending xmpp message', {from: config.globals.jid, to: destination, message: message}); 86 logger.info('Sending xmpp message', {from: config.globals.jid, to: destination, message: message});
87 } 87 }
88 88
89 xmpp.send(destination, message); 89 xmpp.send(destination, message);
90 } 90 }
91 91
92 function reportToEvo(from, message) { 92 function reportToEvo(from, message) {
93 var opts = { 93 var opts = {
94 url: config.globals.evo_url, 94 url: config.globals.evo_url,
95 qs: { 95 qs: {
96 msg: message, 96 msg: message,
97 msisdn: from, 97 msisdn: from,
98 smsc: config.globals.smsc, 98 smsc: config.globals.smsc,
99 ts: strftime('%F %T'), 99 ts: strftime('%F %T'),
100 } 100 }
101 }; 101 };
102 102
103 logger.verbose("Forwarding message to evo", {request_opts: opts}); 103 logger.verbose("Forwarding message to evo", {request_opts: opts});
104 request(opts, function(err, response, body) { 104 request(opts, function(err, response, body) {
105 if (err) { 105 if (err) {
106 sendMessage(from, 'Gagal meneruskan pesan ke server. Silahkan diulang beberapa saat lagi: ' + message); 106 sendMessage(from, 'Gagal meneruskan pesan ke server. Silahkan diulang beberapa saat lagi: ' + message);
107 logger.warn('Error forwarding to evo: ' + err); 107 logger.warn('Error forwarding to evo: ' + err);
108 return; 108 return;
109 } 109 }
110 }); 110 });
111 } 111 }
112 112
113 xmpp.on('close', function() { 113 xmpp.on('close', function() {
114 logger.warn(config.globals.jid + ' disconected from XMPP server'); 114 logger.warn(config.globals.jid + ' disconected from XMPP server');
115 setTimeout(xmppConnect, 10 * 1000); 115 setTimeout(xmppConnect, 10 * 1000);
116 }); 116 });
117 117
118 xmpp.on('online', function(data) { 118 xmpp.on('online', function(data) {
119 logger.info('XMPP online', {data: data}); 119 logger.info('XMPP online', {data: data});
120 logger.info('Connected with JID: ' + data.jid.user); 120 logger.info('Connected with JID: ' + data.jid.user);
121 121
122 setTimeout(function() { 122 setTimeout(function() {
123 warming_up = false; 123 warming_up = false;
124 logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses'); 124 logger.info('BOT selesai warming up, pesan-pesan selanjutnya akan diproses');
125 }, config.globals.warming_up); 125 }, config.globals.warming_up);
126 }); 126 });
127 127
128 xmpp.on('chat', function(from, message) { 128 xmpp.on('chat', function(from, message) {
129 if (from == config.globals.jid.replace(/\/.*/, '')) { 129 if (from == config.globals.jid.replace(/\/.*/, '')) {
130 return; 130 return;
131 } 131 }
132 132
133 if (config.globals.blacklists) { 133 if (config.globals.blacklists) {
134 blaclists = config.globals.blacklists.split(','); 134 blacklists = config.globals.blacklists.split(',');
135 if (blacklists.indexOf(from.toLowerCase()) >= 0) { 135 if (blacklists.indexOf(from.toLowerCase()) >= 0) {
136 return; 136 return;
137 } 137 }
138 } 138 }
139 139
140 logger.info('Incoming message via XMPP ', {to: config.globals.jid, from: from, message: message}); 140 logger.info('Incoming message via XMPP ', {to: config.globals.jid, from: from, message: message});
141 141
142 if (warming_up) { 142 if (warming_up) {
143 logger.info('BOT masih dalam tahap warming up, abaikan pesan'); 143 logger.info('BOT masih dalam tahap warming up, abaikan pesan');
144 var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message; 144 var response_message = 'Pesan diabaikan. Silahkan diulang kembali: ' + message;
145 sendMessage(from, response_message); 145 sendMessage(from, response_message);
146 return; 146 return;
147 } 147 }
148 148
149 var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message; 149 var response_message = 'Pesan anda telah diterima dan akan segera diproses: ' + message;
150 sendMessage(from, response_message); 150 sendMessage(from, response_message);
151 151
152 reportToEvo(from, message); 152 reportToEvo(from, message);
153 }); 153 });
154 154
155 xmpp.on('error', function(err) { 155 xmpp.on('error', function(err) {
156 logger.warn('XMPP error, terminating in 3 secs', {err: err}); 156 logger.warn('XMPP error, terminating in 3 secs', {err: err});
157 setTimeout(process.exit, 3000, 1); 157 setTimeout(process.exit, 3000, 1);
158 }); 158 });
159 159
160 xmpp.on('subscribe', function(from) { 160 xmpp.on('subscribe', function(from) {
161 logger.warn('XMPP subscribe request from ' + from); 161 logger.warn('XMPP subscribe request from ' + from);
162 xmpp.acceptSubscription(from); 162 xmpp.acceptSubscription(from);
163 }); 163 });
164 164
165 createHttpListener(); 165 createHttpListener();
166 webadmin.init({config: config, logger: logger}); 166 webadmin.init({config: config, logger: logger});
167 xmppConnect(); 167 xmppConnect();
168 168
169 setInterval(pingMySelf, 60000); 169 setInterval(pingMySelf, 60000);
170 170