Commit a064bc8dfa30d3b3dfda5a3bd1d2d9b87469da04

Authored by Adhidarma Hadiwinoto
1 parent 3d3a86f54f
Exists in master

onLoginError

Showing 1 changed file with 6 additions and 0 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) {
52 logger.warn('Login error', {data: data});
53 }
54
55
51 function sendIgnoreResponse(destination, message) { 56 function sendIgnoreResponse(destination, message) {
52 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);
53 } 58 }
54 59
55 function onPm(data) { 60 function onPm(data) {
56 logger.info('onPM()', {data: data}); 61 logger.info('onPM()', {data: data});
57 62
58 var message = striptags(data.message); 63 var message = striptags(data.message);
59 64
60 var message_hash = data.sender + ': ' + data.message; 65 var message_hash = data.sender + ': ' + data.message;
61 if (message_hash == last_message_hash) { 66 if (message_hash == last_message_hash) {
62 logger.info('Ignoring duplicate message', {data: data}); 67 logger.info('Ignoring duplicate message', {data: data});
63 return; 68 return;
64 } 69 }
65 last_message_hash = message_hash; 70 last_message_hash = message_hash;
66 71
67 var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:"; 72 var greeting_prefix = "Pesan anda telah diterima dan akan segera diproses:";
68 if (config.globals.greeting_prefix) { 73 if (config.globals.greeting_prefix) {
69 greeting_prefix = config.globals.greeting_prefix; 74 greeting_prefix = config.globals.greeting_prefix;
70 } 75 }
71 76
72 ym.sendPM(data.sender, greeting_prefix + ' ' + message); 77 ym.sendPM(data.sender, greeting_prefix + ' ' + message);
73 78
74 forwardMessageToAAA(data.sender, message); 79 forwardMessageToAAA(data.sender, message);
75 } 80 }
76 81
77 function onOfflinePM(data) { 82 function onOfflinePM(data) {
78 logger.verbose('onOfflinePM()', {data: data}); 83 logger.verbose('onOfflinePM()', {data: data});
79 sendIgnoreResponse(data.sender, data.message); 84 sendIgnoreResponse(data.sender, data.message);
80 } 85 }
81 86
82 function onBuddyAddRequest(data) { 87 function onBuddyAddRequest(data) {
83 logger.info('onBuddyAddRequest()', {data: data}); 88 logger.info('onBuddyAddRequest()', {data: data});
84 ym.acceptAddBuddy(data.username); 89 ym.acceptAddBuddy(data.username);
85 logger.info('Accept buddy add request: ' + data.username, {data: data}); 90 logger.info('Accept buddy add request: ' + data.username, {data: data});
86 } 91 }
87 92
88 function onHttpIncomingMessage(request, response) { 93 function onHttpIncomingMessage(request, response) {
89 var qs = url.parse(request.url, true).query; 94 var qs = url.parse(request.url, true).query;
90 logger.info("onHttpIncomingMessage()", {qs: qs}); 95 logger.info("onHttpIncomingMessage()", {qs: qs});
91 response.end('OK'); 96 response.end('OK');
92 97
93 logger.info('Sending message to ' + qs.PhoneNumber + ': ' + qs.text); 98 logger.info('Sending message to ' + qs.PhoneNumber + ': ' + qs.text);
94 ym.sendPM(qs.to, qs.msg); 99 ym.sendPM(qs.to, qs.msg);
95 100
96 } 101 }
97 102
98 function formatTimestamp(ts) { 103 function formatTimestamp(ts) {
99 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');
100 return strftime('%F %T', _ts); 105 return strftime('%F %T', _ts);
101 } 106 }
102 107
103 function forwardMessageToAAA(sender, message) { 108 function forwardMessageToAAA(sender, message) {
104 var request_opts = { 109 var request_opts = {
105 url: config.globals.aaa, 110 url: config.globals.aaa,
106 qs: { 111 qs: {
107 PhoneNumber: sender, 112 PhoneNumber: sender,
108 Text: message, 113 Text: message,
109 Res_Port: config.globals.listen_port, 114 Res_Port: config.globals.listen_port,
110 SMSCID: config.globals.smscid 115 SMSCID: config.globals.smscid
111 } 116 }
112 }; 117 };
113 118
114 request(request_opts, function(err, response, body) { 119 request(request_opts, function(err, response, body) {
115 if (err) { 120 if (err) {
116 logger.info('Request error: ' + err); 121 logger.info('Request error: ' + err);
117 return; 122 return;
118 } 123 }
119 124
120 logger.info('Response: ' + response); 125 logger.info('Response: ' + response);
121 logger.info('Body: ' + body); 126 logger.info('Body: ' + body);
122 127
123 }); 128 });
124 } 129 }
125 130
126 function createHttpServer() { 131 function createHttpServer() {
127 logger.verbose('createHttpServer()'); 132 logger.verbose('createHttpServer()');
128 133
129 var httpServer = http.createServer(onHttpIncomingMessage); 134 var httpServer = http.createServer(onHttpIncomingMessage);
130 httpServer.listen(config.globals.listen_port, function(){ 135 httpServer.listen(config.globals.listen_port, function(){
131 logger.info("HTTP server listening on " + config.globals.listen_port); 136 logger.info("HTTP server listening on " + config.globals.listen_port);
132 }); 137 });
133 } 138 }
134 139
135 createHttpServer(); 140 createHttpServer();
136 ym.on('ready', onReady); 141 ym.on('ready', onReady);
137 ym.on('loginSuccessful', onLoginSuccessful); 142 ym.on('loginSuccessful', onLoginSuccessful);
143 ym.on('loginError', onLoginError);
138 ym.on('pm', onPm); 144 ym.on('pm', onPm);
139 ym.on('buddyAddRequest', onBuddyAddRequest); 145 ym.on('buddyAddRequest', onBuddyAddRequest);
140 146
141 setInterval(function() { 147 setInterval(function() {
142 logger.info('Sending keepalive packet'); 148 logger.info('Sending keepalive packet');
143 ym.keepAlive(); 149 ym.keepAlive();
144 }, keepalive_interval); 150 }, keepalive_interval);
145 151