summaryrefslogtreecommitdiffstats
path: root/pyload/remote
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/remote')
-rw-r--r--pyload/remote/RemoteManager.py4
-rw-r--r--pyload/remote/WebSocketBackend.py16
-rw-r--r--pyload/remote/wsbackend/AbstractHandler.py13
-rw-r--r--pyload/remote/wsbackend/Server.py5
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