Changing jade template to match changes made in index.php
[KiwiIRC.git] / node / kiwi.js
index b52a8a9d678f9df598e0701c6ccae851ec6af4b5..9beb306ab5987d6481157f6eb6423e4f30bc366e 100644 (file)
@@ -5,12 +5,18 @@ var tls = require('tls'),
     http = require('http'),
     https = require('https'),
     fs = require('fs'),
+    url = require('url'),
     ws = require('socket.io'),
     _ = require('./lib/underscore.min.js'),
     starttls = require('./lib/starttls.js');
 
 var config = JSON.parse(fs.readFileSync(__dirname + '/config.json', 'ascii'));
 
+if (config.handle_http) {
+    var static_server = require('node-static'),
+        jade = require('jade');
+}
+
 var ircNumerics = {
     RPL_WELCOME:        '001',
     RPL_ISUPPORT:       '005',
@@ -83,12 +89,14 @@ var parseIRCMessage = function (websocket, ircSocket, data) {
         case ircNumerics.RPL_WHOISUSER:
         case ircNumerics.RPL_WHOISSERVER:
         case ircNumerics.RPL_WHOISOPERATOR:
-        case ircNumerics.RPL_WHOISIDLE:
         case ircNumerics.RPL_ENDOFWHOIS:
         case ircNumerics.RPL_WHOISCHANNELS:
         case ircNumerics.RPL_WHOISMODES:
             websocket.emit('message', {event: 'whois', server: '', nick: msg.params.split(" ", 3)[1], "msg": msg.trailing});
             break;
+        case ircNumerics.RPL_WHOISIDLE:
+            params = msg.params.split(" ", 3);
+            websocket.emit('message', {event: 'whois', server: '', nick: params[1], "msg": params[2] + ' ' + msg.trailing});
         case ircNumerics.RPL_MOTD:
             websocket.emit('message', {event: 'motd', server: '', "msg": msg.trailing});
             break;
@@ -271,17 +279,76 @@ var ircSocketDataHandler = function (data, websocket, ircSocket) {
     }
 };
 
+if (config.handle_http) {
+    var fileServer = new (static_server.Server)(__dirname + config.public_http);
+}
+
+var httpHandler = function (request, response) {
+    var uri, subs, useragent, agent, server_set, server, nick, debug, touchscreen;
+    if (config.handle_http) {
+        uri = url.parse(request.url);
+        subs = uri.pathname.substr(0, 4);
+        if ((subs === '/js/') || (subs === '/css') || (subs === '/img')) {
+            request.addListener('end', function () {
+                fileServer.serve(request, response);
+            });
+        } else if (uri.pathname === '/') {
+            useragent = (response.headers) ? response.headers['user-agent']: '';
+            if (useragent.indexOf('android') !== -1) {
+                agent = 'android';
+                touchscreen = true;
+            } else if (useragent.indexOf('iphone') !== -1) {
+                agent = 'iphone';
+                touchscreen = true;
+            } else if (useragent.indexOf('ipad') !== -1) {
+                agent = 'ipad';
+                touchscreen = true;
+            } else if (useragent.indexOf('ipod') !== -1) {
+                agent = 'ipod';
+                touchscreen = true;
+            } else {
+                agent = 'normal';
+                touchscreen = false;
+            }
+            if (uri.query) {
+                server_set = (uri.query.server !== '');
+                server = uri.query.server || 'irc.anonnet.org';
+                nick = uri.query.nick || '';
+                debug = (uri.query.debug !== '');
+            } else {
+                server = 'irc.anonnet.org';
+                nick = '';
+            }
+            response.setHeader('Connection', 'close');
+            response.setHeader('X-Generated-By', 'KiwiIRC');
+            jade.renderFile(__dirname + '/client/index.html.jade', { locals: { "touchscreen": touchscreen, "debug": debug, "server_set": server_set, "server": server, "nick": nick, "agent": agent, "config": config }}, function (err, html) {
+                if (!err) {
+                    response.write(html);
+                } else {
+                    response.statusCode = 500;
+                }
+                response.end();
+            });
+        } else if (uri.pathname.substr(0, 10) === '/socket.io') {
+            // Do nothing!
+        } else {
+            response.statusCode = 404;
+            response.end();
+        }
+    }
+};
+
 //setup websocket listener
 if (config.listen_ssl) {
-    var httpServer = https.createServer({key: fs.readFileSync(__dirname + '/' + config.ssl_key), cert: fs.readFileSync(__dirname + '/' + config.ssl_cert)});
+    var httpServer = https.createServer({key: fs.readFileSync(__dirname + '/' + config.ssl_key), cert: fs.readFileSync(__dirname + '/' + config.ssl_cert)}, httpHandler);
     var io = ws.listen(httpServer, {secure: true});
     httpServer.listen(config.port, config.bind_address);
 } else {
-    var httpServer = http.createServer();
+    var httpServer = http.createServer(httpHandler);
     var io = ws.listen(httpServer, {secure: false});
     httpServer.listen(config.port, config.bind_address);
 }
-io.sockets.on('connection', function (websocket) {
+io.of('/kiwi').on('connection', function (websocket) {
     websocket.on('irc connect', function (nick, host, port, ssl, callback) {
         var ircSocket;
         //setup IRC connection