Commit 14addc222c6b1022f1ee5290f0ca131684921537
1 parent
7ce81fc753
Exists in
master
typo
Showing 1 changed file with 1 additions and 1 deletions Inline Diff
index.js
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 |