summaryrefslogtreecommitdiffstats
path: root/module/plugins/container
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/container')
-rw-r--r--module/plugins/container/CCF.py31
-rw-r--r--module/plugins/container/DLC.py71
-rw-r--r--module/plugins/container/DLC_25.pycbin8340 -> 0 bytes
-rw-r--r--module/plugins/container/DLC_26.pycbin8313 -> 0 bytes
-rw-r--r--module/plugins/container/DLC_27.pycbin8237 -> 0 bytes
-rw-r--r--module/plugins/container/LinkList.py20
-rw-r--r--module/plugins/container/RSDF.py27
7 files changed, 111 insertions, 38 deletions
diff --git a/module/plugins/container/CCF.py b/module/plugins/container/CCF.py
index a5a071820..c6e642cca 100644
--- a/module/plugins/container/CCF.py
+++ b/module/plugins/container/CCF.py
@@ -1,28 +1,31 @@
# -*- coding: utf-8 -*-
+from __future__ import with_statement
+
import re
from os import makedirs
-from os.path import exists, join
+from os.path import exists
from urllib2 import build_opener
-from module.lib.MultipartPostHandler import MultipartPostHandler
+from MultipartPostHandler import MultipartPostHandler
+
from module.plugins.Container import Container
+from module.utils import save_join
class CCF(Container):
- __name__ = "CCF"
- __version__ = "0.2"
+ __name__ = "CCF"
+ __version__ = "0.21"
- __pattern__ = r'.+\.ccf'
+ __pattern__ = r'.+\.ccf$'
__description__ = """CCF container decrypter plugin"""
- __author_name__ = "Willnix"
- __author_mail__ = "Willnix@pyload.org"
+ __license__ = "GPLv3"
+ __authors__ = [("Willnix", "Willnix@pyload.org")]
def decrypt(self, pyfile):
-
infile = pyfile.url.replace("\n", "")
opener = build_opener(MultipartPostHandler)
@@ -32,13 +35,9 @@ class CCF(Container):
tempdlc_content = opener.open('http://service.jdownloader.net/dlcrypt/getDLC.php', params).read()
download_folder = self.config['general']['download_folder']
- location = download_folder #join(download_folder, pyfile.package().folder.decode(sys.getfilesystemencoding()))
- if not exists(location):
- makedirs(location)
-
- tempdlc_name = join(location, "tmp_%s.dlc" % pyfile.name)
- tempdlc = open(tempdlc_name, "w")
- tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.DOTALL).group(1))
- tempdlc.close()
+
+ tempdlc_name = save_join(download_folder, "tmp_%s.dlc" % pyfile.name)
+ with open(tempdlc_name, "w") as tempdlc:
+ tempdlc.write(re.search(r'<dlc>(.*)</dlc>', tempdlc_content, re.S).group(1))
self.urls = [tempdlc_name]
diff --git a/module/plugins/container/DLC.py b/module/plugins/container/DLC.py
new file mode 100644
index 000000000..53349c5c7
--- /dev/null
+++ b/module/plugins/container/DLC.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import with_statement
+
+import re
+import xml.dom.minidom
+
+from base64 import standard_b64decode
+from Crypto.Cipher import AES
+
+from module.plugins.Container import Container
+from module.utils import decode
+
+
+class DLC(Container):
+ __name__ = "DLC"
+ __version__ = "0.22"
+ __pattern__ = r'.+\.dlc$'
+
+ __description__ = """DLC container decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("RaNaN", "RaNaN@pyload.org"),
+ ("spoob", "spoob@pyload.org"),
+ ("mkaay", "mkaay@mkaay.de"),
+ ("Schnusch", "Schnusch@users.noreply.github.com"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ def setup(self):
+ self.key = "cb99b5cbc24db398"
+ self.iv = "9bc24cb995cb8db3"
+ self.api_url = "http://service.jdownloader.org/dlcrypt/service.php?srcType=dlc&destType=pylo&data="
+
+
+ def decrypt(self, pyfile):
+ with open(pyfile.url.replace("\n", "")) as dlc:
+ data = dlc.read().strip()
+
+ data += '=' * (-len(data) % 4)
+
+ dlckey = data[-88:]
+ dlcdata = data[:-88]
+ dlcdata = standard_b64decode(dlcdata)
+
+ rc = self.load(self.api_url + dlckey)
+ rc = re.search(r'<rc>(.+)</rc>', rc).group(1)
+ rc = standard_b64decode(rc)
+
+ obj = AES.new(self.key, AES.MODE_CBC, self.iv)
+ dlckey = obj.decrypt(rc)
+ obj = AES.new(dlckey, AES.MODE_CBC, dlckey)
+
+ self.data = standard_b64decode(obj.decrypt(dlcdata))
+ self.packages = [(entry[0] if entry[0] else pyfile.name, entry[1], entry[0] if entry[0] else pyfile.name) \
+ for entry in self.getPackages()]
+
+
+ def getPackages(self):
+ root = xml.dom.minidom.parseString(self.data).documentElement
+ content = root.getElementsByTagName("content")[0]
+ return self.parsePackages(content)
+
+
+ def parsePackages(self, startNode):
+ return [(standard_b64decode(decode(node.getAttribute("name"))), self.parseLinks(node)) \
+ for node in startNode.getElementsByTagName("package")]
+
+
+ def parseLinks(self, startNode):
+ return [standard_b64decode(node.getElementsByTagName("url")[0].firstChild.data) \
+ for node in startNode.getElementsByTagName("file")]
diff --git a/module/plugins/container/DLC_25.pyc b/module/plugins/container/DLC_25.pyc
deleted file mode 100644
index b8fde0051..000000000
--- a/module/plugins/container/DLC_25.pyc
+++ /dev/null
Binary files differ
diff --git a/module/plugins/container/DLC_26.pyc b/module/plugins/container/DLC_26.pyc
deleted file mode 100644
index 41a4e0cb8..000000000
--- a/module/plugins/container/DLC_26.pyc
+++ /dev/null
Binary files differ
diff --git a/module/plugins/container/DLC_27.pyc b/module/plugins/container/DLC_27.pyc
deleted file mode 100644
index a6bffaf74..000000000
--- a/module/plugins/container/DLC_27.pyc
+++ /dev/null
Binary files differ
diff --git a/module/plugins/container/LinkList.py b/module/plugins/container/LinkList.py
index 7e418bd67..9c76c4341 100644
--- a/module/plugins/container/LinkList.py
+++ b/module/plugins/container/LinkList.py
@@ -7,27 +7,25 @@ from module.utils import fs_encode
class LinkList(Container):
- __name__ = "LinkList"
- __version__ = "0.12"
+ __name__ = "LinkList"
+ __version__ = "0.13"
- __pattern__ = r'.+\.txt'
+ __pattern__ = r'.+\.txt$'
__config__ = [("clear", "bool", "Clear Linklist after adding", False),
("encoding", "string", "File encoding (default utf-8)", "")]
__description__ = """Read link lists in txt format"""
- __author_name__ = ("spoob", "jeix")
- __author_mail__ = ("spoob@pyload.org", "jeix@hasnomail.com")
+ __license__ = "GPLv3"
+ __authors__ = [("spoob", "spoob@pyload.org"),
+ ("jeix", "jeix@hasnomail.com")]
def decrypt(self, pyfile):
try:
file_enc = codecs.lookup(self.getConfig("encoding")).name
- except:
+ except Exception:
file_enc = "utf-8"
- print repr(pyfile.url)
- print pyfile.url
-
file_name = fs_encode(pyfile.url)
txt = codecs.open(file_name, 'r', file_enc)
@@ -66,8 +64,8 @@ class LinkList(Container):
try:
txt = open(file_name, 'wb')
txt.close()
- except:
- self.logWarning(_("LinkList could not be cleared."))
+ except Exception:
+ self.logWarning(_("LinkList could not be cleared"))
for name, links in packages.iteritems():
self.packages.append((name, links, name))
diff --git a/module/plugins/container/RSDF.py b/module/plugins/container/RSDF.py
index c35efacc6..0c36293ec 100644
--- a/module/plugins/container/RSDF.py
+++ b/module/plugins/container/RSDF.py
@@ -1,28 +1,32 @@
# -*- coding: utf-8 -*-
+from __future__ import with_statement
+
import base64
import binascii
import re
from module.plugins.Container import Container
+from module.utils import fs_encode
class RSDF(Container):
- __name__ = "RSDF"
- __version__ = "0.22"
+ __name__ = "RSDF"
+ __version__ = "0.25"
- __pattern__ = r'.+\.rsdf'
+ __pattern__ = r'.+\.rsdf$'
__description__ = """RSDF container decrypter plugin"""
- __author_name__ = ("RaNaN", "spoob")
- __author_mail__ = ("RaNaN@pyload.org", "spoob@pyload.org")
+ __license__ = "GPLv3"
+ __authors__ = [("RaNaN", "RaNaN@pyload.org"),
+ ("spoob", "spoob@pyload.org")]
def decrypt(self, pyfile):
from Crypto.Cipher import AES
- infile = pyfile.url.replace("\n", "")
+ infile = fs_encode(pyfile.url.replace("\n", ""))
Key = binascii.unhexlify('8C35192D964DC3182C6F84F3252239EB4A320D2500000000')
IV = binascii.unhexlify('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF')
@@ -31,10 +35,11 @@ class RSDF(Container):
obj = AES.new(Key, AES.MODE_CFB, IV)
- rsdf = open(infile, 'r')
-
- data = rsdf.read()
- rsdf.close()
+ try:
+ with open(infile, 'r') as rsdf:
+ data = rsdf.read()
+ except IOError, e:
+ self.fail(e)
if re.search(r"<title>404 - Not Found</title>", data) is None:
data = binascii.unhexlify(''.join(data.split()))
@@ -48,4 +53,4 @@ class RSDF(Container):
decryptedUrl = link.replace('CCF: ', '')
self.urls.append(decryptedUrl)
- self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links)))
+ self.logDebug("Adding package %s with %d links" % (pyfile.package().name, len(self.urls)))