diff options
author | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-08-10 14:01:40 +0200 |
---|---|---|
committer | RaNaN <Mast3rRaNaN@hotmail.de> | 2010-08-10 14:01:40 +0200 |
commit | 85f50861e44565a8ce722cbb1fed2c98f9e5d256 (patch) | |
tree | 38ad593a1e574e8c6a98123e7e7ebac0a785e25e | |
parent | little fix (diff) | |
download | pyload-85f50861e44565a8ce722cbb1fed2c98f9e5d256.tar.xz |
webservers working, hotfolder hook
-rw-r--r-- | module/FileDatabase.py | 7 | ||||
-rw-r--r-- | module/plugins/hooks/HotFolder.py | 81 | ||||
-rw-r--r-- | module/web/ServerThread.py | 87 | ||||
-rw-r--r-- | module/web/cnl/views.py | 3 | ||||
-rw-r--r-- | module/web/servers/nginx_default.conf | 2 | ||||
-rw-r--r-- | module/web/settings.py | 2 | ||||
-rw-r--r-- | module/web/templates/default/collector.html | 4 |
7 files changed, 140 insertions, 46 deletions
diff --git a/module/FileDatabase.py b/module/FileDatabase.py index 442a15320..8a334ea58 100644 --- a/module/FileDatabase.py +++ b/module/FileDatabase.py @@ -46,7 +46,8 @@ statusMap = { "decrypting": 10, "custom": 11, "downloading": 12, - "processing": 13 + "processing": 13, + "unknow": 14 } def formatSize(size): @@ -74,7 +75,7 @@ class FileHandler: self.core = core # translations - self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("checking"), _("waiting"), _("reconnected"), _("starting"),_("failed"), _("aborted"), _("decrypting"), _("custom"),_("downloading"), _("processing")] + self.statusMsg = [_("finished"), _("offline"), _("online"), _("queued"), _("checking"), _("waiting"), _("reconnected"), _("starting"),_("failed"), _("aborted"), _("decrypting"), _("custom"),_("downloading"), _("processing"), _("unknown")] self.cache = {} #holds instances for files self.packageCache = {} # same for packages @@ -759,7 +760,7 @@ class FileDatabaseBackend(Thread): cmd += ")" - cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=1 AND l.plugin NOT IN %s AND l.status IN (2,3,6) ORDER BY p.packageorder, l.linkorder LIMIT 5" % cmd + cmd = "SELECT l.id FROM links as l INNER JOIN packages as p ON l.package=p.id WHERE p.queue=1 AND l.plugin NOT IN %s AND l.status IN (2,3,6,14) ORDER BY p.packageorder, l.linkorder LIMIT 5" % cmd self.c.execute(cmd) # very bad! diff --git a/module/plugins/hooks/HotFolder.py b/module/plugins/hooks/HotFolder.py new file mode 100644 index 000000000..3b6c88d82 --- /dev/null +++ b/module/plugins/hooks/HotFolder.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: RaNaN + @interface-version: 0.2 +""" + +from os import makedirs +from os import listdir +from os.path import exists +from os.path import join +from os.path import isfile +from shutil import move +import time + +from module.plugins.Hook import Hook + +class HotFolder(Hook): + __name__ = "HotFolder" + __version__ = "0.1" + __description__ = """observe folder and file for changes and add container and links""" + __config__ = [ ("activated", "bool", "Activated" , "False"), + ("folder", "str", "Folder to observe", "container"), + ("watch_file", "bool", "Observe link file", "False"), + ("keep", "bool", "Keep added containers", "True"), + ("file", "str", "link file", "links.txt")] + __threaded__ = [] + __author_name__ = ("RaNaN") + __author_mail__ = ("RaNaN@pyload.de") + + def setup(self): + self.interval = 10 + + def periodical(self): + + if not exists(join(self.getConfig("folder"), "finished")): + makedirs(join(self.getConfig("folder"), "finished")) + + if self.getConfig("watch_file"): + + if not exists(self.getConfig("file")): + f = open(self.getConfig("file"), "wb") + f.close() + + + f = open(self.getConfig("file"), "rb") + urls = [x.strip() for x in f.readlines() if x.strip()] + f.close() + if urls: + name = "%s @ %s" % (self.getConfig("file"), time.strftime("%H:%M:%S %d%b%Y") ) + f = open(self.getConfig("file"), "wb") + f.close() + + self.core.server_methods.add_package(f.name, urls, 1) + + for f in listdir(self.getConfig("folder")): + path = join(self.getConfig("folder"), f) + + if not isfile(path) or f.endswith("~") or f.startswith("#"): + continue + + newpath = join(self.getConfig("folder"), "finished", f if self.getConfig("keep") else "tmp_"+f) + move(path, newpath) + + self.log.info(_("Added %s from HotFolder") % f) + self.core.server_methods.add_package(f, [newpath], 1) + +
\ No newline at end of file diff --git a/module/web/ServerThread.py b/module/web/ServerThread.py index f7bf11b3c..40683004a 100644 --- a/module/web/ServerThread.py +++ b/module/web/ServerThread.py @@ -2,6 +2,8 @@ from __future__ import with_statement from os.path import exists from os.path import join +from os.path import abspath +from os import makedirs from subprocess import PIPE from subprocess import Popen from subprocess import call @@ -30,21 +32,19 @@ class WebServer(threading.Thread): avail = ["builtin"] host = self.core.config['webinterface']['host'] port = self.core.config['webinterface']['port'] - path = join(pypath, "module", "web") + serverpath = join(pypath, "module", "web") + path = join(abspath(""), "servers") out = StringIO() - #@TODO rewrite, maybe as hook - - if exists(join("module", "web", "pyload.db")): + if not exists("pyload.db"): #print "########## IMPORTANT ###########" #print "### Database for Webinterface does not exitst, it will not be available." #print "### Please run: python %s syncdb" % join(self.pycore.path, "module", "web", "manage.py") #print "### You have to add at least one User, to gain access to webinterface: python %s createsuperuser" % join(self.pycore.path, "module", "web", "manage.py") #print "### Dont forget to restart pyLoad if you are done." log.warning(_("Database for Webinterface does not exitst, it will not be available.")) - log.warning(_("Please run: python %s syncdb") % join(pypath, "module", "web", "manage.py")) - log.warning(_("You have to add at least one User, to gain access to webinterface: python %s createsuperuser") % join(configdir, "module", "web", "manage.py")) - log.warning(_("Dont forget to restart pyLoad if you are done.")) + log.warning(_("Please run: python pyLoadCore -s")) + log.warning(_("Go through the setup and create a database and add an user to gain access.")) return None try: @@ -70,42 +70,47 @@ class WebServer(threading.Thread): try: - if exists(self.core.config["ssl"]["cert"]) and exists(self.core.config["ssl"]["key"]): - if not exists("ssl.pem"): - key = file(self.core.config["ssl"]["key"], "rb") - cert = file(self.core.config["ssl"]["cert"], "rb") - - pem = file("ssl.pem", "wb") - pem.writelines(key.readlines()) - pem.writelines(cert.readlines()) - - key.close() - cert.close() - pem.close() - + if self.https: + if exists(self.core.config["ssl"]["cert"]) and exists(self.core.config["ssl"]["key"]): + if not exists("ssl.pem"): + key = file(self.core.config["ssl"]["key"], "rb") + cert = file(self.core.config["ssl"]["cert"], "rb") + + pem = file("ssl.pem", "wb") + pem.writelines(key.readlines()) + pem.writelines(cert.readlines()) + + key.close() + cert.close() + pem.close() + + else: + log.warning(_("SSL certificates not found.")) + self.https = False else: - self.https = False + pass except: self.https = False if not self.server in avail: self.server = "builtin" - logger.warning(_("Can't use %(server)s, either python-flup or %(server)s is not installed!") % {"server": self.server}) + log.warning(_("Can't use %(server)s, either python-flup or %(server)s is not installed!") % {"server": self.server}) if self.server == "nginx": - self.core.logger.info(_("Starting nginx Webserver: %s:%s") % (host, port)) - config = file(join(path, "servers", "nginx_default.conf"), "rb") - content = config.readlines() + if not exists(join(path, "nginx")): + makedirs(join(path, "nginx")) + + config = file(join(serverpath, "servers", "nginx_default.conf"), "rb") + content = config.read() config.close() - content = "".join(content) - content = content.replace("%(path)", join(path, "servers")) + content = content.replace("%(path)", join(path, "nginx")) content = content.replace("%(host)", host) content = content.replace("%(port)", str(port)) - content = content.replace("%(media)", join(path, "media")) + content = content.replace("%(media)", join(serverpath, "media")) content = content.replace("%(version)", ".".join(map(str, version_info[0:2]))) if self.https: @@ -113,32 +118,37 @@ class WebServer(threading.Thread): ssl on; ssl_certificate %s; ssl_certificate_key %s; - """ % (self.core.config["ssl"]["cert"], self.core.config["ssl"]["key"])) + """ % (abspath(self.core.config["ssl"]["cert"]), abspath(self.core.config["ssl"]["key"]) )) else: content = content.replace("%(ssl)", "") - new_config = file(join(path, "servers", "nginx.conf"), "wb") + new_config = file(join(path, "nginx.conf"), "wb") new_config.write(content) new_config.close() - command = ['nginx', '-c', join(path, "servers", "nginx.conf"),] + command = ['nginx', '-c', join(path, "nginx.conf")] self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=Output(out)) + log.info(_("Starting nginx Webserver: %s:%s") % (host, port)) import run_fcgi run_fcgi.handle("daemonize=false", "method=threaded", "host=127.0.0.1", "port=9295") elif self.server == "lighttpd": - self.core.logger.info(_("Starting lighttpd Webserver: %s:%s") % (host, port)) - config = file(join(path, "servers", "lighttpd_default.conf"), "rb") + + if not exists(join(path, "lighttpd")): + makedirs(join(path, "lighttpd")) + + + config = file(join(serverpath, "servers", "lighttpd_default.conf"), "rb") content = config.readlines() config.close() content = "".join(content) - content = content.replace("%(path)", join(path, "servers")) + content = content.replace("%(path)", join("servers", "lighttpd")) content = content.replace("%(host)", host) content = content.replace("%(port)", str(port)) - content = content.replace("%(media)", join(path, "media")) + content = content.replace("%(media)", join(serverpath, "media")) content = content.replace("%(version)", ".".join(map(str, version_info[0:2]))) if self.https: @@ -146,16 +156,17 @@ class WebServer(threading.Thread): ssl.engine = "enable" ssl.pemfile = "%s" ssl.ca-file = "%s" - """ % (join(selcorere.path, "ssl.pem"), self.core.config["ssl"]["cert"])) + """ % ("ssl.pem" , self.core.config["ssl"]["cert"]) ) else: content = content.replace("%(ssl)", "") - new_config = file(join(path, "servers", "lighttpd.conf"), "wb") + new_config = file(join("servers", "lighttpd.conf"), "wb") new_config.write(content) new_config.close() - command = ['lighttpd', '-D', '-f', join(path, "servers", "lighttpd.conf")] + command = ['lighttpd', '-D', '-f', join(path, "lighttpd.conf")] self.p = Popen(command, stderr=PIPE, stdin=PIPE, stdout=Output(out)) + log.info(_("Starting lighttpd Webserver: %s:%s") % (host, port)) import run_fcgi run_fcgi.handle("daemonize=false", "method=threaded", "host=127.0.0.1", "port=9295") diff --git a/module/web/cnl/views.py b/module/web/cnl/views.py index fc02d68a7..7bc2ae6d4 100644 --- a/module/web/cnl/views.py +++ b/module/web/cnl/views.py @@ -103,7 +103,8 @@ def addcrypted2(request): jk = list(org) jk.reverse() jk = "".join(jk) - print jk + else: + print "Could not decrypt key, please install py-spidermonkey" else: rt = spidermonkey.Runtime() cx = rt.new_context() diff --git a/module/web/servers/nginx_default.conf b/module/web/servers/nginx_default.conf index 2741ad6ff..b4ebd1e02 100644 --- a/module/web/servers/nginx_default.conf +++ b/module/web/servers/nginx_default.conf @@ -58,7 +58,7 @@ http { server_name %(host); # site_media - folder in uri for static files location ^~ /media { - root %(path)/..; + root %(media)/..; } location ^~ /admin/media { root /usr/lib/python%(version)/site-packages/django/contrib; diff --git a/module/web/settings.py b/module/web/settings.py index 81d6cb8e8..d5a070b69 100644 --- a/module/web/settings.py +++ b/module/web/settings.py @@ -130,7 +130,7 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.csrf.middleware.CsrfViewMiddleware',
+ #'django.contrib.csrf.middleware.CsrfViewMiddleware',
'django.contrib.csrf.middleware.CsrfResponseMiddleware'
)
diff --git a/module/web/templates/default/collector.html b/module/web/templates/default/collector.html index 09725103b..266038af1 100644 --- a/module/web/templates/default/collector.html +++ b/module/web/templates/default/collector.html @@ -125,8 +125,8 @@ document.addEvent("domready", function(){ </span>
<span style="font-size: 15px">{{ child.name }}</span><br />
<div class="child_secrow">
- <span class="child_status">{{ child.status }}</span>{{child.error}}
- <span class="child_status">{{ child.format_size }}/span>
+ <span class="child_status">{{ child.statusmsg }}</span>{{child.error}}
+ <span class="child_status">{{ child.format_size }}</span>
<span class="child_status">{{ child.plugin }}</span>
<span class="child_status">{% trans "Folder:" %} {{child.folder}}</span>
|