Commit 2833225fe1b8021e6d1ba8b6cd6d722a5cf8dae9
0 parents
Exists in
master
initial files
Showing 5 changed files with 202 additions and 0 deletions Inline Diff
.gitignore
File was created | 1 | config.ini | |
2 |
config.sample.ini
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 |
httpserver.js
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 |
index.js
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 |