Commit 2833225fe1b8021e6d1ba8b6cd6d722a5cf8dae9
0 parents
Exists in
master
initial files
Showing 5 changed files with 202 additions and 0 deletions Side-by-side Diff
.gitignore
... | ... | @@ -0,0 +1 @@ |
1 | +config.ini |
config.sample.ini
... | ... | @@ -0,0 +1,17 @@ |
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 |
... | ... | @@ -0,0 +1,22 @@ |
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 |
httpserver.js
... | ... | @@ -0,0 +1,20 @@ |
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; |
index.js
... | ... | @@ -0,0 +1,142 @@ |
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); |