summaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authorGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-08-10 14:01:40 +0200
committerGravatar RaNaN <Mast3rRaNaN@hotmail.de> 2010-08-10 14:01:40 +0200
commit85f50861e44565a8ce722cbb1fed2c98f9e5d256 (patch)
tree38ad593a1e574e8c6a98123e7e7ebac0a785e25e /module
parentlittle fix (diff)
downloadpyload-85f50861e44565a8ce722cbb1fed2c98f9e5d256.tar.xz
webservers working, hotfolder hook
Diffstat (limited to 'module')
-rw-r--r--module/FileDatabase.py7
-rw-r--r--module/plugins/hooks/HotFolder.py81
-rw-r--r--module/web/ServerThread.py87
-rw-r--r--module/web/cnl/views.py3
-rw-r--r--module/web/servers/nginx_default.conf2
-rw-r--r--module/web/settings.py2
-rw-r--r--module/web/templates/default/collector.html4
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}}&nbsp;
- <span class="child_status">{{ child.format_size }}/span>
+ <span class="child_status">{{ child.statusmsg }}</span>{{child.error}}&nbsp;
+ <span class="child_status">{{ child.format_size }}</span>
<span class="child_status">{{ child.plugin }}</span>
<span class="child_status">{% trans "Folder:" %} {{child.folder}}</span>
&nbsp;&nbsp;