diff options
Diffstat (limited to 'pyload/remote')
-rw-r--r-- | pyload/remote/RemoteManager.py | 4 | ||||
-rw-r--r-- | pyload/remote/WebSocketBackend.py | 16 | ||||
-rw-r--r-- | pyload/remote/wsbackend/AbstractHandler.py | 13 | ||||
-rw-r--r-- | pyload/remote/wsbackend/Server.py | 5 |
4 files changed, 28 insertions, 10 deletions
diff --git a/pyload/remote/RemoteManager.py b/pyload/remote/RemoteManager.py index 7aeeb8a7a..b66b8b10a 100644 --- a/pyload/remote/RemoteManager.py +++ b/pyload/remote/RemoteManager.py @@ -67,8 +67,8 @@ class RemoteManager(): def startBackends(self): - host = self.core.config["remote"]["listenaddr"] - port = self.core.config["remote"]["port"] + host = self.core.config["webUI"]["wsHost"] + port = self.core.config["webUI"]["wsPort"] for b in self.available: klass = getattr(__import__("pyload.remote.%s" % b, globals(), locals(), [b], -1), b) diff --git a/pyload/remote/WebSocketBackend.py b/pyload/remote/WebSocketBackend.py index d29470067..7238af679 100644 --- a/pyload/remote/WebSocketBackend.py +++ b/pyload/remote/WebSocketBackend.py @@ -21,12 +21,15 @@ import logging from RemoteManager import BackendBase from mod_pywebsocket import util + + def get_class_logger(o=None): return logging.getLogger('log') # Monkey patch for our logger util.get_class_logger = get_class_logger + class WebSocketBackend(BackendBase): def setup(self, host, port): @@ -42,8 +45,19 @@ class WebSocketBackend(BackendBase): options.dispatcher.addHandler(ApiHandler.PATH, ApiHandler(self.core.api)) options.dispatcher.addHandler(AsyncHandler.PATH, AsyncHandler(self.core.api)) - self.server = WebSocketServer(options) + # tls is needed when requested or webUI is also on tls + if self.core.api.isWSSecure(): + from wsbackend.Server import import_ssl + if import_ssl(): + options.use_tls = True + options.certificate = self.core.config['ssl']['cert'] + options.ca_certificate = options.certificate + options.private_key = self.core.config['ssl']['key'] + self.core.log.info(_('Using secure WebSocket')) + else: + self.core.log.warning(_('SSL could not be imported')) + self.server = WebSocketServer(options) def serve(self): self.server.serve_forever() diff --git a/pyload/remote/wsbackend/AbstractHandler.py b/pyload/remote/wsbackend/AbstractHandler.py index 842d87473..e69ff2573 100644 --- a/pyload/remote/wsbackend/AbstractHandler.py +++ b/pyload/remote/wsbackend/AbstractHandler.py @@ -46,13 +46,12 @@ class AbstractHandler: req.api = None #when api is set client is logged in # allow login via session when webinterface is active - if self.core.config['webinterface']['activated']: - cookie = req.headers_in.getheader('Cookie') - s = self.load_session(cookie) - if s: - uid = s.get('uid', None) - req.api = self.api.withUserContext(uid) - self.log.debug("WS authenticated user with cookie: %d" % uid) + cookie = req.headers_in.getheader('Cookie') + s = self.load_session(cookie) + if s: + uid = s.get('uid', None) + req.api = self.api.withUserContext(uid) + self.log.debug("WS authenticated user with cookie: %d" % uid) self.on_open(req) diff --git a/pyload/remote/wsbackend/Server.py b/pyload/remote/wsbackend/Server.py index 02da44f04..9a6649ca9 100644 --- a/pyload/remote/wsbackend/Server.py +++ b/pyload/remote/wsbackend/Server.py @@ -67,6 +67,7 @@ _MAX_MEMORIZED_LINES = 1024 def import_ssl(): global _HAS_SSL, _HAS_OPEN_SSL + global ssl, OpenSSL try: import ssl _HAS_SSL = True @@ -77,6 +78,8 @@ def import_ssl(): except ImportError: pass + return _HAS_OPEN_SSL or _HAS_SSL + class _StandaloneConnection(object): """Mimic mod_python mp_conn.""" @@ -648,6 +651,8 @@ class DefaultOptions: private_key = '' certificate = '' ca_certificate = '' + tls_client_ca = '' + tls_client_auth = False dispatcher = None request_queue_size = _DEFAULT_REQUEST_QUEUE_SIZE use_basic_auth = False |