summaryrefslogtreecommitdiffstats
path: root/module/web/ServerThread.py
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-03-16 21:28:01 +0100
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-03-16 21:28:01 +0100
commit7186f5cc9f502cbdaf1245a2820a7dfb434f4e49 (patch)
tree7fbf10131925cfe399063c8e923240d1afadd42a /module/web/ServerThread.py
parentFixed Hotfile (diff)
downloadpyload-7186f5cc9f502cbdaf1245a2820a7dfb434f4e49.tar.xz
core ssl fix, nginx support, https for lighttpd and nginx
Diffstat (limited to 'module/web/ServerThread.py')
-rw-r--r--module/web/ServerThread.py122
1 files changed, 109 insertions, 13 deletions
diff --git a/module/web/ServerThread.py b/module/web/ServerThread.py
index 49fd9b055..b05b3d0dc 100644
--- a/module/web/ServerThread.py
+++ b/module/web/ServerThread.py
@@ -6,6 +6,7 @@ from subprocess import PIPE
from subprocess import Popen
from subprocess import call
from sys import version_info
+from sys import stdout
import threading
class WebServer(threading.Thread):
@@ -13,10 +14,12 @@ class WebServer(threading.Thread):
threading.Thread.__init__(self)
self.pycore = pycore
self.running = True
- self.lighttpd = False
+ self.server = pycore.config['webinterface']['server']
+ self.https = pycore.config['webinterface']['https']
self.setDaemon(True)
def run(self):
+ avail = ["builtin"]
host = self.pycore.config['webinterface']['host']
port = self.pycore.config['webinterface']['port']
path = join(self.pycore.path, "module", "web")
@@ -31,48 +34,131 @@ class WebServer(threading.Thread):
return None
try:
+ import flup
+ avail.append("fastcgi")
+ except:
+ pass
+
+ try:
call(["lighttpd", "-v"], stdout=PIPE, stderr=PIPE)
import flup
- self.lighttpd = True
+ avail.append("lighttpd")
+
+ except:
+ pass
+
+ try:
+ call(["nginx", "-v"], stdout=PIPE, stderr=PIPE)
+ import flup
+ avail.append("nginx")
+ except:
+ pass
+
+
+ try:
+ if exists(self.pycore.config["ssl"]["cert"]) and exists(self.pycore.config["ssl"]["key"]):
+ if not exists("ssl.pem"):
+ key = file(self.pycore.config["ssl"]["key"], "rb")
+ cert = file(self.pycore.config["ssl"]["cert"], "rb")
+
+ pem = file("ssl.pem", "wb")
+ pem.writelines(key.readlines())
+ pem.writelines(cert.readlines())
+
+ key.close()
+ cert.close()
+ pem.close()
+
+ else:
+ self.https = False
+ except:
+ self.https = False
+
+
+ if not self.server in avail:
+ self.server = "builtin"
+
+
+ if self.server == "nginx":
- except Exception:
- self.lighttpd = False
+ self.pycore.logger.info("Starting nginx Webserver: %s:%s" % (host, port))
+ config = file(join(path, "servers", "nginx_default.conf"), "rb")
+ content = config.readlines()
+ config.close()
+ content = "".join(content)
+
+ content = content.replace("%(path)", join(path, "servers"))
+ content = content.replace("%(host)", host)
+ content = content.replace("%(port)", port)
+ content = content.replace("%(media)", join(path, "media"))
+ content = content.replace("%(version)", ".".join(map(str, version_info[0:2])))
+
+ if self.https:
+ content = content.replace("%(ssl)", """
+ ssl on;
+ ssl_certificate %s;
+ ssl_certificate_key %s;
+ """ % (self.pycore.config["ssl"]["cert"], self.pycore.config["ssl"]["key"]))
+ else:
+ content = content.replace("%(ssl)", "")
- if self.lighttpd:
+ new_config = file(join(path, "servers", "nginx.conf"), "wb")
+ new_config.write(content)
+ new_config.close()
+
+ command = ['python', join(self.pycore.path, "module", "web", "manage.py"), "runfcgi", "daemonize=false", "method=threaded", "host=127.0.0.1", "port=9295"]
+ self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=Output(stdout))
+
+ command2 = ['nginx', '-c', join(path, "servers", "nginx.conf"),]
+ self.p2 = Popen(command2, stderr=PIPE, stdin=PIPE, stdout=PIPE)
+
+
+ elif self.server == "lighttpd":
self.pycore.logger.info("Starting lighttpd Webserver: %s:%s" % (host, port))
- config = file(join(path, "lighttpd", "lighttpd_default.conf"), "rb")
+ config = file(join(path, "servers", "lighttpd_default.conf"), "rb")
content = config.readlines()
config.close()
content = "".join(content)
- content = content.replace("%(path)", join(path, "lighttpd"))
+ content = content.replace("%(path)", join(path, "servers"))
content = content.replace("%(host)", host)
content = content.replace("%(port)", port)
content = content.replace("%(media)", join(path, "media"))
content = content.replace("%(version)", ".".join(map(str, version_info[0:2])))
- new_config = file(join(path, "lighttpd", "lighttpd.conf"), "wb")
+ if self.https:
+ content = content.replace("%(ssl)", """
+ ssl.engine = "enable"
+ ssl.pemfile = "%s"
+ ssl.ca-file = "%s"
+ """ % (join(self.pycore.path, "ssl.pem"), self.pycore.config["ssl"]["cert"]))
+ else:
+ content = content.replace("%(ssl)", "")
+ new_config = file(join(path, "servers", "lighttpd.conf"), "wb")
new_config.write(content)
new_config.close()
command = ['python', join(self.pycore.path, "module", "web", "manage.py"), "runfcgi", "daemonize=false", "method=threaded", "host=127.0.0.1", "port=9295"]
- self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=PIPE)
+ self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=Output(stdout))
- command2 = ['lighttpd', '-D', '-f', join(path, "lighttpd", "lighttpd.conf")]
+ command2 = ['lighttpd', '-D', '-f', join(path, "servers", "lighttpd.conf")]
self.p2 = Popen(command2, stderr=PIPE, stdin=PIPE, stdout=PIPE)
- else:
+ elif self.server == "builtin":
self.pycore.logger.info("Starting django builtin Webserver: %s:%s" % (host, port))
command = ['python', join(self.pycore.path, "module", "web", "run_server.py"), "%s:%s" % (host, port)]
self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=PIPE)
-
+ else:
+ #run fastcgi on port
+ command = ['python', join(self.pycore.path, "module", "web", "manage.py"), "runfcgi", "daemonize=false", "method=threaded", "host=127.0.0.1", "port=%s" % port]
+ self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=Output(stdout))
def quit(self):
try:
- if self.lighttpd:
+ if self.server == "lighttpd" or self.server == "nginx":
self.p.kill()
self.p2.kill()
return True
@@ -85,3 +171,13 @@ class WebServer(threading.Thread):
self.running = False
+
+class Output:
+ def __init__(self, stream):
+ self.stream = stream
+ def write(self, data): # Do nothing
+ return None
+ #self.stream.write(data)
+ #self.stream.flush()
+ def __getattr__(self, attr):
+ return getattr(self.stream, attr) \ No newline at end of file