From 6ab8b76859be36fb9c8ab201f827d37558794a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sun, 18 Aug 2013 22:50:52 +0200 Subject: [PATCH 1/5] Allow more than one local network to be defined --- octoprint/server.py | 18 +++++++++++++----- octoprint/settings.py | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/octoprint/server.py b/octoprint/server.py index f72d3fc1..001a0a3a 100644 --- a/octoprint/server.py +++ b/octoprint/server.py @@ -858,12 +858,16 @@ def login(): return jsonify(user.asDict()) elif settings().getBoolean(["accessControl", "autologinLocal"]) \ and settings().get(["accessControl", "autologinAs"]) is not None \ - and settings().get(["accessControl", "localNetwork"]) is not None: + and settings().get(["accessControl", "localNetworks"]) is not None: + autologinAs = settings().get(["accessControl", "autologinAs"]) - localNetwork = settings().get(["accessControl", "localNetwork"]) + localNetworks = netaddr.IPSet([]) + for ip in settings().get(["accessControl", "localNetworks"]): + localNetworks.add(ip) + try: remoteAddr = util.getRemoteAddress(request) - if netaddr.IPAddress(remoteAddr) in netaddr.IPNetwork(localNetwork): + if netaddr.IPAddress(remoteAddr) in localNetworks: user = userManager.findUser(autologinAs) if user is not None: login_user(user) @@ -871,7 +875,7 @@ def login(): return jsonify(user.asDict()) except: logger = logging.getLogger(__name__) - logger.exception("Could not autologin user %s for network %s" % (autologinAs, localNetwork)) + logger.exception("Could not autologin user %s for networks %r" % (autologinAs, localNetworks)) return jsonify(SUCCESS) @app.route(BASEURL + "logout", methods=["POST"]) @@ -986,7 +990,11 @@ class Server(): connectionOptions = getConnectionOptions() if port in connectionOptions["ports"]: printer.connect(port, baudrate) - IOLoop.instance().start() + try: + IOLoop.instance().start() + except: + logger.fatal("Now that is embarrassing... Something really really went wrong here. Please report this including the stacktrace below in OctoPrint's bugtracker. Thanks!") + logger.exception("Stacktrace follows:") def _createSocketConnection(self, session, endpoint=None): global printer, gcodeManager, userManager, eventManager diff --git a/octoprint/settings.py b/octoprint/settings.py index 4ffd461f..b1e67ce8 100644 --- a/octoprint/settings.py +++ b/octoprint/settings.py @@ -90,7 +90,7 @@ default_settings = { "userManager": "octoprint.users.FilebasedUserManager", "userfile": None, "autologinLocal": False, - "localNetwork": "127.0.0.1", + "localNetworks": ["127.0.0.0/8"], "autologinAs": None }, "events": { From 3e0abf1b2074b8beb05694d988e7f0d2a47f4b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Wed, 21 Aug 2013 20:33:55 +0200 Subject: [PATCH 2/5] New custom control type "feedback" Like "feedback_command", but without the button --- octoprint/settings.py | 2 +- octoprint/static/js/app/viewmodels/control.js | 4 +++- octoprint/templates/index.jinja2 | 5 +++++ octoprint/util/comm.py | 14 ++++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/octoprint/settings.py b/octoprint/settings.py index b1e67ce8..2d05f9b1 100644 --- a/octoprint/settings.py +++ b/octoprint/settings.py @@ -248,7 +248,7 @@ class Settings(object): return feedbackControls def _getFeedbackControls(self, control=None): - if control["type"] == "feedback_command": + if control["type"] == "feedback_command" or control["type"] == "feedback": pattern = control["regex"] try: matcher = re.compile(pattern) diff --git a/octoprint/static/js/app/viewmodels/control.js b/octoprint/static/js/app/viewmodels/control.js index bfab9e03..3f89d570 100644 --- a/octoprint/static/js/app/viewmodels/control.js +++ b/octoprint/static/js/app/viewmodels/control.js @@ -68,7 +68,7 @@ function ControlViewModel(loginStateViewModel, settingsViewModel) { for (var i = 0; i < control.input.length; i++) { control.input[i].value = control.input[i].default; } - } else if (control.type == "feedback_command") { + } else if (control.type == "feedback_command" || control.type == "feedback") { control.output = ko.observable(""); self.feedbackControlLookup[control.name] = control.output; } else if (control.type == "section") { @@ -162,6 +162,8 @@ function ControlViewModel(loginStateViewModel, settingsViewModel) { return "customControls_parametricCommandTemplate"; case "feedback_command": return "customControls_feedbackCommandTemplate"; + case "feedback": + return "customControls_feedbackTemplate"; default: return "customControls_emptyTemplate"; } diff --git a/octoprint/templates/index.jinja2 b/octoprint/templates/index.jinja2 index 6d077eef..1d8883eb 100644 --- a/octoprint/templates/index.jinja2 +++ b/octoprint/templates/index.jinja2 @@ -402,6 +402,11 @@ + @@ -619,7 +619,7 @@ - + diff --git a/requirements-bbb.txt b/requirements-bbb.txt index 55583985..aa093093 100644 --- a/requirements-bbb.txt +++ b/requirements-bbb.txt @@ -1,7 +1,7 @@ flask==0.9 werkzeug==0.8.3 tornado==3.0.2 -tornadio2==0.0.4 +sockjs-tornado>=1.0.0 PyYAML==3.10 Flask-Login==0.2.2 Flask-Principal==0.3.5 diff --git a/requirements.txt b/requirements.txt index 23fd4b6a..9c5b0cdd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ flask==0.9 werkzeug==0.8.3 tornado==3.0.2 -tornadio2==0.0.4 +sockjs-tornado>=1.0.0 PyYAML==3.10 Flask-Login==0.2.2 Flask-Principal==0.3.5