Merge with irc handler in FF
authorDarren <darren@darrenwhitlen.com>
Mon, 3 Oct 2011 21:42:33 +0000 (22:42 +0100)
committerDarren <darren@darrenwhitlen.com>
Mon, 3 Oct 2011 21:42:33 +0000 (22:42 +0100)
client/js/front.js
server/app.js

index 8902a082517da81abf7e21ed367fd460b4cc9606..dc4e68e408b8a3d2ec2207255c25ee7534457eb2 100644 (file)
@@ -533,6 +533,20 @@ kiwi.front = {
         }(msg));
         
         return msg;
+    },
+    
+    registerProtocolHandler: function () {
+        var state, uri;
+        url = kiwi_server.replace(/\/kiwi$/, '/?ircuri=%s');
+        try {
+            //state = window.navigator.isProtocolHandlerRegistered('irc', url);
+            //if (state !== 'registered') {
+                window.navigator.registerProtocolHandler('irc', url, 'Kiwi IRC');
+            //}
+        } catch (e) {
+            console.log('Unable to register Kiwi IRC as a handler for irc:// links');
+            console.error(e);
+        }
     }
 
 };
index 2f26013027be6020c69cd1869306c45ee248b552..cbaff4da2c8fcebb508974018bb97c011f27ecc1 100644 (file)
@@ -529,7 +529,7 @@ this.ircSocketDataHandler = function (data, websocket, ircSocket) {
 
 this.httpHandler = function (request, response) {
     var uri, uri_parts, subs, useragent, agent, server_set, server, nick, debug, touchscreen, hash,
-        min = {}, public_http_path, port, ssl, host, obj, args,
+        min = {}, public_http_path, port, ssl, host, obj, args, ircuri, pass, target, modifiers, query,
         secure = (typeof request.client.encrypted === 'object');
 
     //try {
@@ -547,7 +547,24 @@ this.httpHandler = function (request, response) {
 
             subs = uri.pathname.substr(0, 4);
             public_http_path = kiwi.kiwi_root + '/' + kiwi.config.public_http;
-            if (uri.pathname === '/js/all.js') {
+            
+            if (typeof uri.query.ircuri !== 'undefined') {
+                ircuri = url.parse(uri.query.ircuri, true);
+                if (ircuri.protocol === 'irc:') {
+                    uri_parts = /^\/([^,\?]*)((,[^,\?]*)*)?$/.exec(ircuri.pathname);
+                    target = uri_parts[1];
+                    modifiers = (typeof uri_parts[2] !== 'undefined') ? uri_parts[2].split(',') : [];
+                    query = ircuri.query;
+
+                    nick = _.detect(modifiers, function (mod) {
+                        return mod === ',isnick';
+                    });
+                    console.log(request.headers);
+                    response.statusCode = 303;
+                    response.setHeader('Location', 'http' + ((secure) ? 's' : '') + '://' + request.headers.host + '/client/' + ircuri.host + '/' + ((!nick) ? target : ''));
+                    response.end();
+                }
+            } else if (uri.pathname === '/js/all.js') {
                 if (kiwi.cache.alljs === '') {
 
                     min.underscore = fs.readFileSync(public_http_path + 'js/underscore.min.js');