Commit 2833225fe1b8021e6d1ba8b6cd6d722a5cf8dae9

Authored by Adhidarma Hadiwinoto
0 parents
Exists in master

initial files

Showing 5 changed files with 202 additions and 0 deletions Inline Diff

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