Commit 2833225fe1b8021e6d1ba8b6cd6d722a5cf8dae9

Authored by Adhidarma Hadiwinoto
0 parents
Exists in master

initial files

Showing 5 changed files with 202 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1 @@
  1 +config.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
... ... @@ -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;
... ... @@ -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);