Commit d45f03c517d0f644fcb00a9923a186903bc86690

Authored by Adhidarma Hadiwinoto
1 parent 7458497759
Exists in master

trim jid

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