summaryrefslogtreecommitdiffstats
path: root/module/plugins/crypter
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/crypter')
-rw-r--r--module/plugins/crypter/BitshareComFolder.py9
-rw-r--r--module/plugins/crypter/C1NeonCom.py (renamed from module/plugins/crypter/C1neonCom.py)2
-rw-r--r--module/plugins/crypter/ChipDe.py10
-rw-r--r--module/plugins/crypter/CloudzillaToFolder.py9
-rw-r--r--module/plugins/crypter/CrockoComFolder.py7
-rw-r--r--module/plugins/crypter/CryptItCom.py2
-rw-r--r--module/plugins/crypter/CzshareComFolder.py10
-rw-r--r--module/plugins/crypter/DDLMusicOrg.py51
-rw-r--r--module/plugins/crypter/DailymotionComFolder.py (renamed from module/plugins/crypter/DailymotionBatch.py)21
-rw-r--r--module/plugins/crypter/DataHuFolder.py9
-rw-r--r--module/plugins/crypter/DdlstorageComFolder.py2
-rw-r--r--module/plugins/crypter/DepositfilesComFolder.py7
-rw-r--r--module/plugins/crypter/Dereferer.py37
-rw-r--r--module/plugins/crypter/DevhostStFolder.py40
-rw-r--r--module/plugins/crypter/DlProtectCom.py9
-rw-r--r--module/plugins/crypter/DontKnowMe.py17
-rw-r--r--module/plugins/crypter/DuckCryptInfo.py8
-rw-r--r--module/plugins/crypter/DuploadOrgFolder.py2
-rw-r--r--module/plugins/crypter/EasybytezComFolder.py6
-rw-r--r--module/plugins/crypter/EmbeduploadCom.py22
-rw-r--r--module/plugins/crypter/FilebeerInfoFolder.py2
-rw-r--r--module/plugins/crypter/FilecloudIoFolder.py5
-rw-r--r--module/plugins/crypter/FilecryptCc.py57
-rw-r--r--module/plugins/crypter/FilefactoryComFolder.py5
-rw-r--r--module/plugins/crypter/FilerNetFolder.py13
-rw-r--r--module/plugins/crypter/FileserveComFolder.py10
-rw-r--r--module/plugins/crypter/FilesonicComFolder.py1
-rw-r--r--module/plugins/crypter/FilestubeCom.py9
-rw-r--r--module/plugins/crypter/FiletramCom.py5
-rw-r--r--module/plugins/crypter/FiredriveComFolder.py2
-rw-r--r--module/plugins/crypter/FourChanOrg.py13
-rw-r--r--module/plugins/crypter/FreakhareComFolder.py7
-rw-r--r--module/plugins/crypter/FreetexthostCom.py5
-rw-r--r--module/plugins/crypter/FshareVnFolder.py7
-rw-r--r--module/plugins/crypter/FurLy.py24
-rw-r--r--module/plugins/crypter/Go4UpCom.py16
-rw-r--r--module/plugins/crypter/GooGl.py26
-rw-r--r--module/plugins/crypter/GoogledriveComFolder.py25
-rw-r--r--module/plugins/crypter/HoerbuchIn.py8
-rw-r--r--module/plugins/crypter/HotfileComFolder.py2
-rw-r--r--module/plugins/crypter/ILoadTo.py2
-rw-r--r--module/plugins/crypter/ImgurComAlbum.py5
-rw-r--r--module/plugins/crypter/JunocloudMeFolder.py23
-rw-r--r--module/plugins/crypter/LetitbitNetFolder.py10
-rw-r--r--module/plugins/crypter/LinkCryptWs.py27
-rw-r--r--module/plugins/crypter/LinkSaveIn.py13
-rw-r--r--module/plugins/crypter/LinkdecrypterCom.py15
-rw-r--r--module/plugins/crypter/LixIn.py11
-rw-r--r--module/plugins/crypter/LofCc.py2
-rw-r--r--module/plugins/crypter/MBLinkInfo.py2
-rw-r--r--module/plugins/crypter/MediafireComFolder.py8
-rw-r--r--module/plugins/crypter/MegaCoNzFolder.py12
-rw-r--r--module/plugins/crypter/MegaRapidCzFolder.py7
-rw-r--r--module/plugins/crypter/MegauploadComFolder.py1
-rw-r--r--module/plugins/crypter/Movie2KTo.py (renamed from module/plugins/crypter/Movie2kTo.py)2
-rw-r--r--module/plugins/crypter/MultiUpOrg.py9
-rw-r--r--module/plugins/crypter/MultiloadCz.py24
-rw-r--r--module/plugins/crypter/MultiuploadCom.py4
-rw-r--r--module/plugins/crypter/NCryptIn.py31
-rw-r--r--module/plugins/crypter/NetfolderIn.py63
-rw-r--r--module/plugins/crypter/NosvideoCom.py5
-rw-r--r--module/plugins/crypter/OneKhDe.py8
-rw-r--r--[-rwxr-xr-x]module/plugins/crypter/OronComFolder.py2
-rw-r--r--module/plugins/crypter/PastebinCom.py15
-rw-r--r--module/plugins/crypter/PastedCo.py43
-rw-r--r--module/plugins/crypter/QuickshareCzFolder.py10
-rw-r--r--module/plugins/crypter/RSLayerCom.py2
-rw-r--r--module/plugins/crypter/RapidfileshareNetFolder.py23
-rw-r--r--module/plugins/crypter/RelinkUs.py36
-rw-r--r--module/plugins/crypter/SafelinkingNet.py14
-rw-r--r--module/plugins/crypter/SecuredIn.py2
-rw-r--r--module/plugins/crypter/SexuriaCom.py50
-rw-r--r--module/plugins/crypter/ShSt.py28
-rw-r--r--module/plugins/crypter/ShareLinksBiz.py31
-rw-r--r--module/plugins/crypter/SharingmatrixComFolder.py1
-rw-r--r--module/plugins/crypter/SpeedLoadOrgFolder.py2
-rw-r--r--module/plugins/crypter/StealthTo.py2
-rw-r--r--module/plugins/crypter/TNTVillageScambioeticoOrg.py31
-rw-r--r--module/plugins/crypter/TinyurlCom.py23
-rw-r--r--module/plugins/crypter/TnyCz.py9
-rw-r--r--module/plugins/crypter/TrailerzoneInfo.py2
-rw-r--r--module/plugins/crypter/TurbobitNetFolder.py5
-rw-r--r--module/plugins/crypter/TusfilesNetFolder.py10
-rw-r--r--module/plugins/crypter/UlozToFolder.py12
-rw-r--r--module/plugins/crypter/UploadableChFolder.py7
-rw-r--r--module/plugins/crypter/UploadedToFolder.py25
-rw-r--r--module/plugins/crypter/WiiReloadedOrg.py2
-rw-r--r--module/plugins/crypter/WuploadComFolder.py1
-rw-r--r--module/plugins/crypter/XFileSharingProFolder.py17
-rw-r--r--module/plugins/crypter/XupPl.py8
-rw-r--r--module/plugins/crypter/YoutubeComFolder.py (renamed from module/plugins/crypter/YoutubeBatch.py)27
91 files changed, 631 insertions, 615 deletions
diff --git a/module/plugins/crypter/BitshareComFolder.py b/module/plugins/crypter/BitshareComFolder.py
index c70a849b6..f0dd9e570 100644
--- a/module/plugins/crypter/BitshareComFolder.py
+++ b/module/plugins/crypter/BitshareComFolder.py
@@ -6,11 +6,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class BitshareComFolder(SimpleCrypter):
__name__ = "BitshareComFolder"
__type__ = "crypter"
- __version__ = "0.03"
+ __version__ = "0.04"
__pattern__ = r'http://(?:www\.)?bitshare\.com/\?d=\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Bitshare.com folder decrypter plugin"""
__license__ = "GPLv3"
@@ -18,7 +19,7 @@ class BitshareComFolder(SimpleCrypter):
LINK_PATTERN = r'<a href="(http://bitshare\.com/files/.+)">.+</a></td>'
- NAME_PATTERN = r'View public folder "(?P<N>.+)"</h1>'
+ NAME_PATTERN = r'View public folder "(?P<N>.+?)"</h1>'
getInfo = create_getInfo(BitshareComFolder)
diff --git a/module/plugins/crypter/C1neonCom.py b/module/plugins/crypter/C1NeonCom.py
index 926633ff7..9b6093081 100644
--- a/module/plugins/crypter/C1neonCom.py
+++ b/module/plugins/crypter/C1NeonCom.py
@@ -9,7 +9,7 @@ class C1NeonCom(DeadCrypter):
__version__ = "0.05"
__pattern__ = r'http://(?:www\.)?c1neon\.com/.+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """C1neon.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/ChipDe.py b/module/plugins/crypter/ChipDe.py
index 133e5a005..6938a2225 100644
--- a/module/plugins/crypter/ChipDe.py
+++ b/module/plugins/crypter/ChipDe.py
@@ -1,17 +1,17 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class ChipDe(Crypter):
__name__ = "ChipDe"
__type__ = "crypter"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'http://(?:www\.)?chip\.de/video/.+\.html'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Chip.de decrypter plugin"""
__license__ = "GPLv3"
@@ -22,7 +22,7 @@ class ChipDe(Crypter):
self.html = self.load(pyfile.url)
try:
f = re.search(r'"(http://video\.chip\.de/.+)"', self.html)
- except:
+ except Exception:
self.fail(_("Failed to find the URL"))
else:
self.urls = [f.group(1)]
diff --git a/module/plugins/crypter/CloudzillaToFolder.py b/module/plugins/crypter/CloudzillaToFolder.py
index c156d4de4..96d7245f1 100644
--- a/module/plugins/crypter/CloudzillaToFolder.py
+++ b/module/plugins/crypter/CloudzillaToFolder.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -10,7 +9,7 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class CloudzillaToFolder(SimpleHoster):
__name__ = "CloudzillaToFolder"
__type__ = "crypter"
- __version__ = "0.01"
+ __version__ = "0.02"
__pattern__ = r'http://(?:www\.)?cloudzilla\.to/share/folder/(?P<ID>[\w^_]+)'
@@ -36,8 +35,4 @@ class CloudzillaToFolder(SimpleHoster):
self.retry(reason="Wrong password")
- def getLinks(self):
- return [urljoin("http://www.cloudzilla.to", link) for link in super(CloudzillaToFolder, self).getLinks()]
-
-
getInfo = create_getInfo(CloudzillaToFolder)
diff --git a/module/plugins/crypter/CrockoComFolder.py b/module/plugins/crypter/CrockoComFolder.py
index 57bb339ff..f56cc449a 100644
--- a/module/plugins/crypter/CrockoComFolder.py
+++ b/module/plugins/crypter/CrockoComFolder.py
@@ -9,15 +9,16 @@ class CrockoComFolder(SimpleCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?crocko\.com/f/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Crocko.com folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- LINK_PATTERN = r'<td class="last"><a href="([^"]+)">download</a>'
+ LINK_PATTERN = r'<td class="last"><a href="(.+?)">download</a>'
getInfo = create_getInfo(CrockoComFolder)
diff --git a/module/plugins/crypter/CryptItCom.py b/module/plugins/crypter/CryptItCom.py
index 2cf4e9f62..1c9e841b7 100644
--- a/module/plugins/crypter/CryptItCom.py
+++ b/module/plugins/crypter/CryptItCom.py
@@ -9,7 +9,7 @@ class CryptItCom(DeadCrypter):
__version__ = "0.11"
__pattern__ = r'http://(?:www\.)?crypt-it\.com/(s|e|d|c)/\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Crypt-it.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/CzshareComFolder.py b/module/plugins/crypter/CzshareComFolder.py
index 5623a4093..5b5e6fd27 100644
--- a/module/plugins/crypter/CzshareComFolder.py
+++ b/module/plugins/crypter/CzshareComFolder.py
@@ -1,17 +1,17 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class CzshareComFolder(Crypter):
__name__ = "CzshareComFolder"
__type__ = "crypter"
- __version__ = "0.20"
+ __version__ = "0.21"
__pattern__ = r'http://(?:www\.)?(czshare|sdilej)\.(com|cz)/folders/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Czshare.com folder decrypter plugin, now Sdilej.cz"""
__license__ = "GPLv3"
@@ -19,7 +19,7 @@ class CzshareComFolder(Crypter):
FOLDER_PATTERN = r'<tr class="subdirectory">\s*<td>\s*<table>(.*?)</table>'
- LINK_PATTERN = r'<td class="col2"><a href="([^"]+)">info</a></td>'
+ LINK_PATTERN = r'<td class="col2"><a href="(.+?)">info</a></td>'
def decrypt(self, pyfile):
diff --git a/module/plugins/crypter/DDLMusicOrg.py b/module/plugins/crypter/DDLMusicOrg.py
deleted file mode 100644
index 55181e9ad..000000000
--- a/module/plugins/crypter/DDLMusicOrg.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import re
-
-from time import sleep
-
-from module.plugins.Crypter import Crypter
-
-
-class DDLMusicOrg(Crypter):
- __name__ = "DDLMusicOrg"
- __type__ = "crypter"
- __version__ = "0.30"
-
- __pattern__ = r'http://(?:www\.)?ddl-music\.org/captcha/ddlm_cr\d\.php\?\d+\?\d+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
-
- __description__ = """Ddl-music.org decrypter plugin"""
- __license__ = "GPLv3"
- __authors__ = [("mkaay", "mkaay@mkaay.de")]
-
-
- def setup(self):
- self.multiDL = False
-
-
- def decrypt(self, pyfile):
- html = self.load(pyfile.url, cookies=True)
-
- if re.search(r"Wer dies nicht rechnen kann", html) is not None:
- self.offline()
-
- math = re.search(r"(\d+) ([+-]) (\d+) =\s+<inp", self.html)
- id = re.search(r"name=\"id\" value=\"(\d+)\"", self.html).group(1)
- linknr = re.search(r"name=\"linknr\" value=\"(\d+)\"", self.html).group(1)
-
- solve = ""
- if math.group(2) == "+":
- solve = int(math.group(1)) + int(math.group(3))
- else:
- solve = int(math.group(1)) - int(math.group(3))
- sleep(3)
- htmlwithlink = self.load(pyfile.url, cookies=True,
- post={"calc%s" % linknr: solve, "send%s" % linknr: "Send", "id": id,
- "linknr": linknr})
- m = re.search(r"<form id=\"ff\" action=\"(.*?)\" method=\"post\">", htmlwithlink)
- if m:
- self.urls = [m.group(1)]
- else:
- self.retry()
diff --git a/module/plugins/crypter/DailymotionBatch.py b/module/plugins/crypter/DailymotionComFolder.py
index 8d4cb64df..2458b15b1 100644
--- a/module/plugins/crypter/DailymotionBatch.py
+++ b/module/plugins/crypter/DailymotionComFolder.py
@@ -1,22 +1,21 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
from module.utils import save_join
-class DailymotionBatch(Crypter):
- __name__ = "DailymotionBatch"
+class DailymotionComFolder(Crypter):
+ __name__ = "DailymotionComFolder"
__type__ = "crypter"
- __version__ = "0.01"
+ __version__ = "0.02"
__pattern__ = r'https?://(?:www\.)?dailymotion\.com/((playlists/)?(?P<TYPE>playlist|user)/)?(?P<ID>[\w^_]+)(?(TYPE)|#)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Dailymotion.com channel & playlist decrypter"""
__license__ = "GPLv3"
@@ -24,9 +23,9 @@ class DailymotionBatch(Crypter):
def api_response(self, ref, req=None):
- url = urljoin("https://api.dailymotion.com/", ref)
- page = self.load(url, get=req)
- return json_loads(page)
+ url = urlparse.urljoin("https://api.dailymotion.com/", ref)
+ html = self.load(url, get=req)
+ return json_loads(html)
def getPlaylistInfo(self, id):
diff --git a/module/plugins/crypter/DataHuFolder.py b/module/plugins/crypter/DataHuFolder.py
index a5602d6c6..c0fe26869 100644
--- a/module/plugins/crypter/DataHuFolder.py
+++ b/module/plugins/crypter/DataHuFolder.py
@@ -8,11 +8,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class DataHuFolder(SimpleCrypter):
__name__ = "DataHuFolder"
__type__ = "crypter"
- __version__ = "0.06"
+ __version__ = "0.07"
__pattern__ = r'http://(?:www\.)?data\.hu/dir/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Data.hu folder decrypter plugin"""
__license__ = "GPLv3"
@@ -21,7 +22,7 @@ class DataHuFolder(SimpleCrypter):
LINK_PATTERN = r'<a href=\'(http://data\.hu/get/.+)\' target=\'_blank\'>\1</a>'
- NAME_PATTERN = ur'<title>(?P<N>.+) Let\xf6lt\xe9se</title>'
+ NAME_PATTERN = ur'<title>(?P<N>.+?) Let\xf6lt\xe9se</title>'
def prepare(self):
diff --git a/module/plugins/crypter/DdlstorageComFolder.py b/module/plugins/crypter/DdlstorageComFolder.py
index e02e77fda..dc6ec1da5 100644
--- a/module/plugins/crypter/DdlstorageComFolder.py
+++ b/module/plugins/crypter/DdlstorageComFolder.py
@@ -9,7 +9,7 @@ class DdlstorageComFolder(DeadCrypter):
__version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?ddlstorage\.com/folder/\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """DDLStorage.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/DepositfilesComFolder.py b/module/plugins/crypter/DepositfilesComFolder.py
index 147f093c3..46ec265c3 100644
--- a/module/plugins/crypter/DepositfilesComFolder.py
+++ b/module/plugins/crypter/DepositfilesComFolder.py
@@ -9,15 +9,16 @@ class DepositfilesComFolder(SimpleCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?depositfiles\.com/folders/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Depositfiles.com folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- LINK_PATTERN = r'<div class="progressName"[^>]*>\s*<a href="([^"]+)" title="[^"]*" target="_blank">'
+ LINK_PATTERN = r'<div class="progressName".*?>\s*<a href="(.+?)" title=".+?" target="_blank">'
getInfo = create_getInfo(DepositfilesComFolder)
diff --git a/module/plugins/crypter/Dereferer.py b/module/plugins/crypter/Dereferer.py
index 0729c8cb6..5c73b2622 100644
--- a/module/plugins/crypter/Dereferer.py
+++ b/module/plugins/crypter/Dereferer.py
@@ -1,17 +1,40 @@
# -*- coding: utf-8 -*-
-from module.plugins.internal.SimpleDereferer import SimpleDereferer
+import re
+from module.plugins.internal.SimpleCrypter import SimpleCrypter
-class Dereferer(SimpleDereferer):
+
+class Dereferer(SimpleCrypter):
__name__ = "Dereferer"
__type__ = "crypter"
- __version__ = "0.11"
+ __version__ = "0.16"
- __pattern__ = r'https?://([^/]+)/.*?(?P<LINK>(ht|f)tps?(://|%3A%2F%2F).+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'https?://(?:www\.)?(?:\w+\.)*?(?P<DOMAIN>(?:[\d.]+|[\w\-]{3,}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/.*?(?P<LINK>(?:ht|f)tps?://.+)'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Crypter for dereferers"""
__license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = None
+ HOSTER_NAME = None
+
+
+ def _log(self, type, args):
+ return super(Dereferer, self)._log(type, (self.HOSTER_NAME,) + args)
+
+
+ def init(self):
+ super(Dereferer, self).init()
+
+ self.__pattern__ = self.core.pluginManager.crypterPlugins[self.__name__]['pattern'] #@TODO: Recheck in 0.4.10
+
+ self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group("DOMAIN").lower()
+ self.HOSTER_NAME = "".join(part.capitalize() for part in re.split(r'(\.|\d+)', self.HOSTER_DOMAIN) if part != '.')
+
+
+ def getLinks(self):
+ return [re.match(self.__pattern__, self.pyfile.url).group('LINK').strip()]
diff --git a/module/plugins/crypter/DevhostStFolder.py b/module/plugins/crypter/DevhostStFolder.py
index 5ac9d4faf..4d15e2058 100644
--- a/module/plugins/crypter/DevhostStFolder.py
+++ b/module/plugins/crypter/DevhostStFolder.py
@@ -4,8 +4,7 @@
# http://d-h.st/users/shine/?fld_id=37263#files
import re
-
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -13,11 +12,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class DevhostStFolder(SimpleCrypter):
__name__ = "DevhostStFolder"
__type__ = "crypter"
- __version__ = "0.03"
+ __version__ = "0.05"
__pattern__ = r'http://(?:www\.)?d-h\.st/users/(?P<USER>\w+)(/\?fld_id=(?P<ID>\d+))?'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """d-h.st folder decrypter plugin"""
__license__ = "GPLv3"
@@ -25,37 +25,41 @@ class DevhostStFolder(SimpleCrypter):
("Walter Purcaro", "vuolter@gmail.com")]
- LINK_PATTERN = r'(?:/> |;">)<a href="(.+?)"(?!>Back to \w+<)'
+ LINK_PATTERN = r'(?:/> |;">)<a href="(.+?)"(?!>Back to \w+<)'
OFFLINE_PATTERN = r'"/cHP">test\.png<'
- def getFileInfo(self):
- if re.search(self.OFFLINE_PATTERN, self.html):
- self.offline()
+ def checkNameSize(self, getinfo=True):
+ if not self.info or getinfo:
+ self.logDebug("File info (BEFORE): %s" % self.info)
+ self.info.update(self.getInfo(self.pyfile.url, self.html))
+ self.logDebug("File info (AFTER): %s" % self.info)
try:
- id = re.match(self.__pattern__, self.pyfile.url).group('ID')
- if id == "0":
+ if self.info['pattern']['ID'] == "0":
raise
p = r'href="(.+?)">Back to \w+<'
m = re.search(p, self.html)
- html = self.load(urljoin("http://d-h.st", m.group(1)),
+ html = self.load(urlparse.urljoin("http://d-h.st", m.group(1)),
cookies=False)
- p = '\?fld_id=%s.*?">(.+?)<' % id
+ p = '\?fld_id=%s.*?">(.+?)<' % self.info['pattern']['ID']
m = re.search(p, html)
- name = folder = m.group(1)
+ self.pyfile.name = m.group(1)
except Exception, e:
self.logDebug(e)
- name = folder = re.match(self.__pattern__, self.pyfile.url).group('USER')
+ self.pyfile.name = self.info['pattern']['USER']
- return {'name': name, 'folder': folder}
+ try:
+ folder = self.info['folder'] = self.pyfile.name
+ except Exception:
+ pass
- def getLinks(self):
- return [urljoin("http://d-h.st", link) for link in re.findall(self.LINK_PATTERN, self.html)]
+ self.logDebug("File name: %s" % self.pyfile.name,
+ "File folder: %s" % self.pyfile.name)
getInfo = create_getInfo(DevhostStFolder)
diff --git a/module/plugins/crypter/DlProtectCom.py b/module/plugins/crypter/DlProtectCom.py
index 4a188aa83..a9f39c6f3 100644
--- a/module/plugins/crypter/DlProtectCom.py
+++ b/module/plugins/crypter/DlProtectCom.py
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
import re
+import time
from base64 import urlsafe_b64encode
-from time import time
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -14,8 +14,9 @@ class DlProtectCom(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?dl-protect\.com/((en|fr)/)?\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Dl-protect.com decrypter plugin"""
__license__ = "GPLv3"
@@ -40,7 +41,7 @@ class DlProtectCom(SimpleCrypter):
self.wait(2)
else:
- mstime = int(round(time() * 1000))
+ mstime = int(round(time.time() * 1000))
b64time = "_" + urlsafe_b64encode(str(mstime)).replace("=", "%3D")
post_req.update({'i' : b64time,
diff --git a/module/plugins/crypter/DontKnowMe.py b/module/plugins/crypter/DontKnowMe.py
deleted file mode 100644
index d656cde4c..000000000
--- a/module/plugins/crypter/DontKnowMe.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.SimpleDereferer import SimpleDereferer
-
-
-class DontKnowMe(SimpleDereferer):
- __name__ = "DontKnowMe"
- __type__ = "crypter"
- __version__ = "0.11"
-
- __pattern__ = r'http://(?:www\.)?dontknow\.me/at/\?(?P<LINK>.+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
-
- __description__ = """DontKnow.me decrypter plugin"""
- __license__ = "GPLv3"
- __authors__ = [("selaux", "")]
diff --git a/module/plugins/crypter/DuckCryptInfo.py b/module/plugins/crypter/DuckCryptInfo.py
index 07cc5cdc4..631ed00b7 100644
--- a/module/plugins/crypter/DuckCryptInfo.py
+++ b/module/plugins/crypter/DuckCryptInfo.py
@@ -4,17 +4,17 @@ import re
from BeautifulSoup import BeautifulSoup
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class DuckCryptInfo(Crypter):
__name__ = "DuckCryptInfo"
__type__ = "crypter"
- __version__ = "0.02"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?duckcrypt\.info/(folder|wait|link)/(\w+)/?(\w*)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """DuckCrypt.info decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/DuploadOrgFolder.py b/module/plugins/crypter/DuploadOrgFolder.py
index 066fbe3d7..d505806b7 100644
--- a/module/plugins/crypter/DuploadOrgFolder.py
+++ b/module/plugins/crypter/DuploadOrgFolder.py
@@ -9,7 +9,7 @@ class DuploadOrgFolder(DeadCrypter):
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?dupload\.org/folder/\d+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Dupload.org folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/EasybytezComFolder.py b/module/plugins/crypter/EasybytezComFolder.py
index 04f9b853b..fdd3d4ff4 100644
--- a/module/plugins/crypter/EasybytezComFolder.py
+++ b/module/plugins/crypter/EasybytezComFolder.py
@@ -9,16 +9,14 @@ class EasybytezComFolder(XFSCrypter):
__version__ = "0.10"
__pattern__ = r'http://(?:www\.)?easybytez\.com/users/\d+/\d+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Easybytez.com folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- HOSTER_DOMAIN = "easybytez.com"
-
LOGIN_ACCOUNT = True
diff --git a/module/plugins/crypter/EmbeduploadCom.py b/module/plugins/crypter/EmbeduploadCom.py
index be3181793..221e365fa 100644
--- a/module/plugins/crypter/EmbeduploadCom.py
+++ b/module/plugins/crypter/EmbeduploadCom.py
@@ -1,27 +1,27 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
from module.network.HTTPRequest import BadHeader
class EmbeduploadCom(Crypter):
__name__ = "EmbeduploadCom"
__type__ = "crypter"
- __version__ = "0.02"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?embedupload\.com/\?d=.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
- ("preferedHoster", "str", "Prefered hoster list (bar-separated)", "embedupload"),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated)", "")]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True ),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package" , True ),
+ ("preferedHoster" , "str" , "Prefered hoster list (bar-separated)", "embedupload"),
+ ("ignoredHoster" , "str" , "Ignored hoster list (bar-separated)" , "" )]
__description__ = """EmbedUpload.com decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- LINK_PATTERN = r'<div id="([^"]+)"[^>]*>\s*<a href="([^"]+)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
+ LINK_PATTERN = r'<div id="(.+?)".*?>\s*<a href="(.+?)" target="_blank" (?:class="DownloadNow"|style="color:red")>'
def decrypt(self, pyfile):
@@ -30,21 +30,21 @@ class EmbeduploadCom(Crypter):
m = re.findall(self.LINK_PATTERN, self.html)
if m:
- prefered_set = set(self.getConfig("preferedHoster").split('|'))
+ prefered_set = set(self.getConfig('preferedHoster').split('|'))
prefered_set = map(lambda s: s.lower().split('.')[0], prefered_set)
self.logDebug("PF: %s" % prefered_set)
- tmp_links.extend([x[1] for x in m if x[0] in prefered_set])
+ tmp_links.extend(x[1] for x in m if x[0] in prefered_set)
self.urls = self.getLocation(tmp_links)
if not self.urls:
- ignored_set = set(self.getConfig("ignoredHoster").split('|'))
+ ignored_set = set(self.getConfig('ignoredHoster').split('|'))
ignored_set = map(lambda s: s.lower().split('.')[0], ignored_set)
self.logDebug("IG: %s" % ignored_set)
- tmp_links.extend([x[1] for x in m if x[0] not in ignored_set])
+ tmp_links.extend(x[1] for x in m if x[0] not in ignored_set)
self.urls = self.getLocation(tmp_links)
diff --git a/module/plugins/crypter/FilebeerInfoFolder.py b/module/plugins/crypter/FilebeerInfoFolder.py
index a3c7ee74c..5b401c555 100644
--- a/module/plugins/crypter/FilebeerInfoFolder.py
+++ b/module/plugins/crypter/FilebeerInfoFolder.py
@@ -9,7 +9,7 @@ class FilebeerInfoFolder(DeadCrypter):
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?filebeer\.info/\d*~f\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Filebeer.info folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FilecloudIoFolder.py b/module/plugins/crypter/FilecloudIoFolder.py
index 83cce352d..f900f4910 100644
--- a/module/plugins/crypter/FilecloudIoFolder.py
+++ b/module/plugins/crypter/FilecloudIoFolder.py
@@ -9,8 +9,9 @@ class FilecloudIoFolder(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?(filecloud\.io|ifile\.it)/_\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Filecloud.io folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FilecryptCc.py b/module/plugins/crypter/FilecryptCc.py
index af31dc743..2271a7b6d 100644
--- a/module/plugins/crypter/FilecryptCc.py
+++ b/module/plugins/crypter/FilecryptCc.py
@@ -1,20 +1,22 @@
# -*- coding: utf-8 -*-
+#
+# Test links:
+# http://filecrypt.cc/Container/64E039F859.html
-import base64
import binascii
import re
+import urlparse
from Crypto.Cipher import AES
-from urlparse import urljoin
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import ReCaptcha
+from module.plugins.internal.Crypter import Crypter
+from module.plugins.internal.ReCaptcha import ReCaptcha
class FilecryptCc(Crypter):
__name__ = "FilecryptCc"
__type__ = "crypter"
- __version__ = "0.09"
+ __version__ = "0.16"
__pattern__ = r'https?://(?:www\.)?filecrypt\.cc/Container/\w+'
@@ -31,7 +33,7 @@ class FilecryptCc(Crypter):
CAPTCHA_PATTERN = r'<img id="nc" src="(.+?)"'
CIRCLE_CAPTCHA_PATTERN = r'<input type="image" src="(.+?)"'
- MIRROR_PAGE_PATTERN = r'"[\w]*" href="(http://filecrypt.cc/Container/\w+\.html\?mirror=\d+)">'
+ MIRROR_PAGE_PATTERN = r'"[\w]*" href="(https?://(?:www\.)?filecrypt.cc/Container/\w+\.html\?mirror=\d+)">'
def setup(self):
@@ -39,7 +41,8 @@ class FilecryptCc(Crypter):
def decrypt(self, pyfile):
- self.html = self.load(pyfile.url, cookies=True)
+ self.html = self.load(pyfile.url)
+ self.base_url = self.pyfile.url.split("Container")[0]
if "content notfound" in self.html: #@NOTE: "content notfound" is NOT a typo
self.offline()
@@ -64,7 +67,7 @@ class FilecryptCc(Crypter):
self.logInfo(_("Found %d mirrors") % len(mirror))
for i in mirror[1:]:
- self.siteWithLinks = self.siteWithLinks + self.load(i, cookies=True).decode("utf-8", "replace")
+ self.siteWithLinks = self.siteWithLinks + self.load(i).decode("utf-8", "replace")
def handlePasswordProtection(self):
@@ -78,7 +81,7 @@ class FilecryptCc(Crypter):
if not password:
self.fail(_("Please enter the password in package section and try again"))
- self.html = self.load(self.pyfile.url, post={"password": password}, cookies=True)
+ self.html = self.load(self.pyfile.url, post={"password": password})
def handleCaptcha(self):
@@ -88,40 +91,37 @@ class FilecryptCc(Crypter):
if m: #: normal captcha
self.logDebug("Captcha-URL: %s" % m.group(1))
- captcha_code = self.decryptCaptcha(urljoin("http://filecrypt.cc", m.group(1)),
+ captcha_code = self.decryptCaptcha(urlparse.urljoin(self.base_url, m.group(1)),
forceUser=True,
imgtype="gif")
self.siteWithLinks = self.load(self.pyfile.url,
post={'recaptcha_response_field': captcha_code},
- cookies=True,
decode=True)
elif m2: #: circle captcha
self.logDebug("Captcha-URL: %s" % m2.group(1))
- captcha_code = self.decryptCaptcha(urljoin("http://filecrypt.cc", m2.group(1)),
- forceUser=True,
- imgtype="gif",
+ captcha_code = self.decryptCaptcha('%s%s?c=abc' %(self.base_url, m2.group(1)),
result_type='positional')
self.siteWithLinks = self.load(self.pyfile.url,
post={'button.x': captcha_code[0], 'button.y': captcha_code[1]},
- cookies=True,
decode=True)
+
else:
recaptcha = ReCaptcha(self)
captcha_key = recaptcha.detect_key()
if captcha_key:
- self.siteWithLinks = self.load(self.pyfile.url,
- post={'g-recaptcha-response': recaptcha.challenge(captcha_key, True)},
- cookies=True,
- decode=True)
+ response, challenge = recaptcha.challenge(captcha_key)
+ self.siteWithLinks = self.load(self.pyfile.url,
+ post={'g-recaptcha-response': response},
+ decode=True)
else:
- self.logDebug("No captcha found")
+ self.logInfo(_("No captcha found"))
self.siteWithLinks = self.html
- if "recaptcha_image" in self.siteWithLinks:
+ if "recaptcha_image" in self.siteWithLinks or "data-sitekey" in self.siteWithLinks:
self.invalidCaptcha()
self.retry()
@@ -133,7 +133,7 @@ class FilecryptCc(Crypter):
return
for i in dlc:
- self.links.append("http://filecrypt.cc/DLC/%s.dlc" % i)
+ self.links.append("%s/DLC/%s.dlc" % (self.base_url, i))
def handleWeblinks(self):
@@ -141,9 +141,9 @@ class FilecryptCc(Crypter):
weblinks = re.findall(self.WEBLINK_PATTERN, self.siteWithLinks)
for link in weblinks:
- res = self.load("http://filecrypt.cc/Link/%s.html" % link, cookies=True)
+ res = self.load("%s/Link/%s.html" % (self.base_url, link))
link2 = re.search('<iframe noresize src="(.*)"></iframe>', res)
- res2 = self.load(link2.group(1), just_header=True, cookies=True)
+ res2 = self.load(link2.group(1), just_header=True)
self.links.append(res2['location'])
except Exception, e:
@@ -166,17 +166,14 @@ class FilecryptCc(Crypter):
# Get key
key = binascii.unhexlify(str(jk))
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
# Decrypt
Key = key
IV = key
obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
+ text = obj.decrypt(crypted.decode('base64'))
# Extract links
- links = filter(lambda x: x != "",
- text.replace("\x00", "").replace("\r", "").split("\n"))
+ text = text.replace("\x00", "").replace("\r", "")
+ links = filter(bool, text.split('\n'))
return links
diff --git a/module/plugins/crypter/FilefactoryComFolder.py b/module/plugins/crypter/FilefactoryComFolder.py
index 261c7e01a..c0cd028cc 100644
--- a/module/plugins/crypter/FilefactoryComFolder.py
+++ b/module/plugins/crypter/FilefactoryComFolder.py
@@ -9,8 +9,9 @@ class FilefactoryComFolder(SimpleCrypter):
__version__ = "0.32"
__pattern__ = r'https?://(?:www\.)?filefactory\.com/(?:f|folder)/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Filefactory.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FilerNetFolder.py b/module/plugins/crypter/FilerNetFolder.py
index 00db173bb..e2b44e868 100644
--- a/module/plugins/crypter/FilerNetFolder.py
+++ b/module/plugins/crypter/FilerNetFolder.py
@@ -6,11 +6,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class FilerNetFolder(SimpleCrypter):
__name__ = "FilerNetFolder"
__type__ = "crypter"
- __version__ = "0.41"
+ __version__ = "0.42"
__pattern__ = r'https?://filer\.net/folder/\w{16}'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Filer.net decrypter plugin"""
__license__ = "GPLv3"
@@ -19,11 +20,9 @@ class FilerNetFolder(SimpleCrypter):
LINK_PATTERN = r'href="(/get/\w{16})">(?!<)'
- NAME_PATTERN = r'<h3>(?P<N>.+?) - <small'
-
- def getLinks(self):
- return ['http://filer.net%s' % link for link in re.findall(self.LINK_PATTERN, self.html)]
+ NAME_PATTERN = r'<h3>(?P<N>.+?) - <small'
+ OFFLINE_PATTERN = r'Nicht gefunden'
getInfo = create_getInfo(FilerNetFolder)
diff --git a/module/plugins/crypter/FileserveComFolder.py b/module/plugins/crypter/FileserveComFolder.py
index e6b35fd36..edd7562df 100644
--- a/module/plugins/crypter/FileserveComFolder.py
+++ b/module/plugins/crypter/FileserveComFolder.py
@@ -2,17 +2,17 @@
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class FileserveComFolder(Crypter):
__name__ = "FileserveComFolder"
__type__ = "crypter"
- __version__ = "0.11"
+ __version__ = "0.12"
__pattern__ = r'http://(?:www\.)?fileserve\.com/list/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """FileServe.com folder decrypter plugin"""
__license__ = "GPLv3"
@@ -20,7 +20,7 @@ class FileserveComFolder(Crypter):
FOLDER_PATTERN = r'<table class="file_list">(.*?)</table>'
- LINK_PATTERN = r'<a href="([^"]+)" class="sheet_icon wbold">'
+ LINK_PATTERN = r'<a href="(.+?)" class="sheet_icon wbold">'
def decrypt(self, pyfile):
diff --git a/module/plugins/crypter/FilesonicComFolder.py b/module/plugins/crypter/FilesonicComFolder.py
index d58516986..6cd4d8b8c 100644
--- a/module/plugins/crypter/FilesonicComFolder.py
+++ b/module/plugins/crypter/FilesonicComFolder.py
@@ -9,6 +9,7 @@ class FilesonicComFolder(DeadCrypter):
__version__ = "0.12"
__pattern__ = r'http://(?:www\.)?filesonic\.com/folder/\w+'
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Filesonic.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FilestubeCom.py b/module/plugins/crypter/FilestubeCom.py
index 16ebdda37..9e6b5c114 100644
--- a/module/plugins/crypter/FilestubeCom.py
+++ b/module/plugins/crypter/FilestubeCom.py
@@ -6,11 +6,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class FilestubeCom(SimpleCrypter):
__name__ = "FilestubeCom"
__type__ = "crypter"
- __version__ = "0.05"
+ __version__ = "0.06"
__pattern__ = r'http://(?:www\.)?filestube\.(?:com|to)/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Filestube.com decrypter plugin"""
__license__ = "GPLv3"
@@ -18,7 +19,7 @@ class FilestubeCom(SimpleCrypter):
LINK_PATTERN = r'<a class=\"file-link-main(?: noref)?\" [^>]* href=\"(http://[^\"]+)'
- NAME_PATTERN = r'<h1\s*> (?P<N>.+) download\s*</h1>'
+ NAME_PATTERN = r'<h1\s*> (?P<N>.+?) download\s*</h1>'
getInfo = create_getInfo(FilestubeCom)
diff --git a/module/plugins/crypter/FiletramCom.py b/module/plugins/crypter/FiletramCom.py
index 76530c589..b012d35bc 100644
--- a/module/plugins/crypter/FiletramCom.py
+++ b/module/plugins/crypter/FiletramCom.py
@@ -9,8 +9,9 @@ class FiletramCom(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?filetram\.com/[^/]+/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Filetram.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FiredriveComFolder.py b/module/plugins/crypter/FiredriveComFolder.py
index 7d3a357fd..792f3198b 100644
--- a/module/plugins/crypter/FiredriveComFolder.py
+++ b/module/plugins/crypter/FiredriveComFolder.py
@@ -9,7 +9,7 @@ class FiredriveComFolder(DeadCrypter):
__version__ = "0.03"
__pattern__ = r'https?://(?:www\.)?(firedrive|putlocker)\.com/share/.+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Firedrive.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FourChanOrg.py b/module/plugins/crypter/FourChanOrg.py
index c3fe3db4b..f3195fe02 100644
--- a/module/plugins/crypter/FourChanOrg.py
+++ b/module/plugins/crypter/FourChanOrg.py
@@ -3,18 +3,19 @@
# Based on 4chandl by Roland Beermann (https://gist.github.com/enkore/3492599)
import re
+import urlparse
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class FourChanOrg(Crypter):
__name__ = "FourChanOrg"
__type__ = "crypter"
- __version__ = "0.31"
+ __version__ = "0.32"
__pattern__ = r'http://(?:www\.)?boards\.4chan\.org/\w+/res/(\d+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """4chan.org folder decrypter plugin"""
__license__ = "GPLv3"
@@ -23,5 +24,5 @@ class FourChanOrg(Crypter):
def decrypt(self, pyfile):
pagehtml = self.load(pyfile.url)
- images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]*)', pagehtml))
- self.urls = ["http://" + image for image in images]
+ images = set(re.findall(r'(images\.4chan\.org/[^/]*/src/[^"<]+)', pagehtml))
+ self.urls = [urlparse.urljoin("http://", image) for image in images]
diff --git a/module/plugins/crypter/FreakhareComFolder.py b/module/plugins/crypter/FreakhareComFolder.py
index 7c1b7de2b..173660668 100644
--- a/module/plugins/crypter/FreakhareComFolder.py
+++ b/module/plugins/crypter/FreakhareComFolder.py
@@ -11,15 +11,16 @@ class FreakhareComFolder(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?freakshare\.com/folder/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Freakhare.com folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r'<a href="(http://freakshare\.com/files/[^"]+)" target="_blank">'
+ LINK_PATTERN = r'<a href="(http://freakshare\.com/files/.+?)" target="_blank">'
NAME_PATTERN = r'Folder:</b> (?P<N>.+)'
PAGES_PATTERN = r'Pages: +(\d+)'
diff --git a/module/plugins/crypter/FreetexthostCom.py b/module/plugins/crypter/FreetexthostCom.py
index c33c9ff64..cf6fbb8a4 100644
--- a/module/plugins/crypter/FreetexthostCom.py
+++ b/module/plugins/crypter/FreetexthostCom.py
@@ -11,8 +11,9 @@ class FreetexthostCom(SimpleCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?freetexthost\.com/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Freetexthost.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/FshareVnFolder.py b/module/plugins/crypter/FshareVnFolder.py
index 474364e40..bbee53337 100644
--- a/module/plugins/crypter/FshareVnFolder.py
+++ b/module/plugins/crypter/FshareVnFolder.py
@@ -9,15 +9,16 @@ class FshareVnFolder(SimpleCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?fshare\.vn/folder/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Fshare.vn folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- LINK_PATTERN = r'<li class="w_80pc"><a href="([^"]+)" target="_blank">'
+ LINK_PATTERN = r'<li class="w_80pc"><a href="(.+?)" target="_blank">'
getInfo = create_getInfo(FshareVnFolder)
diff --git a/module/plugins/crypter/FurLy.py b/module/plugins/crypter/FurLy.py
new file mode 100644
index 000000000..b8e9332e2
--- /dev/null
+++ b/module/plugins/crypter/FurLy.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
+
+
+class FurLy(SimpleCrypter):
+ __name__ = "FurLy"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?fur\.ly/(\d/)?\w+'
+
+ __description__ = """Fur.ly decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ URL_REPLACEMENTS = [(r'fur\.ly/', r'fur\.ly/bar/')]
+
+ LINK_PATTERN = r'urls\[\d+\] = "(.+?)"'
+ OFFLINE_PATTERN = r'var output;\s*var total'
+
+
+getInfo = create_getInfo(FurLy)
diff --git a/module/plugins/crypter/Go4UpCom.py b/module/plugins/crypter/Go4UpCom.py
index 102bc32b5..22f31f6f6 100644
--- a/module/plugins/crypter/Go4UpCom.py
+++ b/module/plugins/crypter/Go4UpCom.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -10,9 +9,12 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class Go4UpCom(SimpleCrypter):
__name__ = "Go4UpCom"
__type__ = "crypter"
- __version__ = "0.11"
+ __version__ = "0.12"
__pattern__ = r'http://go4up\.com/(dl/\w{12}|rd/\w{12}/\d+)'
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Go4Up.com decrypter plugin"""
__license__ = "GPLv3"
@@ -27,12 +29,12 @@ class Go4UpCom(SimpleCrypter):
OFFLINE_PATTERN = r'>\s*(404 Page Not Found|File not Found|Mirror does not exist)'
- def getLinks(self
+ def getLinks(self):
links = []
- m = re.search(r'(/download/gethosts/.+?)"')
+ m = re.search(r'(/download/gethosts/.+?)"', self.html)
if m:
- self.html = self.load(urljoin("http://go4up.com/", m.group(1)))
+ self.html = self.load(urlparse.urljoin("http://go4up.com/", m.group(1)))
pages = [self.load(url) for url in re.findall(self.LINK_PATTERN, self.html)]
else:
pages = [self.html]
@@ -40,7 +42,7 @@ class Go4UpCom(SimpleCrypter):
for html in pages:
try:
links.append(re.search(r'<b><a href="(.+?)"', html).group(1))
- except:
+ except Exception:
continue
return links
diff --git a/module/plugins/crypter/GooGl.py b/module/plugins/crypter/GooGl.py
index d548a3375..b36e22884 100644
--- a/module/plugins/crypter/GooGl.py
+++ b/module/plugins/crypter/GooGl.py
@@ -1,32 +1,32 @@
# -*- coding: utf-8 -*-
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
from module.common.json_layer import json_loads
-class GooGl(Crypter):
+class GooGl(SimpleCrypter):
__name__ = "GooGl"
__type__ = "crypter"
- __version__ = "0.01"
+ __version__ = "0.03"
- __pattern__ = r'https?://(?:www\.)?goo\.gl/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'https?://(?:www\.)?goo\.gl/([a-zA-Z]+/)?\w+'
__description__ = """Goo.gl decrypter plugin"""
__license__ = "GPLv3"
- __authors__ = [("stickell", "l.stickell@yahoo.it")]
+ __authors__ = [("stickell" , "l.stickell@yahoo.it"),
+ ("Walter Purcaro", "vuolter@gmail.com" )]
API_URL = "https://www.googleapis.com/urlshortener/v1/url"
+ OFFLINE_PATTERN = r'has been disabled|does not exist'
- def decrypt(self, pyfile):
- rep = self.load(self.API_URL, get={'shortUrl': pyfile.url})
+
+ def getLinks(self):
+ rep = self.load(self.API_URL, get={'shortUrl': self.pyfile.url})
self.logDebug("JSON data: " + rep)
rep = json_loads(rep)
+ return [rep['longUrl']] if "longUrl" in rep else None
+
- if 'longUrl' in rep:
- self.urls = [rep['longUrl']]
- else:
- self.fail(_("Unable to expand shortened link"))
+getInfo = create_getInfo(GooGl)
diff --git a/module/plugins/crypter/GoogledriveComFolder.py b/module/plugins/crypter/GoogledriveComFolder.py
new file mode 100644
index 000000000..70898b313
--- /dev/null
+++ b/module/plugins/crypter/GoogledriveComFolder.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
+
+
+class GoogledriveComFolder(SimpleCrypter):
+ __name__ = "GoogledriveCom"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'https?://(?:www\.)?drive\.google\.com/folderview\?.*id=\w+'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True), #: Overrides core.config['general']['folder_per_package']
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
+
+ __description__ = """Drive.google.com folder decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ NAME_PATTERN = r"folderName: '(?P<N>.+?)'"
+ LINK_PATTERN = r'\[,"\w+"(?:,,".+?")?,"(.+?)"'
+ OFFLINE_PATTERN = r'<TITLE>'
+
+
+getInfo = create_getInfo(GoogledriveComFolder)
diff --git a/module/plugins/crypter/HoerbuchIn.py b/module/plugins/crypter/HoerbuchIn.py
index a347e4232..09749eba6 100644
--- a/module/plugins/crypter/HoerbuchIn.py
+++ b/module/plugins/crypter/HoerbuchIn.py
@@ -4,17 +4,17 @@ import re
from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class HoerbuchIn(Crypter):
__name__ = "HoerbuchIn"
__type__ = "crypter"
- __version__ = "0.60"
+ __version__ = "0.61"
__pattern__ = r'http://(?:www\.)?hoerbuch\.in/(wp/horbucher/\d+/.+/|tp/out\.php\?.+|protection/folder_\d+\.html)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Hoerbuch.in decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/HotfileComFolder.py b/module/plugins/crypter/HotfileComFolder.py
index 4f40587ad..f1dd56228 100644
--- a/module/plugins/crypter/HotfileComFolder.py
+++ b/module/plugins/crypter/HotfileComFolder.py
@@ -9,7 +9,7 @@ class HotfileComFolder(DeadCrypter):
__version__ = "0.30"
__pattern__ = r'https?://(?:www\.)?hotfile\.com/list/\w+/\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Hotfile.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/ILoadTo.py b/module/plugins/crypter/ILoadTo.py
index f3415706d..4c7387739 100644
--- a/module/plugins/crypter/ILoadTo.py
+++ b/module/plugins/crypter/ILoadTo.py
@@ -9,7 +9,7 @@ class ILoadTo(DeadCrypter):
__version__ = "0.11"
__pattern__ = r'http://(?:www\.)?iload\.to/go/\d+-[\w.-]+/'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Iload.to decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/ImgurComAlbum.py b/module/plugins/crypter/ImgurComAlbum.py
index 6c074f5f1..9ef7797af 100644
--- a/module/plugins/crypter/ImgurComAlbum.py
+++ b/module/plugins/crypter/ImgurComAlbum.py
@@ -10,8 +10,9 @@ class ImgurComAlbum(SimpleCrypter):
__version__ = "0.51"
__pattern__ = r'https?://(?:www\.|m\.)?imgur\.com/(a|gallery|)/?\w{5,7}'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Imgur.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/JunocloudMeFolder.py b/module/plugins/crypter/JunocloudMeFolder.py
deleted file mode 100644
index 990f25902..000000000
--- a/module/plugins/crypter/JunocloudMeFolder.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSCrypter import XFSCrypter, create_getInfo
-
-
-class JunocloudMeFolder(XFSCrypter):
- __name__ = "JunocloudMeFolder"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?junocloud\.me/folders/(?P<ID>\d+/\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
-
- __description__ = """Junocloud.me folder decrypter plugin"""
- __license__ = "GPLv3"
- __authors__ = [("guidobelix", "guidobelix@hotmail.it")]
-
-
- HOSTER_DOMAIN = "junocloud.me"
-
-
-getInfo = create_getInfo(JunocloudMeFolder)
diff --git a/module/plugins/crypter/LetitbitNetFolder.py b/module/plugins/crypter/LetitbitNetFolder.py
index 56ecbc7f8..e98b1ebc3 100644
--- a/module/plugins/crypter/LetitbitNetFolder.py
+++ b/module/plugins/crypter/LetitbitNetFolder.py
@@ -1,17 +1,17 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class LetitbitNetFolder(Crypter):
__name__ = "LetitbitNetFolder"
__type__ = "crypter"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'http://(?:www\.)?letitbit\.net/folder/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Letitbit.net folder decrypter plugin"""
__license__ = "GPLv3"
@@ -20,7 +20,7 @@ class LetitbitNetFolder(Crypter):
FOLDER_PATTERN = r'<table>(.*)</table>'
- LINK_PATTERN = r'<a href="([^"]+)" target="_blank">'
+ LINK_PATTERN = r'<a href="(.+?)" target="_blank">'
def decrypt(self, pyfile):
diff --git a/module/plugins/crypter/LinkCryptWs.py b/module/plugins/crypter/LinkCryptWs.py
index 996a92c7b..28c431e80 100644
--- a/module/plugins/crypter/LinkCryptWs.py
+++ b/module/plugins/crypter/LinkCryptWs.py
@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
-import base64
import binascii
import re
@@ -8,14 +7,14 @@ import pycurl
from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
from module.utils import html_unescape
class LinkCryptWs(Crypter):
__name__ = "LinkCryptWs"
__type__ = "crypter"
- __version__ = "0.08"
+ __version__ = "0.09"
__pattern__ = r'http://(?:www\.)?linkcrypt\.ws/(dir|container)/(?P<ID>\w+)'
@@ -92,7 +91,7 @@ class LinkCryptWs(Crypter):
def isOnline(self):
if "<title>Linkcrypt.ws // Error 404</title>" in self.html:
- self.logDebug("folder doesen't exist anymore")
+ self.logDebug("Folder doesn't exist anymore")
return False
else:
return True
@@ -132,7 +131,7 @@ class LinkCryptWs(Crypter):
def unlockCaptchaProtection(self):
- captcha_url = re.search(r'<form.*?id\s*?=\s*?"captcha"[^>]*?>.*?<\s*?input.*?src="([^"]*?)"', self.html, re.I | re.S).group(1)
+ captcha_url = re.search(r'<form.*?id\s*?=\s*?"captcha"[^>]*?>.*?<\s*?input.*?src="(.+?)"', self.html, re.I | re.S).group(1)
captcha_code = self.decryptCaptcha(captcha_url, forceUser=True, imgtype="gif", result_type='positional')
self.html = self.load(self.pyfile.url, post={"x": captcha_code[0], "y": captcha_code[1]})
@@ -191,15 +190,13 @@ class LinkCryptWs(Crypter):
self.logDebug("Search for Web links ")
package_links = []
- pattern = r'<form action="http://linkcrypt.ws/out.html"[^>]*?>.*?<input[^>]*?value="([^"]*?)"[^>]*?name="file"'
+ pattern = r'<form action="http://linkcrypt.ws/out.html"[^>]*?>.*?<input[^>]*?value="(.+?)"[^>]*?name="file"'
ids = re.findall(pattern, self.html, re.I | re.S)
self.logDebug("Decrypting %d Web links" % len(ids))
for idx, weblink_id in enumerate(ids):
try:
- self.logDebug("Decrypting Web link %d, %s" % (idx + 1, weblink_id))
-
res = self.load("http://linkcrypt.ws/out.html", post = {'file':weblink_id})
indexs = res.find("window.location =") + 19
@@ -207,8 +204,6 @@ class LinkCryptWs(Crypter):
link2 = res[indexs:indexe]
- self.logDebug(link2)
-
link2 = html_unescape(link2)
package_links.append(link2)
@@ -245,7 +240,7 @@ class LinkCryptWs(Crypter):
for line in self.container_html:
if type in line:
jseval = self.handle_javascript(line)
- clink = re.search(r'href=["\']([^"\']*?)["\']',jseval,re.I)
+ clink = re.search(r'href=["\'](["\']+)', jseval, re.I)
if not clink:
continue
@@ -279,7 +274,7 @@ class LinkCryptWs(Crypter):
(vcrypted, vjk) = self._getCipherParams(cnl_section)
for (crypted, jk) in zip(vcrypted, vjk):
package_links.extend(self._getLinks(crypted, jk))
- except:
+ except Exception:
self.logError(_("Unable to decrypt CNL links (JS Error) try to get over links"))
return self.handleWebLinks()
@@ -307,19 +302,15 @@ class LinkCryptWs(Crypter):
self.logDebug("JsEngine returns value [%s]" % jreturn)
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
# Decrypt
Key = key
IV = key
obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
+ text = obj.decrypt(crypted.decode('base64'))
# Extract links
text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
+ links = filter(bool, text.split('\n'))
# Log and return
self.logDebug("Package has %d links" % len(links))
diff --git a/module/plugins/crypter/LinkSaveIn.py b/module/plugins/crypter/LinkSaveIn.py
index e96d0438e..dce74b689 100644
--- a/module/plugins/crypter/LinkSaveIn.py
+++ b/module/plugins/crypter/LinkSaveIn.py
@@ -1,16 +1,16 @@
# -*- coding: utf-8 -*-
-from module.plugins.internal.SimpleDereferer import SimpleDereferer
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
-class LinkSaveIn(SimpleDereferer):
+class LinkSaveIn(SimpleCrypter):
__name__ = "LinkSaveIn"
__type__ = "crypter"
- __version__ = "2.03"
+ __version__ = "2.05"
__pattern__ = r'https?://(?:www\.)?linksave\.in/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """LinkSave.in decrypter plugin"""
__license__ = "GPLv3"
@@ -20,3 +20,6 @@ class LinkSaveIn(SimpleDereferer):
COOKIES = [("linksave.in", "Linksave_Language", "english")]
OFFLINE_PATTERN = r'>(Error )?404 -'
+
+
+getInfo = create_getInfo(LinkSaveIn)
diff --git a/module/plugins/crypter/LinkdecrypterCom.py b/module/plugins/crypter/LinkdecrypterCom.py
index 7f24784c7..e12bf3359 100644
--- a/module/plugins/crypter/LinkdecrypterCom.py
+++ b/module/plugins/crypter/LinkdecrypterCom.py
@@ -1,17 +1,18 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+
+from module.plugins.internal.Crypter import Crypter
class LinkdecrypterCom(Crypter):
__name__ = "LinkdecrypterCom"
__type__ = "crypter"
- __version__ = "0.29"
+ __version__ = "0.30"
__pattern__ = r'^unmatchable$'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Linkdecrypter.com decrypter plugin"""
__license__ = "GPLv3"
@@ -34,10 +35,10 @@ class LinkdecrypterCom(Crypter):
retries = 5
post_dict = {"link_cache": "on", "pro_links": pyfile.url, "modo_links": "text"}
- self.html = self.load('http://linkdecrypter.com/', post=post_dict, cookies=True, decode=True)
+ self.html = self.load('http://linkdecrypter.com/', post=post_dict, decode=True)
while retries:
- m = re.search(self.TEXTAREA_PATTERN, self.html, flags=re.S)
+ m = re.search(self.TEXTAREA_PATTERN, self.html, re.S)
if m:
self.urls = [x for x in m.group(1).splitlines() if '[LINK-ERROR]' not in x]
@@ -65,4 +66,4 @@ class LinkdecrypterCom(Crypter):
else:
retries -= 1
- self.html = self.load('http://linkdecrypter.com/', cookies=True, decode=True)
+ self.html = self.load('http://linkdecrypter.com/', decode=True)
diff --git a/module/plugins/crypter/LixIn.py b/module/plugins/crypter/LixIn.py
index d899d58c7..a4bd9df1e 100644
--- a/module/plugins/crypter/LixIn.py
+++ b/module/plugins/crypter/LixIn.py
@@ -1,18 +1,19 @@
# -*- coding: utf-8 -*-
import re
+import urlparse
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class LixIn(Crypter):
__name__ = "LixIn"
__type__ = "crypter"
- __version__ = "0.22"
+ __version__ = "0.23"
__pattern__ = r'http://(?:www\.)?lix\.in/(?P<ID>.+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Lix.in decrypter plugin"""
__license__ = "GPLv3"
@@ -46,7 +47,7 @@ class LixIn(Crypter):
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m:
self.logDebug("Trying captcha")
- captcharesult = self.decryptCaptcha("http://lix.in/" + m.group(1))
+ captcharesult = self.decryptCaptcha(urlparse.urljoin("http://lix.in/", m.group(1)))
self.html = self.load(url, decode=True,
post={"capt": captcharesult, "submit": "submit", "tiny": id})
else:
diff --git a/module/plugins/crypter/LofCc.py b/module/plugins/crypter/LofCc.py
index 3cac0fbf2..62e05f299 100644
--- a/module/plugins/crypter/LofCc.py
+++ b/module/plugins/crypter/LofCc.py
@@ -9,7 +9,7 @@ class LofCc(DeadCrypter):
__version__ = "0.21"
__pattern__ = r'http://(?:www\.)?lof\.cc/(.+)'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Lof.cc decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/MBLinkInfo.py b/module/plugins/crypter/MBLinkInfo.py
index 82c2d9719..7ff400f7e 100644
--- a/module/plugins/crypter/MBLinkInfo.py
+++ b/module/plugins/crypter/MBLinkInfo.py
@@ -9,7 +9,7 @@ class MBLinkInfo(DeadCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?mblink\.info/?\?id=(\d+)'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """MBLink.info decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/MediafireComFolder.py b/module/plugins/crypter/MediafireComFolder.py
index d1dc89518..c3b1c7e9f 100644
--- a/module/plugins/crypter/MediafireComFolder.py
+++ b/module/plugins/crypter/MediafireComFolder.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
from module.plugins.hoster.MediafireCom import checkHTMLHeader
from module.common.json_layer import json_loads
@@ -9,11 +9,11 @@ from module.common.json_layer import json_loads
class MediafireComFolder(Crypter):
__name__ = "MediafireComFolder"
__type__ = "crypter"
- __version__ = "0.14"
+ __version__ = "0.15"
__pattern__ = r'http://(?:www\.)?mediafire\.com/(folder/|\?sharekey=|\?\w{13}($|[/#]))'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Mediafire.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/MegaCoNzFolder.py b/module/plugins/crypter/MegaCoNzFolder.py
index bec4eba22..517a6b239 100644
--- a/module/plugins/crypter/MegaCoNzFolder.py
+++ b/module/plugins/crypter/MegaCoNzFolder.py
@@ -8,11 +8,11 @@ from module.plugins.internal.Crypter import Crypter
class MegaCoNzFolder(Crypter):
__name__ = "MegaCoNzFolder"
__type__ = "crypter"
- __version__ = "0.03"
+ __version__ = "0.05"
- __pattern__ = r'(?:https?://(?:www\.)?mega\.co\.nz/|mega:|chrome:.+?)#F!(?P<ID>[\w+^_])!(?P<KEY>[\w,\\-]+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'(https?://(?:www\.)?mega(\.co)?\.nz/|mega:|chrome:.+?)#F!(?P<ID>[\w^_]+)!(?P<KEY>[\w,\\-]+)'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Mega.co.nz folder decrypter plugin"""
__license__ = "GPLv3"
@@ -26,7 +26,7 @@ class MegaCoNzFolder(Crypter):
def decrypt(self, pyfile):
url = "https://mega.co.nz/#F!%s!%s" % re.match(self.__pattern__, pyfile.url).groups()
self.html = self.load("http://rapidgen.org/linkfinder", post={'linklisturl': url})
- self.urls = re.findall(r'(https://mega.co.nz/#N!.+?)<', self.html)
+ self.urls = re.findall(r'(https://mega(\.co)?\.nz/#N!.+?)<', self.html)
if not self.urls: #@TODO: Remove in 0.4.10
- self.fail("No link grabbed")
+ self.fail(_("No link grabbed"))
diff --git a/module/plugins/crypter/MegaRapidCzFolder.py b/module/plugins/crypter/MegaRapidCzFolder.py
index e7dff6c8a..fadd6dbed 100644
--- a/module/plugins/crypter/MegaRapidCzFolder.py
+++ b/module/plugins/crypter/MegaRapidCzFolder.py
@@ -9,15 +9,16 @@ class MegaRapidCzFolder(SimpleCrypter):
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?(share|mega)rapid\.cz/slozka/\d+/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Share-Rapid.com folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- LINK_PATTERN = r'<td class="soubor"[^>]*><a href="([^"]+)">'
+ LINK_PATTERN = r'<td class="soubor".*?><a href="(.+?)">'
getInfo = create_getInfo(MegaRapidCzFolder)
diff --git a/module/plugins/crypter/MegauploadComFolder.py b/module/plugins/crypter/MegauploadComFolder.py
index 08f96700d..60e4af57e 100644
--- a/module/plugins/crypter/MegauploadComFolder.py
+++ b/module/plugins/crypter/MegauploadComFolder.py
@@ -9,6 +9,7 @@ class MegauploadComFolder(DeadCrypter):
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?megaupload\.com/(\?f|xml/folderfiles\.php\?.*&?folderid)=\w+'
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Megaupload.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/Movie2kTo.py b/module/plugins/crypter/Movie2KTo.py
index 76bf702ac..919d77c86 100644
--- a/module/plugins/crypter/Movie2kTo.py
+++ b/module/plugins/crypter/Movie2KTo.py
@@ -9,7 +9,7 @@ class Movie2KTo(DeadCrypter):
__version__ = "0.51"
__pattern__ = r'http://(?:www\.)?movie2k\.to/(.+)\.html'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Movie2k.to decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/MultiUpOrg.py b/module/plugins/crypter/MultiUpOrg.py
index 5209ebf09..b676c3029 100644
--- a/module/plugins/crypter/MultiUpOrg.py
+++ b/module/plugins/crypter/MultiUpOrg.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
import re
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -12,8 +12,9 @@ class MultiUpOrg(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?multiup\.org/(en|fr)/(?P<TYPE>project|download|miror)/\w+(/\w+)?'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """MultiUp.org crypter plugin"""
__license__ = "GPLv3"
@@ -32,7 +33,7 @@ class MultiUpOrg(SimpleCrypter):
pattern = r'style="width:97%;text-align:left".*\n.*href="(.*)"'
if m_type == "download":
dl_pattern = r'href="(.*)">.*\n.*<h5>DOWNLOAD</h5>'
- miror_page = urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1))
+ miror_page = urlparse.urljoin("http://www.multiup.org", re.search(dl_pattern, self.html).group(1))
self.html = self.load(miror_page)
return re.findall(pattern, self.html)
diff --git a/module/plugins/crypter/MultiloadCz.py b/module/plugins/crypter/MultiloadCz.py
index fa1eb02d7..10b5770fa 100644
--- a/module/plugins/crypter/MultiloadCz.py
+++ b/module/plugins/crypter/MultiloadCz.py
@@ -1,27 +1,27 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class MultiloadCz(Crypter):
__name__ = "MultiloadCz"
__type__ = "crypter"
- __version__ = "0.40"
+ __version__ = "0.41"
__pattern__ = r'http://(?:[^/]*\.)?multiload\.cz/(stahnout|slozka)/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
- ("usedHoster", "str", "Prefered hoster list (bar-separated)", ""),
- ("ignoredHoster", "str", "Ignored hoster list (bar-separated)", "")]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package" , True),
+ ("usedHoster" , "str" , "Prefered hoster list (bar-separated)", "" ),
+ ("ignoredHoster" , "str" , "Ignored hoster list (bar-separated)" , "" )]
__description__ = """Multiload.cz decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- FOLDER_PATTERN = r'<form action="" method="get"><textarea[^>]*>([^>]*)</textarea></form>'
- LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="([^"]+)">'
+ FOLDER_PATTERN = r'<form action="" method="get"><textarea.*?>([^>]*)</textarea></form>'
+ LINK_PATTERN = r'<p class="manager-server"><strong>([^<]+)</strong></p><p class="manager-linky"><a href="(.+?)">'
def decrypt(self, pyfile):
@@ -34,9 +34,9 @@ class MultiloadCz(Crypter):
else:
m = re.findall(self.LINK_PATTERN, self.html)
if m:
- prefered_set = set(self.getConfig("usedHoster").split('|'))
- self.urls.extend([x[1] for x in m if x[0] in prefered_set])
+ prefered_set = set(self.getConfig('usedHoster').split('|'))
+ self.urls.extend(x[1] for x in m if x[0] in prefered_set)
if not self.urls:
- ignored_set = set(self.getConfig("ignoredHoster").split('|'))
- self.urls.extend([x[1] for x in m if x[0] not in ignored_set])
+ ignored_set = set(self.getConfig('ignoredHoster').split('|'))
+ self.urls.extend(x[1] for x in m if x[0] not in ignored_set)
diff --git a/module/plugins/crypter/MultiuploadCom.py b/module/plugins/crypter/MultiuploadCom.py
index 347b7e5af..d0679e118 100644
--- a/module/plugins/crypter/MultiuploadCom.py
+++ b/module/plugins/crypter/MultiuploadCom.py
@@ -9,9 +9,9 @@ class MultiuploadCom(DeadCrypter):
__version__ = "0.02"
__pattern__ = r'http://(?:www\.)?multiupload\.(com|nl)/\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
- __description__ = """ MultiUpload.com decrypter plugin """
+ __description__ = """MultiUpload.com decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
diff --git a/module/plugins/crypter/NCryptIn.py b/module/plugins/crypter/NCryptIn.py
index 8b7214157..e85120f92 100644
--- a/module/plugins/crypter/NCryptIn.py
+++ b/module/plugins/crypter/NCryptIn.py
@@ -1,23 +1,22 @@
# -*- coding: utf-8 -*-
-import base64
import binascii
import re
from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import ReCaptcha
+from module.plugins.internal.Crypter import Crypter
+from module.plugins.internal.ReCaptcha import ReCaptcha
class NCryptIn(Crypter):
__name__ = "NCryptIn"
__type__ = "crypter"
- __version__ = "1.33"
+ __version__ = "1.36"
__pattern__ = r'http://(?:www\.)?ncrypt\.in/(?P<TYPE>folder|link|frame)-([^/\?]+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """NCrypt.in decrypter plugin"""
__license__ = "GPLv3"
@@ -28,7 +27,7 @@ class NCryptIn(Crypter):
JK_KEY = "jk"
CRYPTED_KEY = "crypted"
- NAME_PATTERN = r'<meta name="description" content="(?P<N>[^"]+)"'
+ NAME_PATTERN = r'<meta name="description" content="(?P<N>.+?)"'
def setup(self):
@@ -109,7 +108,7 @@ class NCryptIn(Crypter):
def isProtected(self):
form = re.search(r'<form.*?name.*?protected.*?>(.*?)</form>', self.cleanedHtml, re.S)
- if form is not None:
+ if form:
content = form.group(1)
for keyword in ("password", "captcha"):
if keyword in content:
@@ -145,7 +144,7 @@ class NCryptIn(Crypter):
# Resolve anicaptcha
if "anicaptcha" in form:
self.logDebug("Captcha protected")
- captchaUri = re.search(r'src="(/temp/anicaptcha/[^"]+)', form).group(1)
+ captchaUri = re.search(r'src="(/temp/anicaptcha/.+?)"', form).group(1)
captcha = self.decryptCaptcha("http://ncrypt.in" + captchaUri)
self.logDebug("Captcha resolved [%s]" % captcha)
postData['captcha'] = captcha
@@ -156,7 +155,7 @@ class NCryptIn(Crypter):
captcha_key = re.search(r'\?k=(.*?)"', form).group(1)
self.logDebug("Resolving ReCaptcha with key [%s]" % captcha_key)
recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge(captcha_key)
+ response, challenge = recaptcha.challenge(captcha_key)
postData['recaptcha_challenge_field'] = challenge
postData['recaptcha_response_field'] = response
@@ -205,7 +204,7 @@ class NCryptIn(Crypter):
elif link_source_type == "web":
return self.handleWebLinks()
else:
- self.error('Unknown source type "%s" (this is probably a bug)' % link_source_type)
+ self.error(_('Unknown source type "%s"') % link_source_type)
def handleSingleLink(self):
@@ -229,7 +228,7 @@ class NCryptIn(Crypter):
(vcrypted, vjk) = self._getCipherParams()
for (crypted, jk) in zip(vcrypted, vjk):
package_links.extend(self._getLinks(crypted, jk))
- except:
+ except Exception:
self.fail(_("Unable to decrypt CNL2 links"))
return package_links
@@ -296,19 +295,15 @@ class NCryptIn(Crypter):
self.logDebug("JsEngine returns value [%s]" % jreturn)
key = binascii.unhexlify(jreturn)
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
# Decrypt
Key = key
IV = key
obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
+ text = obj.decrypt(crypted.decode('base64'))
# Extract links
text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
+ links = filter(bool, text.split('\n'))
# Log and return
self.logDebug("Block has %d links" % len(links))
diff --git a/module/plugins/crypter/NetfolderIn.py b/module/plugins/crypter/NetfolderIn.py
index 62dc5c914..32d59af03 100644
--- a/module/plugins/crypter/NetfolderIn.py
+++ b/module/plugins/crypter/NetfolderIn.py
@@ -1,18 +1,15 @@
# -*- coding: utf-8 -*-
-import re
+from module.plugins.internal.DeadCrypter import DeadCrypter, create_getInfo
-from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
-
-class NetfolderIn(SimpleCrypter):
+class NetfolderIn(DeadCrypter):
__name__ = "NetfolderIn"
__type__ = "crypter"
- __version__ = "0.72"
+ __version__ = "0.73"
- __pattern__ = r'http://(?:www\.)?netfolder\.in/(folder\.php\?folder_id=)?(?P<ID>\w+)(?(1)|/\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'http://(?:www\.)?netfolder\.(in|me)/(folder\.php\?folder_id=)?(?P<ID>\w+)(?(1)|/\w+)'
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """NetFolder.in decrypter plugin"""
__license__ = "GPLv3"
@@ -20,54 +17,4 @@ class NetfolderIn(SimpleCrypter):
("fragonib", "fragonib[AT]yahoo[DOT]es")]
- NAME_PATTERN = r'<div class="Text">Inhalt des Ordners <span.*>(?P<N>.+)</span></div>'
-
-
- def prepare(self):
- super(NetfolderIn, self).prepare()
-
- # Check for password protection
- if self.isPasswordProtected():
- self.html = self.submitPassword()
- if not self.html:
- self.fail(_("Incorrect password, please set right password on Add package form and retry"))
-
-
- def isPasswordProtected(self):
- if '<input type="password" name="password"' in self.html:
- self.logDebug("Links are password protected")
- return True
- return False
-
-
- def submitPassword(self):
- # Gather data
- try:
- m = re.match(self.__pattern__, self.pyfile.url)
- id = m.group('ID')
- except AttributeError:
- self.logDebug("Unable to get package id from url [%s]" % self.pyfile.url)
- return
- url = "http://netfolder.in/folder.php?folder_id=" + id
- password = self.getPassword()
-
- # Submit package password
- post = {'password': password, 'save': 'Absenden'}
- self.logDebug("Submitting password [%s] for protected links with id [%s]" % (password, id))
- html = self.load(url, {}, post)
-
- # Check for invalid password
- if '<div class="InPage_Error">' in html:
- self.logDebug("Incorrect password, please set right password on Edit package form and retry")
- return None
-
- return html
-
-
- def getLinks(self):
- links = re.search(r'name="list" value="(.*?)"', self.html).group(1).split(",")
- self.logDebug("Package has %d links" % len(links))
- return links
-
-
getInfo = create_getInfo(NetfolderIn)
diff --git a/module/plugins/crypter/NosvideoCom.py b/module/plugins/crypter/NosvideoCom.py
index 1e280abd2..9808837c4 100644
--- a/module/plugins/crypter/NosvideoCom.py
+++ b/module/plugins/crypter/NosvideoCom.py
@@ -9,8 +9,9 @@ class NosvideoCom(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?nosvideo\.com/\?v=\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Nosvideo.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/OneKhDe.py b/module/plugins/crypter/OneKhDe.py
index 3e75d97b5..2d90afd96 100644
--- a/module/plugins/crypter/OneKhDe.py
+++ b/module/plugins/crypter/OneKhDe.py
@@ -4,17 +4,17 @@ import re
from module.unescape import unescape
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class OneKhDe(Crypter):
__name__ = "OneKhDe"
__type__ = "crypter"
- __version__ = "0.11"
+ __version__ = "0.12"
__pattern__ = r'http://(?:www\.)?1kh\.de/f/'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """1kh.de decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/OronComFolder.py b/module/plugins/crypter/OronComFolder.py
index 9e06bdf32..048af7d82 100755..100644
--- a/module/plugins/crypter/OronComFolder.py
+++ b/module/plugins/crypter/OronComFolder.py
@@ -9,7 +9,7 @@ class OronComFolder(DeadCrypter):
__version__ = "0.11"
__pattern__ = r'http://(?:www\.)?oron\.com/folder/\w+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Oron.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/PastebinCom.py b/module/plugins/crypter/PastebinCom.py
index b3d5a4bea..af039a6ab 100644
--- a/module/plugins/crypter/PastebinCom.py
+++ b/module/plugins/crypter/PastebinCom.py
@@ -6,19 +6,22 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class PastebinCom(SimpleCrypter):
__name__ = "PastebinCom"
__type__ = "crypter"
- __version__ = "0.03"
+ __version__ = "0.04"
- __pattern__ = r'http://(?:www\.)?pastebin\.com/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'https://(?:www\.)?pastebin\.com/(.+i=)?(?P<ID>\w{8})'
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Pastebin.com decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- LINK_PATTERN = r'<div class="de\d+">(https?://[^ <]+)(?:[^<]*)</div>'
- NAME_PATTERN = r'<div class="paste_box_line1" title="(?P<N>[^"]+)">'
+ URL_REPLACEMENTS = [(__pattern__ + '.*', r'http://www.pastebin.com/\g<ID>')]
+
+ NAME_PATTERN = r'<div class="paste_box_line1" title="(?P<N>.+?)"'
+ LINK_PATTERN = r'<div class="de\d+">(.+?)<'
getInfo = create_getInfo(PastebinCom)
diff --git a/module/plugins/crypter/PastedCo.py b/module/plugins/crypter/PastedCo.py
new file mode 100644
index 000000000..8236345cc
--- /dev/null
+++ b/module/plugins/crypter/PastedCo.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.Crypter import Crypter
+
+import re
+
+
+class PastedCo(Crypter):
+ __name__ = "PastedCo"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://pasted\.co/\w+'
+
+ __description__ = """Pasted.co decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Frederik Möllers", "fred-public@posteo.de")]
+
+
+ NAME_PATTERN = r'<title>(?P<N>.+?) - .+</title>'
+ NAME_PATTERN = r"'save_paste' href=\"(http://pasted.co/[0-9a-f]+)/info"
+
+ FS_URL_PREFIX = '<pre id=\'thepaste\' class="prettyprint">'
+ FS_URL_SUFFIX = '</pre>'
+
+ def decrypt(self, pyfile):
+ package = pyfile.package()
+ package_name = package.name
+ package_folder = package.folder
+ html = self.load(pyfile.url, decode = True).splitlines()
+ fs_url = None
+ FS_URL_RE = re.compile('%s/fullscreen\.php\?hash=[0-9a-f]*' % pyfile.url)
+ for line in html:
+ match = FS_URL_RE.search(line)
+ if match:
+ fs_url = match.group()
+ break
+ if not fs_url:
+ raise Exception("Could not find pasted.co fullscreen URL!")
+ urls = self.load(fs_url, decode = True)
+ urls = urls[urls.find(PastedCo.FS_URL_PREFIX) + len(PastedCo.FS_URL_PREFIX):]
+ urls = urls[:urls.find(PastedCo.FS_URL_SUFFIX)].splitlines()
+ self.packages.append((package_name, urls, package_folder))
diff --git a/module/plugins/crypter/QuickshareCzFolder.py b/module/plugins/crypter/QuickshareCzFolder.py
index 70666b55a..e1fdc22bc 100644
--- a/module/plugins/crypter/QuickshareCzFolder.py
+++ b/module/plugins/crypter/QuickshareCzFolder.py
@@ -1,24 +1,24 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class QuickshareCzFolder(Crypter):
__name__ = "QuickshareCzFolder"
__type__ = "crypter"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'http://(?:www\.)?quickshare\.cz/slozka-\d+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Quickshare.cz folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- FOLDER_PATTERN = r'<textarea[^>]*>(.*?)</textarea>'
+ FOLDER_PATTERN = r'<textarea.*?>(.*?)</textarea>'
LINK_PATTERN = r'(http://www\.quickshare\.cz/\S+)'
diff --git a/module/plugins/crypter/RSLayerCom.py b/module/plugins/crypter/RSLayerCom.py
index cc3b23bbc..6f078e9e4 100644
--- a/module/plugins/crypter/RSLayerCom.py
+++ b/module/plugins/crypter/RSLayerCom.py
@@ -9,7 +9,7 @@ class RSLayerCom(DeadCrypter):
__version__ = "0.21"
__pattern__ = r'http://(?:www\.)?rs-layer\.com/directory-'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """RS-Layer.com decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/RapidfileshareNetFolder.py b/module/plugins/crypter/RapidfileshareNetFolder.py
deleted file mode 100644
index fc3d4241e..000000000
--- a/module/plugins/crypter/RapidfileshareNetFolder.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from module.plugins.internal.XFSCrypter import XFSCrypter, create_getInfo
-
-
-class RapidfileshareNetFolder(XFSCrypter):
- __name__ = "RapidfileshareNetFolder"
- __type__ = "crypter"
- __version__ = "0.03"
-
- __pattern__ = r'http://(?:www\.)?rapidfileshare\.net/users/\w+/\d+/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
-
- __description__ = """Rapidfileshare.net folder decrypter plugin"""
- __license__ = "GPLv3"
- __authors__ = [("guidobelix", "guidobelix@hotmail.it")]
-
-
- HOSTER_DOMAIN = "rapidfileshare.net"
-
-
-getInfo = create_getInfo(RapidfileshareNetFolder)
diff --git a/module/plugins/crypter/RelinkUs.py b/module/plugins/crypter/RelinkUs.py
index c5a3f1011..7dfb3876f 100644
--- a/module/plugins/crypter/RelinkUs.py
+++ b/module/plugins/crypter/RelinkUs.py
@@ -2,23 +2,23 @@
from __future__ import with_statement
-import base64
import binascii
import re
import os
from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
+from module.utils import save_join
class RelinkUs(Crypter):
__name__ = "RelinkUs"
__type__ = "crypter"
- __version__ = "3.11"
+ __version__ = "3.13"
__pattern__ = r'http://(?:www\.)?relink\.us/(f/|((view|go)\.php\?id=))(?P<ID>.+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Relink.us decrypter plugin"""
__license__ = "GPLv3"
@@ -153,7 +153,7 @@ class RelinkUs(Crypter):
# Try to get info from web
m = re.search(self.FILE_TITLE_REGEX, self.html)
- if m is not None:
+ if m:
title = m.group(1).strip()
if not self.FILE_NOTITLE in title:
name = folder = title
@@ -191,20 +191,20 @@ class RelinkUs(Crypter):
elif source == 'web':
return self.handleWEBLinks()
else:
- self.error('Unknown source type "%s" (this is probably a bug)' % source)
+ self.error(_('Unknown source type "%s"') % source)
def handleCNL2Links(self):
self.logDebug("Search for CNL2 links")
package_links = []
m = re.search(self.CNL2_FORM_REGEX, self.html, re.S)
- if m is not None:
+ if m:
cnl2_form = m.group(1)
try:
(vcrypted, vjk) = self._getCipherParams(cnl2_form)
for (crypted, jk) in zip(vcrypted, vjk):
package_links.extend(self._getLinks(crypted, jk))
- except:
+ except Exception:
self.logDebug("Unable to decrypt CNL2 links")
return package_links
@@ -213,18 +213,20 @@ class RelinkUs(Crypter):
self.logDebug("Search for DLC links")
package_links = []
m = re.search(self.DLC_LINK_REGEX, self.html)
- if m is not None:
+ if m:
container_url = self.DLC_DOWNLOAD_URL + "?id=%s&dlc=1" % self.fileid
self.logDebug("Downloading DLC container link [%s]" % container_url)
try:
dlc = self.load(container_url)
dlc_filename = self.fileid + ".dlc"
- dlc_filepath = os.path.join(self.config['general']['download_folder'], dlc_filename)
+ dlc_filepath = save_join(self.config['general']['download_folder'], dlc_filename)
with open(dlc_filepath, "wb") as f:
f.write(dlc)
package_links.append(dlc_filepath)
- except:
- self.fail("Unable to download DLC container")
+
+ except Exception:
+ self.fail(_("Unable to download DLC container"))
+
return package_links
@@ -276,19 +278,15 @@ class RelinkUs(Crypter):
self.logDebug("JsEngine returns value [%s]" % jreturn)
key = binascii.unhexlify(jreturn)
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
# Decrypt
Key = key
IV = key
obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
+ text = obj.decrypt(crypted.decode('base64'))
# Extract links
text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
+ links = filter(bool, text.split('\n'))
# Log and return
self.logDebug("Package has %d links" % len(links))
diff --git a/module/plugins/crypter/SafelinkingNet.py b/module/plugins/crypter/SafelinkingNet.py
index a56a0a44c..3ebb5f22d 100644
--- a/module/plugins/crypter/SafelinkingNet.py
+++ b/module/plugins/crypter/SafelinkingNet.py
@@ -2,23 +2,21 @@
import re
-from pycurl import FOLLOWLOCATION
-
from BeautifulSoup import BeautifulSoup
from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import SolveMedia
+from module.plugins.internal.Crypter import Crypter
+from module.plugins.internal.SolveMedia import SolveMedia
class SafelinkingNet(Crypter):
__name__ = "SafelinkingNet"
__type__ = "crypter"
- __version__ = "0.13"
+ __version__ = "0.16"
__pattern__ = r'https?://(?:www\.)?safelinking\.net/([pd])/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Safelinking.net decrypter plugin"""
__license__ = "GPLv3"
@@ -57,7 +55,7 @@ class SafelinkingNet(Crypter):
else:
self.fail(_("Error parsing captcha"))
- challenge, response = captcha.challenge(captchaKey)
+ response, challenge = captcha.challenge(captchaKey)
postData['adcopy_challenge'] = challenge
postData['adcopy_response'] = response
diff --git a/module/plugins/crypter/SecuredIn.py b/module/plugins/crypter/SecuredIn.py
index cbfa919ac..a2eac4f13 100644
--- a/module/plugins/crypter/SecuredIn.py
+++ b/module/plugins/crypter/SecuredIn.py
@@ -9,7 +9,7 @@ class SecuredIn(DeadCrypter):
__version__ = "0.21"
__pattern__ = r'http://(?:www\.)?secured\.in/download-[\d]+-\w{8}\.html'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Secured.in decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/SexuriaCom.py b/module/plugins/crypter/SexuriaCom.py
index 3c952fd6b..b2101e92a 100644
--- a/module/plugins/crypter/SexuriaCom.py
+++ b/module/plugins/crypter/SexuriaCom.py
@@ -2,30 +2,30 @@
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class SexuriaCom(Crypter):
__name__ = "SexuriaCom"
__type__ = "crypter"
- __version__ = "0.01"
+ __version__ = "0.03"
__pattern__ = r'http://(?:www\.)?sexuria\.com/(v1/)?(Pornos_Kostenlos_.+?_(\d+)\.html|dl_links_\d+_\d+\.html|id=\d+\&part=\d+\&link=\d+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Sexuria.com decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("NETHead", "NETHead.AT.gmx.DOT.net")]
- PATTERN_SUPPORTED_MAIN = re.compile(r'http://(www\.)?sexuria\.com/(v1/)?Pornos_Kostenlos_.+?_(\d+)\.html', flags=re.I)
- PATTERN_SUPPORTED_CRYPT = re.compile(r'http://(www\.)?sexuria\.com/(v1/)?dl_links_\d+_(?P<ID>\d+)\.html', flags=re.I)
- PATTERN_SUPPORTED_REDIRECT = re.compile(r'http://(www\.)?sexuria\.com/out\.php\?id=(?P<ID>\d+)\&part=\d+\&link=\d+', flags=re.I)
- PATTERN_TITLE = re.compile(r'<title> - (?P<TITLE>.*) Sexuria - Kostenlose Pornos - Rapidshare XXX Porn</title>', flags=re.I)
- PATTERN_PASSWORD = re.compile(r'<strong>Passwort: </strong></div></td>.*?bgcolor="#EFEFEF">(?P<PWD>.*?)</td>', flags=re.I | re.S)
- PATTERN_DL_LINK_PAGE = re.compile(r'"(dl_links_\d+_\d+\.html)"', flags=re.I)
- PATTERN_REDIRECT_LINKS = re.compile(r'value="(http://sexuria\.com/out\.php\?id=\d+\&part=\d+\&link=\d+)" readonly', flags=re.I)
+ PATTERN_SUPPORTED_MAIN = r'http://(www\.)?sexuria\.com/(v1/)?Pornos_Kostenlos_.+?_(\d+)\.html'
+ PATTERN_SUPPORTED_CRYPT = r'http://(www\.)?sexuria\.com/(v1/)?dl_links_\d+_(?P<ID>\d+)\.html'
+ PATTERN_SUPPORTED_REDIRECT = r'http://(www\.)?sexuria\.com/out\.php\?id=(?P<ID>\d+)\&part=\d+\&link=\d+'
+ PATTERN_TITLE = r'<title> - (?P<TITLE>.*) Sexuria - Kostenlose Pornos - Rapidshare XXX Porn</title>'
+ PATTERN_PASSWORD = r'<strong>Passwort: </strong></div></td>.*?bgcolor="#EFEFEF">(?P<PWD>.*?)</td>'
+ PATTERN_DL_LINK_PAGE = r'"(dl_links_\d+_\d+\.html)"'
+ PATTERN_REDIRECT_LINKS = r'value="(http://sexuria\.com/out\.php\?id=\d+\&part=\d+\&link=\d+)" readonly'
def decrypt(self, pyfile):
@@ -40,49 +40,49 @@ class SexuriaCom(Crypter):
def decryptLinks(self, url):
linklist = []
- name = self.package.name
- folder = self.package.folder
+ name = self.package.name
+ folder = self.package.folder
password = None
- if re.match(self.PATTERN_SUPPORTED_MAIN, url):
+ if re.match(self.PATTERN_SUPPORTED_MAIN, url, re.I):
# Processing main page
html = self.load(url)
- links = re.findall(self.PATTERN_DL_LINK_PAGE, html)
+ links = re.findall(self.PATTERN_DL_LINK_PAGE, html, re.I)
for link in links:
linklist.append("http://sexuria.com/v1/" + link)
- elif re.match(self.PATTERN_SUPPORTED_REDIRECT, url):
+ elif re.match(self.PATTERN_SUPPORTED_REDIRECT, url, re.I):
# Processing direct redirect link (out.php), redirecting to main page
- id = re.search(self.PATTERN_SUPPORTED_REDIRECT, url).group('ID')
+ id = re.search(self.PATTERN_SUPPORTED_REDIRECT, url, re.I).group('ID')
if id:
linklist.append("http://sexuria.com/v1/Pornos_Kostenlos_liebe_%s.html" % id)
- elif re.match(self.PATTERN_SUPPORTED_CRYPT, url):
+ elif re.match(self.PATTERN_SUPPORTED_CRYPT, url, re.I):
# Extract info from main file
- id = re.search(self.PATTERN_SUPPORTED_CRYPT, url).group('ID')
+ id = re.search(self.PATTERN_SUPPORTED_CRYPT, url, re.I).group('ID')
html = self.load("http://sexuria.com/v1/Pornos_Kostenlos_info_%s.html" % id, decode=True)
- title = re.search(self.PATTERN_TITLE, html).group('TITLE').strip()
+ title = re.search(self.PATTERN_TITLE, html, re.I).group('TITLE').strip()
if title:
name = folder = title
self.logDebug("Package info found, name [%s] and folder [%s]" % (name, folder))
- pwd = re.search(self.PATTERN_PASSWORD, html).group('PWD')
- if pwd:
+ pwd = re.search(self.PATTERN_PASSWORD, html, re.I | re.S).group('PWD')
+ if pwd and pwd not in ("Kein Passwort", "-"):
password = pwd.strip()
self.logDebug("Password info [%s] found" % password)
# Process link (dl_link)
html = self.load(url)
- links = re.findall(self.PATTERN_REDIRECT_LINKS, html)
+ links = re.findall(self.PATTERN_REDIRECT_LINKS, html, re.I)
if len(links) == 0:
- self.LogError("Broken for link %s" % link)
+ self.logError("Broken for link %s" % link)
else:
for link in links:
link = link.replace("http://sexuria.com/", "http://www.sexuria.com/")
finallink = self.load(link, just_header=True)['location']
if not finallink or "sexuria.com/" in finallink:
- self.LogError("Broken for link %s" % link)
+ self.logError("Broken for link %s" % link)
else:
linklist.append(finallink)
diff --git a/module/plugins/crypter/ShSt.py b/module/plugins/crypter/ShSt.py
new file mode 100644
index 000000000..c50a437db
--- /dev/null
+++ b/module/plugins/crypter/ShSt.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.Crypter import Crypter
+
+import re
+
+
+class ShSt(Crypter):
+ __name__ = "ShSt"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://sh\.st/\w+'
+
+ __description__ = """Sh.St decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Frederik Möllers", "fred-public@posteo.de")]
+
+
+ NAME_PATTERN = r'<title>(?P<N>.+?) - .+</title>'
+
+
+ def decrypt(self, pyfile):
+ package = pyfile.package()
+ package_name = package.name
+ package_folder = package.folder
+ html = self.load("http://deadlockers.com/submit.php", post = { "deadlock" : self.pyfile.url }, decode = True)
+ self.packages.append((package_name, [html], package_folder))
diff --git a/module/plugins/crypter/ShareLinksBiz.py b/module/plugins/crypter/ShareLinksBiz.py
index d2e8138f6..aab898813 100644
--- a/module/plugins/crypter/ShareLinksBiz.py
+++ b/module/plugins/crypter/ShareLinksBiz.py
@@ -1,21 +1,20 @@
# -*- coding: utf-8 -*-
-import base64
import binascii
import re
from Crypto.Cipher import AES
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class ShareLinksBiz(Crypter):
__name__ = "ShareLinksBiz"
__type__ = "crypter"
- __version__ = "1.14"
+ __version__ = "1.15"
__pattern__ = r'http://(?:www\.)?(share-links|s2l)\.biz/(?P<ID>_?\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Share-Links.biz decrypter plugin"""
__license__ = "GPLv3"
@@ -165,7 +164,7 @@ class ShareLinksBiz(Crypter):
# Extract from web package header
title_re = r'<h2><img.*?/>(.*)</h2>'
m = re.search(title_re, self.html, re.S)
- if m is not None:
+ if m:
title = m.group(1).strip()
if 'unnamed' not in title:
name = folder = title
@@ -235,7 +234,7 @@ class ShareLinksBiz(Crypter):
try:
(crypted, jk) = self._getCipherParams()
package_links.extend(self._getLinks(crypted, jk))
- except:
+ except Exception:
self.fail(_("Unable to decrypt CNL2 links"))
return package_links
@@ -248,14 +247,12 @@ class ShareLinksBiz(Crypter):
params = res.split(";;")
# Get jk
- strlist = list(base64.standard_b64decode(params[1]))
- strlist.reverse()
- jk = ''.join(strlist)
+ strlist = list(params[1].decode('base64'))
+ jk = ''.join(strlist[::-1])
# Get crypted
- strlist = list(base64.standard_b64decode(params[2]))
- strlist.reverse()
- crypted = ''.join(strlist)
+ strlist = list(params[2].decode('base64'))
+ crypted = ''.join(strlist[::-1])
# Log and return
return crypted, jk
@@ -267,19 +264,15 @@ class ShareLinksBiz(Crypter):
self.logDebug("JsEngine returns value [%s]" % jreturn)
key = binascii.unhexlify(jreturn)
- # Decode crypted
- crypted = base64.standard_b64decode(crypted)
-
# Decrypt
Key = key
IV = key
obj = AES.new(Key, AES.MODE_CBC, IV)
- text = obj.decrypt(crypted)
+ text = obj.decrypt(crypted.decode('base64'))
# Extract links
text = text.replace("\x00", "").replace("\r", "")
- links = text.split("\n")
- links = filter(lambda x: x != "", links)
+ links = filter(bool, text.split('\n'))
# Log and return
self.logDebug("Block has %d links" % len(links))
diff --git a/module/plugins/crypter/SharingmatrixComFolder.py b/module/plugins/crypter/SharingmatrixComFolder.py
index e16bdf814..eb1b4d8a6 100644
--- a/module/plugins/crypter/SharingmatrixComFolder.py
+++ b/module/plugins/crypter/SharingmatrixComFolder.py
@@ -9,6 +9,7 @@ class SharingmatrixComFolder(DeadCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?sharingmatrix\.com/folder/\w+'
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Sharingmatrix.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/SpeedLoadOrgFolder.py b/module/plugins/crypter/SpeedLoadOrgFolder.py
index ddde7dec2..af768ef7b 100644
--- a/module/plugins/crypter/SpeedLoadOrgFolder.py
+++ b/module/plugins/crypter/SpeedLoadOrgFolder.py
@@ -9,7 +9,7 @@ class SpeedLoadOrgFolder(DeadCrypter):
__version__ = "0.30"
__pattern__ = r'http://(?:www\.)?speedload\.org/(\d+~f$|folder/\d+/)'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Speedload decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/StealthTo.py b/module/plugins/crypter/StealthTo.py
index 5173421f1..551468980 100644
--- a/module/plugins/crypter/StealthTo.py
+++ b/module/plugins/crypter/StealthTo.py
@@ -9,7 +9,7 @@ class StealthTo(DeadCrypter):
__version__ = "0.20"
__pattern__ = r'http://(?:www\.)?stealth\.to/folder/.+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Stealth.to decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/TNTVillageScambioeticoOrg.py b/module/plugins/crypter/TNTVillageScambioeticoOrg.py
new file mode 100644
index 000000000..5606b8a7f
--- /dev/null
+++ b/module/plugins/crypter/TNTVillageScambioeticoOrg.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
+
+
+class TNTVillageScambioeticoOrg(SimpleCrypter):
+ __name__ = "TNTVillageScambioeticoOrg"
+ __type__ = "crypter"
+ __version__ = "0.01"
+
+ __pattern__ = r'http://(?:www\.)?forum\.tntvillage\.scambioetico\.org/index\.php\?.*showtopic=\d+'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True), #: Overrides core.config['general']['folder_per_package']
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
+
+ __description__ = """TNTVillage.scambioetico.org decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ LINK_PATTERNS = [r'<th class="titlemedium"><a href=\'(.+?)\'', r"<a href='(\./index\.php\?act.+?)'"]
+
+
+ def getLinks(self):
+ for p in self.LINK_PATTERNS:
+ self.LINK_PATTERN = p
+ links = super(TNTVillageScambioeticoOrg, self).getLinks()
+ if links:
+ return links
+
+
+getInfo = create_getInfo(TNTVillageScambioeticoOrg)
diff --git a/module/plugins/crypter/TinyurlCom.py b/module/plugins/crypter/TinyurlCom.py
new file mode 100644
index 000000000..e2cf50358
--- /dev/null
+++ b/module/plugins/crypter/TinyurlCom.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
+
+
+class TinyurlCom(SimpleCrypter):
+ __name__ = "TinyurlCom"
+ __type__ = "crypter"
+ __version__ = "0.02"
+
+ __pattern__ = r'https?://(?:www\.)?(preview\.)?tinyurl\.com/[\w-]+'
+
+ __description__ = """Tinyurl.com decrypter plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ URL_REPLACEMENTS = [(r'preview\.', r'')]
+
+ OFFLINE_PATTERN = r">Error: Unable to find site's URL to redirect to"
+
+
+getInfo = create_getInfo(TinyurlCom)
diff --git a/module/plugins/crypter/TnyCz.py b/module/plugins/crypter/TnyCz.py
index d36128550..f3b245118 100644
--- a/module/plugins/crypter/TnyCz.py
+++ b/module/plugins/crypter/TnyCz.py
@@ -8,18 +8,19 @@ import re
class TnyCz(SimpleCrypter):
__name__ = "TnyCz"
__type__ = "crypter"
- __version__ = "0.03"
+ __version__ = "0.04"
__pattern__ = r'http://(?:www\.)?tny\.cz/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Tny.cz decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- NAME_PATTERN = r'<title>(?P<N>.+) - .+</title>'
+ NAME_PATTERN = r'<title>(?P<N>.+?) - .+</title>'
def getLinks(self):
diff --git a/module/plugins/crypter/TrailerzoneInfo.py b/module/plugins/crypter/TrailerzoneInfo.py
index 10780dd45..6f1c90612 100644
--- a/module/plugins/crypter/TrailerzoneInfo.py
+++ b/module/plugins/crypter/TrailerzoneInfo.py
@@ -9,7 +9,7 @@ class TrailerzoneInfo(DeadCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?trailerzone\.info/.+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """TrailerZone.info decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/TurbobitNetFolder.py b/module/plugins/crypter/TurbobitNetFolder.py
index c6734c997..dcbd6a5d7 100644
--- a/module/plugins/crypter/TurbobitNetFolder.py
+++ b/module/plugins/crypter/TurbobitNetFolder.py
@@ -12,8 +12,9 @@ class TurbobitNetFolder(SimpleCrypter):
__version__ = "0.05"
__pattern__ = r'http://(?:www\.)?turbobit\.net/download/folder/(?P<ID>\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Turbobit.net folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/TusfilesNetFolder.py b/module/plugins/crypter/TusfilesNetFolder.py
index 20bed0ab1..1cc505b81 100644
--- a/module/plugins/crypter/TusfilesNetFolder.py
+++ b/module/plugins/crypter/TusfilesNetFolder.py
@@ -2,7 +2,7 @@
import math
import re
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.XFSCrypter import XFSCrypter, create_getInfo
@@ -13,8 +13,8 @@ class TusfilesNetFolder(XFSCrypter):
__version__ = "0.08"
__pattern__ = r'https?://(?:www\.)?tusfiles\.net/go/(?P<ID>\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Tusfiles.net folder decrypter plugin"""
__license__ = "GPLv3"
@@ -22,15 +22,13 @@ class TusfilesNetFolder(XFSCrypter):
("stickell", "l.stickell@yahoo.it")]
- HOSTER_DOMAIN = "tusfiles.net"
-
PAGES_PATTERN = r'>\((\d+) \w+\)<'
URL_REPLACEMENTS = [(__pattern__ + ".*", r'https://www.tusfiles.net/go/\g<ID>/')]
def loadPage(self, page_n):
- return self.load(urljoin(self.pyfile.url, str(page_n)), decode=True)
+ return self.load(urlparse.urljoin(self.pyfile.url, str(page_n)), decode=True)
def handlePages(self, pyfile):
diff --git a/module/plugins/crypter/UlozToFolder.py b/module/plugins/crypter/UlozToFolder.py
index a1f3ed5ea..6e2c15c87 100644
--- a/module/plugins/crypter/UlozToFolder.py
+++ b/module/plugins/crypter/UlozToFolder.py
@@ -1,17 +1,17 @@
# -*- coding: utf-8 -*-
import re
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class UlozToFolder(Crypter):
__name__ = "UlozToFolder"
__type__ = "crypter"
- __version__ = "0.20"
+ __version__ = "0.21"
__pattern__ = r'http://(?:www\.)?(uloz\.to|ulozto\.(cz|sk|net)|bagruj\.cz|zachowajto\.pl)/(m|soubory)/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Uloz.to folder decrypter plugin"""
__license__ = "GPLv3"
@@ -19,8 +19,8 @@ class UlozToFolder(Crypter):
FOLDER_PATTERN = r'<ul class="profile_files">(.*?)</ul>'
- LINK_PATTERN = r'<br /><a href="/([^"]+)">[^<]+</a>'
- NEXT_PAGE_PATTERN = r'<a class="next " href="/([^"]+)">&nbsp;</a>'
+ LINK_PATTERN = r'<br /><a href="/(.+?)">.+?</a>'
+ NEXT_PAGE_PATTERN = r'<a class="next " href="/(.+?)">&nbsp;</a>'
def decrypt(self, pyfile):
diff --git a/module/plugins/crypter/UploadableChFolder.py b/module/plugins/crypter/UploadableChFolder.py
index 22f9ca2ed..849aaceea 100644
--- a/module/plugins/crypter/UploadableChFolder.py
+++ b/module/plugins/crypter/UploadableChFolder.py
@@ -9,10 +9,11 @@ class UploadableChFolder(SimpleCrypter):
__version__ = "0.03"
__pattern__ = r'http://(?:www\.)?uploadable\.ch/list/\w+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_premium" , "bool", "Use premium account if available" , True),
+ ("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
- __description__ = """ Uploadable.ch folder decrypter plugin """
+ __description__ = """Uploadable.ch folder decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("guidobelix", "guidobelix@hotmail.it"),
("Walter Purcaro", "vuolter@gmail.com")]
diff --git a/module/plugins/crypter/UploadedToFolder.py b/module/plugins/crypter/UploadedToFolder.py
index 0a71add70..384168030 100644
--- a/module/plugins/crypter/UploadedToFolder.py
+++ b/module/plugins/crypter/UploadedToFolder.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
@@ -10,28 +9,22 @@ from module.plugins.internal.SimpleCrypter import SimpleCrypter, create_getInfo
class UploadedToFolder(SimpleCrypter):
__name__ = "UploadedToFolder"
__type__ = "crypter"
- __version__ = "0.42"
+ __version__ = "0.43"
- __pattern__ = r'http://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/(?P<ID>\w+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'https?://(?:www\.)?(uploaded|ul)\.(to|net)/(f|folder|list)/\w+'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """UploadedTo decrypter plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
- PLAIN_PATTERN = r'<small class="date"><a href="([\w/]+)" onclick='
- NAME_PATTERN = r'<title>(?P<N>.+?)<'
-
-
- def getLinks(self):
- m = re.search(self.PLAIN_PATTERN, self.html)
- if m is None:
- self.error(_("PLAIN_PATTERN not found"))
+ NAME_PATTERN = r'<title>(?P<N>.+?)<'
+ OFFLINE_PATTERN = r'>Page not found'
+ TEMP_OFFLINE_PATTERN = r'<title>uploaded\.net - Maintenance'
- plain_link = urljoin("http://uploaded.net/", m.group(1))
- return self.load(plain_link).split('\n')[:-1]
+ LINK_PATTERN = r'<h2><a href="(.+?)"'
getInfo = create_getInfo(UploadedToFolder)
diff --git a/module/plugins/crypter/WiiReloadedOrg.py b/module/plugins/crypter/WiiReloadedOrg.py
index c3c5b8222..eddc0e5d1 100644
--- a/module/plugins/crypter/WiiReloadedOrg.py
+++ b/module/plugins/crypter/WiiReloadedOrg.py
@@ -9,7 +9,7 @@ class WiiReloadedOrg(DeadCrypter):
__version__ = "0.11"
__pattern__ = r'http://(?:www\.)?wii-reloaded\.org/protect/get\.php\?i=.+'
- __config__ = []
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Wii-Reloaded.org decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/WuploadComFolder.py b/module/plugins/crypter/WuploadComFolder.py
index 873c71fad..dece467a2 100644
--- a/module/plugins/crypter/WuploadComFolder.py
+++ b/module/plugins/crypter/WuploadComFolder.py
@@ -9,6 +9,7 @@ class WuploadComFolder(DeadCrypter):
__version__ = "0.01"
__pattern__ = r'http://(?:www\.)?wupload\.com/folder/\w+'
+ __config__ = [] #@TODO: Remove in 0.4.10
__description__ = """Wupload.com folder decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/XFileSharingProFolder.py b/module/plugins/crypter/XFileSharingProFolder.py
index 55cd41931..70e7365dd 100644
--- a/module/plugins/crypter/XFileSharingProFolder.py
+++ b/module/plugins/crypter/XFileSharingProFolder.py
@@ -8,11 +8,11 @@ from module.plugins.internal.XFSCrypter import XFSCrypter, create_getInfo
class XFileSharingProFolder(XFSCrypter):
__name__ = "XFileSharingProFolder"
__type__ = "crypter"
- __version__ = "0.04"
+ __version__ = "0.08"
- __pattern__ = r'^unmatchable$'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __pattern__ = r'https?://(?:www\.)?(?:\w+\.)*?(?P<DOMAIN>(?:[\d.]+|[\w\-^_]{3,}(?:\.[a-zA-Z]{2,}){1,2})(?:\:\d+)?)/(?:user|folder)s?/\w+'
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """XFileSharingPro dummy folder decrypter plugin for hook"""
__license__ = "GPLv3"
@@ -20,9 +20,7 @@ class XFileSharingProFolder(XFSCrypter):
def _log(self, type, args):
- msg = " | ".join([str(a).strip() for a in args if a])
- logger = getattr(self.log, type)
- logger("%s: %s: %s" % (self.__name__, self.HOSTER_NAME, msg or _("%s MARK" % type.upper())))
+ return super(XFileSharingProFolder, self)._log(type, (self.HOSTER_NAME,) + args)
def init(self):
@@ -31,10 +29,7 @@ class XFileSharingProFolder(XFSCrypter):
self.__pattern__ = self.core.pluginManager.crypterPlugins[self.__name__]['pattern']
self.HOSTER_DOMAIN = re.match(self.__pattern__, self.pyfile.url).group("DOMAIN").lower()
- self.HOSTER_NAME = "".join([part.capitalize() for part in re.split(r'(\.|\d+)', self.HOSTER_DOMAIN) if part != '.'])
-
- if self.HOSTER_NAME[0].isdigit():
- self.HOSTER_NAME = 'X' + self.HOSTER_NAME
+ self.HOSTER_NAME = "".join(part.capitalize() for part in re.split(r'(\.|\d+)', self.HOSTER_DOMAIN) if part != '.')
account = self.core.accountManager.getAccountPlugin(self.HOSTER_NAME)
diff --git a/module/plugins/crypter/XupPl.py b/module/plugins/crypter/XupPl.py
index f2ecbee5a..9dff23215 100644
--- a/module/plugins/crypter/XupPl.py
+++ b/module/plugins/crypter/XupPl.py
@@ -1,16 +1,16 @@
# -*- coding: utf-8 -*-
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
class XupPl(Crypter):
__name__ = "XupPl"
__type__ = "crypter"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'https?://(?:[^/]*\.)?xup\.pl/.+'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True)]
__description__ = """Xup.pl decrypter plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/crypter/YoutubeBatch.py b/module/plugins/crypter/YoutubeComFolder.py
index 73ebf5fb3..bcaa7effe 100644
--- a/module/plugins/crypter/YoutubeBatch.py
+++ b/module/plugins/crypter/YoutubeComFolder.py
@@ -1,25 +1,24 @@
# -*- coding: utf-8 -*-
import re
-
-from urlparse import urljoin
+import urlparse
from module.common.json_layer import json_loads
-from module.plugins.Crypter import Crypter
+from module.plugins.internal.Crypter import Crypter
from module.utils import save_join
-class YoutubeBatch(Crypter):
- __name__ = "YoutubeBatch"
+class YoutubeComFolder(Crypter):
+ __name__ = "YoutubeComFolder"
__type__ = "crypter"
- __version__ = "1.01"
+ __version__ = "1.02"
__pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)'
- __config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
- ("subfolder_per_package", "bool", "Create a subfolder for each package", True),
- ("likes", "bool", "Grab user (channel) liked videos", False),
- ("favorites", "bool", "Grab user (channel) favorite videos", False),
- ("uploads", "bool", "Grab channel unplaylisted videos", True)]
+ __config__ = [("use_subfolder" , "bool", "Save package to subfolder" , True ),
+ ("subfolder_per_pack", "bool", "Create a subfolder for each package", True ),
+ ("likes" , "bool", "Grab user (channel) liked videos" , False),
+ ("favorites" , "bool", "Grab user (channel) favorite videos", False),
+ ("uploads" , "bool", "Grab channel unplaylisted videos" , True )]
__description__ = """Youtube.com channel & playlist decrypter plugin"""
__license__ = "GPLv3"
@@ -31,9 +30,9 @@ class YoutubeBatch(Crypter):
def api_response(self, ref, req):
req.update({"key": self.API_KEY})
- url = urljoin("https://www.googleapis.com/youtube/v3/", ref)
- page = self.load(url, get=req)
- return json_loads(page)
+ url = urlparse.urljoin("https://www.googleapis.com/youtube/v3/", ref)
+ html = self.load(url, get=req)
+ return json_loads(html)
def getChannel(self, user):