Commit c15d69c5ad85f5c943bc3bb4afe51f64e4818362

Authored by Adhidarma Hadiwinoto
1 parent ea9cc1e437
Exists in master

isAdmin

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

1 var iniparser = require('iniparser'); 1 var iniparser = require('iniparser');
2 var config = iniparser.parseSync('./config.ini'); 2 var config = iniparser.parseSync('./config.ini');
3 3
4 if (config.yahoomessenger.keepalive_interval == null) { 4 if (config.yahoomessenger.keepalive_interval == null) {
5 config.yahoomessenger.keepalive_interval = 60; 5 config.yahoomessenger.keepalive_interval = 60;
6 } 6 }
7 7
8 var strftime = require('strftime'); 8 var strftime = require('strftime');
9 9
10 var pollingTimer; 10 var pollingTimer;
11 11
12 var lastDataOnPM; 12 var lastDataOnPM;
13 13
14 var logger = require('winston'); 14 var logger = require('winston');
15 logger.remove(logger.transports.Console); 15 logger.remove(logger.transports.Console);
16 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }}); 16 logger.add(logger.transports.Console, { timestamp: function() { return (strftime('%F %T')); }});
17 17
18 var db = require('./db.js'); 18 var db = require('./db.js');
19 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger); 19 db_connection = db.start(config.db.host, config.db.username, config.db.password, config.db.name, logger);
20 20
21 function isAdmin(user) {
22 var admins = config.yahoomessenger.admin.split(',');
23
24 return (admins.indexOf(user) >= 0);
25 }
26
21 function absen() { 27 function absen() {
22 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message); 28 broadcast(config.yahoomessenger.report_to, config.yahoomessenger.report_message);
23 } 29 }
24 30
25 function broadcast(destinations, message) { 31 function broadcast(destinations, message) {
26 var destinations = destinations.split(','); 32 var destinations = destinations.split(',');
27 var destinationCount = destinations.length; 33 var destinationCount = destinations.length;
28 34
29 for (var i=0; i < destinationCount; i++) { 35 for (var i=0; i < destinationCount; i++) {
30 destination = destinations[i] 36 destination = destinations[i]
31 logger.info('Sending message to ' + destination); 37 logger.info('Sending message to ' + destination);
32 YahooMessenger.sendPM(destination, message); 38 YahooMessenger.sendPM(destination, message);
33 } 39 }
34 } 40 }
35 41
36 var keepAliveLoop = function() { 42 var keepAliveLoop = function() {
37 logger.info('Polling loop'); 43 logger.info('Polling loop');
38 44
39 YahooMessenger.keepAlive(); 45 YahooMessenger.keepAlive();
40 46
41 pollingTimer = setTimeout(keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); 47 pollingTimer = setTimeout(keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000);
42 } 48 }
43 49
44 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { 50 function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) {
45 51
46 db_connection.query( 52 db_connection.query(
47 'INSERT INTO messages SET ?', 53 'INSERT INTO messages SET ?',
48 { 54 {
49 transport: 'YAHOO', 55 transport: 'YAHOO',
50 logger: logger_id, 56 logger: logger_id,
51 direction: direction, 57 direction: direction,
52 partner: partner, 58 partner: partner,
53 message: message, 59 message: message,
54 sentdate: sentdate, 60 sentdate: sentdate,
55 }, 61 },
56 62
57 function(err) { 63 function(err) {
58 if (err != null) { 64 if (err != null) {
59 logger.error("Error on inserting messages to DB, error: " + err); 65 logger.error("Error on inserting messages to DB, error: " + err);
60 } 66 }
61 } 67 }
62 ); 68 );
63 } 69 }
64 70
65 var striptags = require('striptags'); 71 var striptags = require('striptags');
66 72
67 var YahooMessenger = require("yahoomessenger"); 73 var YahooMessenger = require("yahoomessenger");
68 YahooMessenger.newInstance(); 74 YahooMessenger.newInstance();
69 75
70 YahooMessenger.on('ready', function onReady(){ 76 YahooMessenger.on('ready', function onReady(){
71 logger.info("Going to online on YM") 77 logger.info("Going to online on YM")
72 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); 78 YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password);
73 }); 79 });
74 80
75 YahooMessenger.on('loginSuccessful', function onLoginSuccessful(data){ 81 YahooMessenger.on('loginSuccessful', function onLoginSuccessful(data){
76 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); 82 logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')');
77 83
78 if (config.yahoomessenger.status) { 84 if (config.yahoomessenger.status) {
79 logger.info('Set status to: ' + config.yahoomessenger.status); 85 logger.info('Set status to: ' + config.yahoomessenger.status);
80 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); 86 YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status);
81 }; 87 };
82 88
83 absen(); 89 absen();
84 90
85 keepAliveLoop(); 91 keepAliveLoop();
86 }); 92 });
87 93
88 YahooMessenger.on('pm', function(data){ 94 YahooMessenger.on('pm', function(data){
89 95
90 if (config.globals.debug == 1) { 96 if (config.globals.debug == 1) {
91 console.log(data); 97 console.log(data);
92 } 98 }
93 99
94 if (lastDataOnPM != null) { 100 if (lastDataOnPM != null) {
95 if ((lastDataOnPM.sender == data.sender) && (lastDataOnPM.message == data.message)) { 101 if ((lastDataOnPM.sender == data.sender) && (lastDataOnPM.message == data.message)) {
96 //logger.info('Ignoring duplicate message detected');
97 return; 102 return;
98 } 103 }
99 } 104 }
100 105
101 lastDataOnPM = data; 106 lastDataOnPM = data;
102 107
103 var message = striptags(data.message) 108 var message = striptags(data.message)
104 //console.log("message: " + message);
105 109
106 logger.info('New message received from ' + data.user_id + ': ' + message); 110 logger.info('New message received from ' + data.sender + ': ' + message);
111
112 if (isAdmin(data.sender)) {
113 logger.info('Sender (' + data.sender + ') is an admin');
114 }
107 115
108 var sentdate = Date.parse(data.time); 116 var sentdate = Date.parse(data.time);
109 var strftime = require('strftime'); 117 var strftime = require('strftime');
110 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate); 118 sentdate = strftime('%Y-%m-%d %H:%M:%S', sentdate);
111 119
112 insertMessages( 120 insertMessages(
113 db_connection, 121 db_connection,
114 data.user_id, 122 data.user_id,
115 'IN', 123 'IN',
116 data.sender, 124 data.sender,
117 message, 125 message,
118 sentdate 126 sentdate
119 ); 127 );
120 128
121 broadcast(config.yahoomessenger.report_to, data.sender + '-> ' + message); 129 broadcast(config.yahoomessenger.report_to, data.sender + '-> ' + message);
122 130
123 }); 131 });
124 132
125 YahooMessenger.on('buddyAddRequest', function(data) { 133 YahooMessenger.on('buddyAddRequest', function(data) {
126 logger.info("Got request to add buddy from " + data.username); 134 logger.info("Got request to add buddy from " + data.username);
127 YahooMessenger.acceptAddBuddy(data.username); 135 YahooMessenger.acceptAddBuddy(data.username);
128 }); 136 });
129 137
130 function isSenderIsAdmin(ym, data) {
131
132 }
133
134 var http = require('http'); 138 var http = require('http');
135 var url = require('url'); 139 var url = require('url');
136 140
137 function onHttpRequest(request, response) { 141 function onHttpRequest(request, response) {
138 var pathname = url.parse(request.url).pathname; 142 var pathname = url.parse(request.url).pathname;
139 logger.info('Got HTTP request on ' + pathname); 143 logger.info('Got HTTP request on ' + pathname);
140 144
141 var queries = url.parse(request.url, true).query; 145 var queries = url.parse(request.url, true).query;
142 console.log(queries); 146 console.log(queries);
143 147
144 response.writeHead(200, {"Content-Type": "text/html"}); 148 response.writeHead(200, {"Content-Type": "text/html"});
145 response.write("Hello"); 149 response.write("Hello");