diff options
author | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-03-16 21:28:01 +0100 |
---|---|---|
committer | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-03-16 21:28:01 +0100 |
commit | 7186f5cc9f502cbdaf1245a2820a7dfb434f4e49 (patch) | |
tree | 7fbf10131925cfe399063c8e923240d1afadd42a /module/web/ServerThread.py | |
parent | Fixed Hotfile (diff) | |
download | pyload-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.py | 122 |
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 |