Commit 64264e1614dfcd38624c068f87e1a107dda728c2
1 parent
a4ed48afba
Exists in
master
log level
Showing 1 changed file with 10 additions and 2 deletions Inline Diff
index.js
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 = 2 * 60 * 1000; | 13 | var keepalive_interval = 2 * 60 * 1000; |
14 | 14 | ||
15 | var log_level = 'info'; | ||
16 | |||
17 | if (config.globals.log_level) { | ||
18 | log_level = config.globals.log_level; | ||
19 | } | ||
20 | |||
15 | var logger = new (winston.Logger)({ | 21 | var logger = new (winston.Logger)({ |
16 | transports: [ | 22 | transports: [ |
17 | new (winston.transports.Console)({ | 23 | new (winston.transports.Console)({ |
18 | timestamp: function() { | 24 | timestamp: function() { |
19 | return strftime('%F %T', new Date()); | 25 | return strftime('%F %T', new Date()); |
20 | } | 26 | }, |
27 | level: log_level | ||
21 | }), | 28 | }), |
22 | new (winston.transports.DailyRotateFile)({ | 29 | new (winston.transports.DailyRotateFile)({ |
23 | filename: __dirname + '/logs/log', | 30 | filename: __dirname + '/logs/log', |
24 | timestamp: function() { | 31 | timestamp: function() { |
25 | return strftime('%F %T', new Date()); | 32 | return strftime('%F %T', new Date()); |
26 | } | 33 | }, |
34 | level: log_level | ||
27 | }) | 35 | }) |
28 | ] | 36 | ] |
29 | }); | 37 | }); |
30 | 38 | ||
31 | 39 | ||
32 | var ym = require('yahoomessenger'); | 40 | var ym = require('yahoomessenger'); |
33 | ym.newInstance(); | 41 | ym.newInstance(); |
34 | 42 | ||
35 | function onReady(){ | 43 | function onReady(){ |
36 | ym.login(config.globals.username, config.globals.password); | 44 | ym.login(config.globals.username, config.globals.password); |
37 | } | 45 | } |
38 | 46 | ||
39 | function onLoginSuccessful(data) { | 47 | function onLoginSuccessful(data) { |
40 | 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}); |
41 | } | 49 | } |
42 | 50 | ||
43 | function sendIgnoreResponse(destination, message) { | 51 | function sendIgnoreResponse(destination, message) { |
44 | ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); | 52 | ym.sendPM(destination, "Pesan anda diabaikan, silahkan diulang beberapa saat lagi jika diperlukan: " + message); |
45 | } | 53 | } |
46 | 54 | ||
47 | function onPm(data) { | 55 | function onPm(data) { |
48 | logger.verbose('onPM()', {data: data}); | 56 | logger.verbose('onPM()', {data: data}); |
49 | 57 | ||
50 | var message = striptags(data.message); | 58 | var message = striptags(data.message); |
51 | var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; | 59 | var greeting_suffix = "Pesan anda telah diterima dan akan segera diproses:"; |
52 | if (config.globals.greeting_prefix) { | 60 | if (config.globals.greeting_prefix) { |
53 | greeting_suffix = config.globals.greeting_prefix; | 61 | greeting_suffix = config.globals.greeting_prefix; |
54 | } | 62 | } |
55 | 63 | ||
56 | ym.sendPM(data.sender, greeting_suffix + ' ' + message); | 64 | ym.sendPM(data.sender, greeting_suffix + ' ' + message); |
57 | 65 | ||
58 | forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); | 66 | forwardMessageToEvo(data.sender, message, formatTimestamp(data.time)); |
59 | } | 67 | } |
60 | 68 | ||
61 | function onOfflinePM(data) { | 69 | function onOfflinePM(data) { |
62 | logger.verbose('onOfflinePM()', {data: data}); | 70 | logger.verbose('onOfflinePM()', {data: data}); |
63 | sendIgnoreResponse(data.sender, data.message); | 71 | sendIgnoreResponse(data.sender, data.message); |
64 | } | 72 | } |
65 | 73 | ||
66 | function onBuddyAddRequest(data) { | 74 | function onBuddyAddRequest(data) { |
67 | logger.info('onBuddyAddRequest()', {data: data}); | 75 | logger.info('onBuddyAddRequest()', {data: data}); |
68 | ym.acceptAddBuddy(data.username); | 76 | ym.acceptAddBuddy(data.username); |
69 | logger.info('Accept buddy add request: ' + data.username, {data: data}); | 77 | logger.info('Accept buddy add request: ' + data.username, {data: data}); |
70 | } | 78 | } |
71 | 79 | ||
72 | function onHttpIncomingMessage(request, response) { | 80 | function onHttpIncomingMessage(request, response) { |
73 | var qs = url.parse(request.url, true).query; | 81 | var qs = url.parse(request.url, true).query; |
74 | logger.info("onHttpIncomingMessage()", {qs: qs}); | 82 | logger.info("onHttpIncomingMessage()", {qs: qs}); |
75 | 83 | ||
76 | var destination = qs.to.replace(config.globals.msisdn_suffix, ''); | 84 | var destination = qs.to.replace(config.globals.msisdn_suffix, ''); |
77 | logger.info('Sending message to ' + destination + ': ' + qs.msg); | 85 | logger.info('Sending message to ' + destination + ': ' + qs.msg); |
78 | ym.sendPM(destination, qs.msg); | 86 | ym.sendPM(destination, qs.msg); |
79 | response.end('OK'); | 87 | response.end('OK'); |
80 | } | 88 | } |
81 | 89 | ||
82 | function formatTimestamp(ts) { | 90 | function formatTimestamp(ts) { |
83 | var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); | 91 | var _ts = strptime(ts, '%A %b %d %Y %H:%M:%S GMT%z'); |
84 | return strftime('%F %T', _ts); | 92 | return strftime('%F %T', _ts); |
85 | } | 93 | } |
86 | 94 | ||
87 | function forwardMessageToEvo(sender, message, ts) { | 95 | function forwardMessageToEvo(sender, message, ts) { |
88 | var msisdn = sender + config.globals.msisdn_suffix; | 96 | var msisdn = sender + config.globals.msisdn_suffix; |
89 | var opts = { | 97 | var opts = { |
90 | url: config.globals.evo_url, | 98 | url: config.globals.evo_url, |
91 | qs: { | 99 | qs: { |
92 | msg: message, | 100 | msg: message, |
93 | msisdn: msisdn, | 101 | msisdn: msisdn, |
94 | smsc: config.globals.smsc, | 102 | smsc: config.globals.smsc, |
95 | ts: ts | 103 | ts: ts |
96 | } | 104 | } |
97 | }; | 105 | }; |
98 | 106 | ||
99 | logger.info("Forwarding message to evo", {request_opts: opts}); | 107 | logger.info("Forwarding message to evo", {request_opts: opts}); |
100 | request(opts, function(err, response, body) { | 108 | request(opts, function(err, response, body) { |
101 | if (err) { | 109 | if (err) { |
102 | logger.warn('Error forwarding to evo: ' + err); | 110 | logger.warn('Error forwarding to evo: ' + err); |
103 | return; | 111 | return; |
104 | } | 112 | } |
105 | }); | 113 | }); |
106 | } | 114 | } |
107 | 115 | ||
108 | function createHttpServer() { | 116 | function createHttpServer() { |
109 | logger.verbose('createHttpServer()'); | 117 | logger.verbose('createHttpServer()'); |
110 | 118 | ||
111 | var httpServer = http.createServer(onHttpIncomingMessage); | 119 | var httpServer = http.createServer(onHttpIncomingMessage); |
112 | httpServer.listen(config.globals.listen_port, function(){ | 120 | httpServer.listen(config.globals.listen_port, function(){ |
113 | logger.info("HTTP server listening on " + config.globals.listen_port); | 121 | logger.info("HTTP server listening on " + config.globals.listen_port); |
114 | }); | 122 | }); |
115 | } | 123 | } |
116 | 124 | ||
117 | createHttpServer(); | 125 | createHttpServer(); |
118 | ym.on('ready', onReady); | 126 | ym.on('ready', onReady); |
119 | ym.on('loginSuccessful', onLoginSuccessful); | 127 | ym.on('loginSuccessful', onLoginSuccessful); |
120 | ym.on('pm', onPm); | 128 | ym.on('pm', onPm); |
121 | ym.on('buddyAddRequest', onBuddyAddRequest); | 129 | ym.on('buddyAddRequest', onBuddyAddRequest); |
122 | 130 | ||
123 | setInterval(function() { | 131 | setInterval(function() { |
124 | logger.info('Sending keepalive packet'); | 132 | logger.info('Sending keepalive packet'); |
125 | ym.keepAlive(); | 133 | ym.keepAlive(); |
126 | }, keepalive_interval); | 134 | }, keepalive_interval); |
127 | 135 |