From 57beabf0b4a9ac8929d23e26cbc385e9e8397d0f Mon Sep 17 00:00:00 2001 From: Nick Farina Date: Wed, 17 Feb 2016 10:43:54 -0800 Subject: [PATCH 1/2] Add comment --- lib/cli.js | 2 +- lib/server.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/cli.js b/lib/cli.js index 182fa1c..be4810a 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -17,7 +17,7 @@ module.exports = function() { .option('-P, --plugin-path [path]', 'look for plugins installed at [path] as well as the default locations ([path] can also point to a single plugin)', function(p) { Plugin.addPluginPath(p); }) .option('-U, --user-storage-path [path]', 'look for homebridge user files at [path] instead of the default location (~/.homebridge)', function(p) { User.setStoragePath(p); }) .option('-D, --debug', 'turn on debug level logging', function() { require('./logger').setDebugEnabled(true) }) - .option('-I, --insecure', 'allow insecure access to homebridge', function() { insecureAccess = true; }) + .option('-I, --insecure', 'allow unauthenticated requests (for easier hacking)', function() { insecureAccess = true }) .parse(process.argv); // Initialize HAP-NodeJS with a custom persist directory diff --git a/lib/server.js b/lib/server.js index bc2c691..d8523c0 100644 --- a/lib/server.js +++ b/lib/server.js @@ -25,6 +25,11 @@ function Server(insecureAccess) { this._config = this._loadConfig(); this._bridge = this._createBridge(); + // Server is "secure by default", meaning it creates a top-level Bridge accessory that + // will not allow unauthenticated requests. This matches the behavior of actual HomeKit + // accessories. However you can set this to true to allow all requests without authentication, + // which can be useful for easy hacking. Note that this will expose all functions of your + // bridged accessories, like changing charactersitics (i.e. flipping your lights on and off). this._allowInsecureAccess = insecureAccess || false; } From cf80e4f2dac2617236eead8bc94fb0d4c2b81eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 18 Feb 2016 00:17:34 +0100 Subject: [PATCH 2/2] Handle SIGINT and SIGTERM to enable clean shutdown of Homebridge For now we terminate the process, but in the future we may tell the server to stop, which may possibly include some teardown logic. Handling these signals also make it easier to put Homebridge inside a docker container, as docker uses SIGTERM to tell a container process to stop, and passes SIGINT when attached to the container and receiving a Ctrl+C. --- lib/cli.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/cli.js b/lib/cli.js index be4810a..68e44f8 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -23,5 +23,17 @@ module.exports = function() { // Initialize HAP-NodeJS with a custom persist directory hap.init(User.persistPath()); - new Server(insecureAccess).run(); + var server = new Server(insecureAccess); + + var signals = { 'SIGINT': 2, 'SIGTERM': 15 }; + Object.keys(signals).forEach(function (signal) { + process.on(signal, function () { + log.info("Got %s, shutting down Homebridge...", signal); + + // FIXME: Shut down server cleanly + process.exit(128 + signals[signal]); + }); + }); + + server.run(); }