Server listen config/listen refactor, intermediate cert support added
authorDarren <darren@darrenwhitlen.com>
Fri, 14 Oct 2011 11:52:36 +0000 (12:52 +0100)
committerDarren <darren@darrenwhitlen.com>
Fri, 14 Oct 2011 11:52:36 +0000 (12:52 +0100)
server/app.js
server/config.json
server/kiwi.js

index a0bc999f0065888c2a32727749882a1fa3d3e667..8e970ad5a863918e19b68f3fa6b82c648505e418 100644 (file)
@@ -717,7 +717,7 @@ this.httpHandler = function (request, response) {
 
 
 
-this.websocketListen = function (ports, host, handler, key, cert) {
+this.websocketListen = function (servers, handler) {
     if (kiwi.httpServers.length > 0) {
         _.each(kiwi.httpServers, function (hs) {
             hs.close();
@@ -725,18 +725,30 @@ this.websocketListen = function (ports, host, handler, key, cert) {
         kiwi.httpsServers = [];
     }
 
-    _.each(ports, function (port) {
-        var hs;
-        if (port.secure === true) {
-            hs = https.createServer({key: fs.readFileSync(__dirname + '/' + key), cert: fs.readFileSync(__dirname + '/' + cert)}, handler);
+    _.each(servers, function (server) {
+        var hs, opts;
+        if (server.secure === true) {
+            // Start some SSL server up
+            opts = {
+                key: fs.readFileSync(__dirname + '/' + server.ssl_key),
+                cert: fs.readFileSync(__dirname + '/' + server.ssl_cert)
+            };
+
+            // Do we have an intermediate certificate?
+            if (typeof server.ssl_ca !== 'undefined') {
+                opts.ca = fs.readFileSync(__dirname + '/' + server.ssl_ca);
+            }
+
+            hs = https.createServer(opts, handler);
             kiwi.io.push(ws.listen(hs, {secure: true}));
-            hs.listen(port.number, host);
-            console.log("Listening on %s:%d with SSL", host, port.number);
+            hs.listen(server.port, server.address);
+            console.log("Listening on %s:%d with SSL", server.address, server.port);
         } else {
+            // Start some plain-text server up
             hs = http.createServer(handler);
             kiwi.io.push(ws.listen(hs, {secure: false}));
-            hs.listen(port.number, host);
-            console.log("Listening on %s:%d without SSL", host, port.number);
+            hs.listen(server.port, server.address);
+            console.log("Listening on %s:%d without SSL", server.address, server.port);
         }
 
         kiwi.httpServers.push(hs);
@@ -959,7 +971,7 @@ this.rehash = function () {
             case 'bind_address':
             case 'ssl_key':
             case 'ssl_cert':
-                kiwi.websocketListen(kiwi.config.ports, kiwi.config.bind_address, kiwi.httpHandler, kiwi.config.ssl_key, kiwi.config.ssl_cert);
+                kiwi.websocketListen(kiwi.config.servers, kiwi.httpHandler);
                 delete changes.ports;
                 delete changes.bind_address;
                 delete changes.ssl_key;
index 6e023d8d58269ba75232ff37e59613d038aa9ce3..999043eff540b8351ff6390f527be64e6486504b 100644 (file)
@@ -1,23 +1,24 @@
 {
-    "ports":            [
+    "servers":            [
                             {
                                 "secure":   true,
-                                "number":   7777
+                                "port":   7777,
+                                "address": "0.0.0.0",
+
+                                "ssl_key": "server.key",
+                                "ssl_cert": "cert.pem"
                             },
                             {
                                 "secure":   false,
-                                "number":   7778
+                                "port":   7778,
+                                "address": "0.0.0.0"
                             }
                             
                         ],
-    "bind_address":     "0.0.0.0",
 
     "user":             "",
     "group":            "",
 
-    "ssl_key":          "server.key",
-    "ssl_cert":         "cert.pem",
-
     "quit_message":     "KiwiIRC",
     "cap_options":      [],
 
index b6f04db33b3bf83ad00c0445dc9271531ee0ff49..5b14d0dddf2ccc05d63ef08f97461c626f37d4b8 100644 (file)
@@ -137,8 +137,8 @@ this.httpHandler = function (request, response) {
  */
 this.connections = {};
 this.io = [];
-this.websocketListen = function (port, host, handler, secure, key, cert) {
-    return app.websocketListen(port, host, handler, secure, key, cert);
+this.websocketListen = function (servers, handler) {
+    return app.websocketListen(servers, handler);
 }
 this.websocketConnection = function (websocket) {
     return app.websocketConnection(websocket);
@@ -199,7 +199,7 @@ this.kiwi_mod.printMods();
 
 
 // Start the server up
-this.websocketListen(this.config.ports, this.config.bind_address, this.httpHandler, this.config.ssl_key, this.config.ssl_cert);
+this.websocketListen(this.config.servers, this.httpHandler);
 
 // Now we're listening on the network, set our UID/GIDs if required
 app.changeUser();