diff --git a/index.js b/index.js index c37a94e..2ebe56f 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,8 @@ var iniparser = require('iniparser'); var config = iniparser.parseSync('./config.ini'); +var keepAliveTimer; + if (config.yahoomessenger.keepalive_interval == null) { config.yahoomessenger.keepalive_interval = 60; } @@ -22,10 +24,38 @@ function isAdmin(user) { return (admins.indexOf(user) >= 0); } +function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { + + db_connection.query( + 'INSERT INTO messages SET ?', + { + transport: 'YAHOO', + logger: logger_id, + direction: direction, + partner: partner, + message: message, + sentdate: sentdate, + }, + + function(err) { + if (err != null) { + logger.error("Error on inserting messages to DB, error: " + err); + } + } + ); +} + +var striptags = require('striptags'); + +var YahooMessenger = require("yahoomessenger"); +YahooMessenger.newInstance(); + function sendPM(destination, message) { - try { - logger.info("Sending to " + destination + ": " + message); + logger.info("Sending to " + destination + ": " + message); + + //try { YahooMessenger.sendPM(destination, message); + /* } catch (e) { logger.info("Something wrong"); @@ -36,7 +66,7 @@ function sendPM(destination, message) { } return true; - + */ } function broadcast(destinations, message, exclude) { @@ -56,8 +86,9 @@ function broadcast(destinations, message, exclude) { var _keepAliveLoop = function() { logger.info('Keep alive loop'); - try { + //try { YahooMessenger.keepAlive(); + /* } catch(e) { logger.info("Something wrong"); @@ -66,40 +97,20 @@ var _keepAliveLoop = function() { YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); return; } + */ keepAliveLoop(); } function keepAliveLoop() { - setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); + keepAliveTimer = setTimeout(_keepAliveLoop, config.yahoomessenger.keepalive_interval * 1000); } -function insertMessages(db_connection, logger_id, direction, partner, message, sentdate) { - - db_connection.query( - 'INSERT INTO messages SET ?', - { - transport: 'YAHOO', - logger: logger_id, - direction: direction, - partner: partner, - message: message, - sentdate: sentdate, - }, - - function(err) { - if (err != null) { - logger.error("Error on inserting messages to DB, error: " + err); - } - } - ); +function ymLogin(){ + logger.info("Login to YM as " + config.yahoomessenger.username) + YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); } -var striptags = require('striptags'); - -var YahooMessenger = require("yahoomessenger"); -YahooMessenger.newInstance(); - function onYmLoginSuccesful(data){ logger.info('Online on YM as ' + data.user_id + ' (' + data.firstname + ' ' + data.lastname + ')'); @@ -113,6 +124,10 @@ function onYmLoginSuccesful(data){ keepAliveLoop(); } +function onYmLoginError(data){ + logger.info("YM login error"); +} + function onYmPM(data) { var direction = 'IN'; @@ -195,12 +210,12 @@ function onYmBuddyAddRequest(data) { function onYmReady(){ - logger.info("Going to online on YM") - YahooMessenger.login(config.yahoomessenger.username, config.yahoomessenger.password); + ymLogin(); } YahooMessenger.on('ready', onYmReady); YahooMessenger.on('loginSuccessful', onYmLoginSuccesful); +YahooMessenger.on('loginError', onYmLoginError); YahooMessenger.on('pm', onYmPM); YahooMessenger.on('buddyAddRequest', onYmBuddyAddRequest); @@ -213,9 +228,44 @@ router.get('/hello', function(request, response) { }); router.get('/broadcastPing', function(request, response) { + response.end('Ok'); broadcast(config.yahoomessenger.report_to, 'PING'); }); +router.get('/status', function(request, response) { + response.writeHead(200, {"Content-Type": "text/plain"}); + response.write(config.yahoomessenger.status); + response.end(); +}); + +router.post('/status', function(request, response) { + var apikey = request.body.apikey; + if (apikey != config.httpserver.apikey) { + response.end('Invalid APIKEY: ' + apikey); + return; + } + response.end('Ok'); + + config.yahoomessenger.status = request.body.status; + YahooMessenger.setCustomAwayStatus(config.yahoomessenger.status); +}); + +router.get('/relogin/:apikey', function(request, response) { + var apikey = request.params.apikey; + + if (apikey != config.httpserver.apikey){ + response.end('Invalid APIKEY: ' + apikey); + return; + } + + logger.info("Logging out"); + YahooMessenger.logout(); + + logger.info("Logout"); + clearTimeout(keepAliveTimer); + + ymLogin(); +}); logger.info("Starting http server on port " + config.httpserver.listen_port); var httpServer = http.createServer(router).listen(config.httpserver.listen_port);