summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCalum Lind <calumlind+deluge@gmail.com>2017-01-10 20:20:44 +0000
committerCalum Lind <calumlind+deluge@gmail.com>2017-01-10 20:20:44 +0000
commit8a48ec012655e519245f5bfc1776d0d7b98be12d (patch)
tree4609af0e3d7723f848feadb609c20e7ed08bc7a4
parentc3a02e52913c25a2883638aad45e0383e575ea6d (diff)
downloaddeluge-8a48ec012655e519245f5bfc1776d0d7b98be12d.tar.gz
deluge-8a48ec012655e519245f5bfc1776d0d7b98be12d.tar.bz2
deluge-8a48ec012655e519245f5bfc1776d0d7b98be12d.zip
[#2951] [#1908] [WebUI] Add bind interface option for server
-rw-r--r--deluge/ui/web/server.py10
-rw-r--r--deluge/ui/web/web.py28
-rw-r--r--docs/man/deluge-web.13
3 files changed, 25 insertions, 16 deletions
diff --git a/deluge/ui/web/server.py b/deluge/ui/web/server.py
index b84c185c3..710c7aede 100644
--- a/deluge/ui/web/server.py
+++ b/deluge/ui/web/server.py
@@ -102,6 +102,7 @@ CONFIG_DEFAULTS = {
# Server Settings
"base": "/",
+ "interface": "0.0.0.0",
"port": 8112,
"https": False,
"pkey": "ssl/daemon.pkey",
@@ -665,9 +666,8 @@ class DelugeWeb(component.Component):
reactor.run()
def start_normal(self):
- self.socket = reactor.listenTCP(self.port, self.site)
- log.info("serving on %s:%s view at http://127.0.0.1:%s", "0.0.0.0",
- self.port, self.port)
+ self.socket = reactor.listenTCP(self.port, self.site, interface=self.interface)
+ log.info("Serving on %s:%s view at http://%s:%s", self.interface, self.port, self.interface, self.port)
def start_ssl(self):
log.debug("Enabling SSL with PKey: %s, Cert: %s", self.pkey, self.cert)
@@ -680,8 +680,8 @@ class DelugeWeb(component.Component):
options = CertificateOptions(privateKey=private_key, certificate=certificate, method=SSL.SSLv23_METHOD)
options.getContext().set_options(SSL.OP_NO_SSLv2 | SSL.OP_NO_SSLv3)
- self.socket = reactor.listenSSL(self.port, self.site, options)
- log.info("Serving on %s:%s view at https://127.0.0.1:%s", "0.0.0.0", self.port, self.port)
+ self.socket = reactor.listenSSL(self.port, self.site, options, interface=self.interface)
+ log.info("Serving on %s:%s view at https://%s:%s", self.interface, self.port, self.interface, self.port)
def stop(self):
log.info("Shutting down webserver")
diff --git a/deluge/ui/web/web.py b/deluge/ui/web/web.py
index a2b57655a..fb1a117bb 100644
--- a/deluge/ui/web/web.py
+++ b/deluge/ui/web/web.py
@@ -47,11 +47,11 @@ class WebUI(UI):
class Web(_UI):
help = """Starts the Deluge web interface"""
-
+
def __init__(self):
super(Web, self).__init__("web")
self.__server = None
-
+
group = OptionGroup(self.parser, "Web Options")
group.add_option("-b", "--base", dest="base",
help="Set the base path that the ui is running on (proxying)",
@@ -59,6 +59,9 @@ class Web(_UI):
group.add_option("-f", "--fork", dest="fork",
help="Fork the web interface process into the background",
action="store_true", default=False)
+ group.add_option("-i", "--interface", dest="interface", type="str",
+ help="Binds the webserver to a specific IP address",
+ action="store", default=None)
group.add_option("-p", "--port", dest="port", type="int",
help="Sets the port to be used for the webserver",
action="store", default=None)
@@ -75,14 +78,14 @@ class Web(_UI):
group.add_option("--ssl", dest="ssl", action="store_true",
help="Forces the webserver to use ssl", default=False)
self.parser.add_option_group(group)
-
+
@property
def server(self):
return self.__server
-
+
def start(self):
super(Web, self).start()
-
+
import deluge.common
# Steps taken from http://www.faqs.org/faqs/unix-faq/programmer/faq/
# Section 1.7
@@ -91,28 +94,31 @@ class Web(_UI):
# or shell invoking the program.
if os.fork():
os._exit(0)
-
+
# setsid() to become a process group and session group leader.
os.setsid()
-
+
# fork() again so the parent, (the session group leader), can exit.
if os.fork():
os._exit(0)
-
+
# chdir() to esnure that our process doesn't keep any directory in
# use that may prevent a filesystem unmount.
import deluge.configmanager
os.chdir(deluge.configmanager.get_config_dir())
-
+
import server
self.__server = server.DelugeWeb()
if self.options.base:
self.server.base = self.options.base
-
+
+ if self.options.interface:
+ self.server.interface = self.options.interface
+
if self.options.port:
self.server.port = self.options.port
-
+
if self.options.ssl:
self.server.https = self.options.ssl
diff --git a/docs/man/deluge-web.1 b/docs/man/deluge-web.1
index 6694fc842..52edd69c0 100644
--- a/docs/man/deluge-web.1
+++ b/docs/man/deluge-web.1
@@ -25,6 +25,9 @@ Set the base path that the web ui is running on (proxying)
.B -f, --fork
Fork the web interface process into the background
.TP
+.BI -i\ ip_address \fR,\ \fB--interface= ip_address
+Binds the webserver to a specific IP address
+.TP
.BI -p\ port \fR,\ \fB--port= port
Sets the port to be used for the webserver
.TP