First throw at autologin capabilities
parent
94b8d6601d
commit
54175d2146
|
@ -14,6 +14,7 @@ import os
|
||||||
import threading
|
import threading
|
||||||
import logging, logging.config
|
import logging, logging.config
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import netaddr
|
||||||
|
|
||||||
from octoprint.printer import Printer, getConnectionOptions
|
from octoprint.printer import Printer, getConnectionOptions
|
||||||
from octoprint.settings import settings, valid_boolean_trues
|
from octoprint.settings import settings, valid_boolean_trues
|
||||||
|
@ -64,8 +65,7 @@ class PrinterStateConnection(tornadio2.SocketConnection):
|
||||||
self._eventManager = eventManager
|
self._eventManager = eventManager
|
||||||
|
|
||||||
def on_open(self, info):
|
def on_open(self, info):
|
||||||
self._logger.info("New connection from client")
|
self._logger.info("New connection from client: %s" % info.ip)
|
||||||
# Use of global here is smelly
|
|
||||||
self._printer.registerCallback(self)
|
self._printer.registerCallback(self)
|
||||||
self._gcodeManager.registerCallback(self)
|
self._gcodeManager.registerCallback(self)
|
||||||
|
|
||||||
|
@ -74,7 +74,6 @@ class PrinterStateConnection(tornadio2.SocketConnection):
|
||||||
|
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
self._logger.info("Closed client connection")
|
self._logger.info("Closed client connection")
|
||||||
# Use of global here is smelly
|
|
||||||
self._printer.unregisterCallback(self)
|
self._printer.unregisterCallback(self)
|
||||||
self._gcodeManager.unregisterCallback(self)
|
self._gcodeManager.unregisterCallback(self)
|
||||||
|
|
||||||
|
@ -857,6 +856,22 @@ def login():
|
||||||
if user is not None and not user.is_anonymous():
|
if user is not None and not user.is_anonymous():
|
||||||
identity_changed.send(current_app._get_current_object(), identity=Identity(user.get_id()))
|
identity_changed.send(current_app._get_current_object(), identity=Identity(user.get_id()))
|
||||||
return jsonify(user.asDict())
|
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:
|
||||||
|
autologinAs = settings().get(["accessControl", "autologinAs"])
|
||||||
|
localNetwork = settings().get(["accessControl", "localNetwork"])
|
||||||
|
try:
|
||||||
|
remoteAddr = util.getRemoteAddress(request)
|
||||||
|
if netaddr.IPAddress(remoteAddr) in netaddr.IPNetwork(localNetwork):
|
||||||
|
user = userManager.findUser(autologinAs)
|
||||||
|
if user is not None:
|
||||||
|
login_user(user)
|
||||||
|
identity_changed.send(current_app._get_current_object(), identity=Identity(user.get_id()))
|
||||||
|
return jsonify(user.asDict())
|
||||||
|
except:
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.exception("Could not autologin user %s for network %s" % (autologinAs, localNetwork))
|
||||||
return jsonify(SUCCESS)
|
return jsonify(SUCCESS)
|
||||||
|
|
||||||
@app.route(BASEURL + "logout", methods=["POST"])
|
@app.route(BASEURL + "logout", methods=["POST"])
|
||||||
|
|
|
@ -88,7 +88,10 @@ default_settings = {
|
||||||
"accessControl": {
|
"accessControl": {
|
||||||
"enabled": True,
|
"enabled": True,
|
||||||
"userManager": "octoprint.users.FilebasedUserManager",
|
"userManager": "octoprint.users.FilebasedUserManager",
|
||||||
"userfile": None
|
"userfile": None,
|
||||||
|
"autologinLocal": False,
|
||||||
|
"localNetwork": "127.0.0.1",
|
||||||
|
"autologinAs": None
|
||||||
},
|
},
|
||||||
"events": {
|
"events": {
|
||||||
"systemCommandTrigger": {
|
"systemCommandTrigger": {
|
||||||
|
|
|
@ -104,3 +104,9 @@ def getFreeBytes(path):
|
||||||
st = os.statvfs(path)
|
st = os.statvfs(path)
|
||||||
return st.f_bavail * st.f_frsize
|
return st.f_bavail * st.f_frsize
|
||||||
|
|
||||||
|
|
||||||
|
def getRemoteAddress(request):
|
||||||
|
forwardedFor = request.headers.get("X-Forwarded-For", None)
|
||||||
|
if forwardedFor is not None:
|
||||||
|
return forwardedFor.split(",")[0]
|
||||||
|
return request.remote_addr
|
||||||
|
|
|
@ -5,3 +5,4 @@ tornadio2==0.0.4
|
||||||
PyYAML==3.10
|
PyYAML==3.10
|
||||||
Flask-Login==0.2.2
|
Flask-Login==0.2.2
|
||||||
Flask-Principal==0.3.5
|
Flask-Principal==0.3.5
|
||||||
|
netaddr>=0.7.10
|
||||||
|
|
|
@ -7,3 +7,4 @@ Flask-Login==0.2.2
|
||||||
Flask-Principal==0.3.5
|
Flask-Principal==0.3.5
|
||||||
numpy>=1.6.2
|
numpy>=1.6.2
|
||||||
pyserial>=2.6
|
pyserial>=2.6
|
||||||
|
netaddr>=0.7.10
|
||||||
|
|
Loading…
Reference in New Issue