summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/plugins/container/RSDF.py2
-rw-r--r--module/plugins/crypter/FilecryptCc.py26
-rw-r--r--module/plugins/crypter/MegaCoNzFolder.py2
-rw-r--r--module/plugins/crypter/NCryptIn.py6
-rw-r--r--module/plugins/crypter/RelinkUs.py6
-rw-r--r--module/plugins/crypter/SafelinkingNet.py4
-rw-r--r--module/plugins/hooks/DeathByCaptcha.py2
-rw-r--r--module/plugins/hooks/ExtractArchive.py38
-rw-r--r--module/plugins/hooks/ImageTyperz.py2
-rw-r--r--module/plugins/hoster/BitshareCom.py4
-rw-r--r--module/plugins/hoster/CatShareNet.py4
-rw-r--r--module/plugins/hoster/CrockoCom.py4
-rw-r--r--module/plugins/hoster/DateiTo.py4
-rw-r--r--module/plugins/hoster/DepositfilesCom.py4
-rw-r--r--module/plugins/hoster/ExtabitCom.py4
-rw-r--r--module/plugins/hoster/FilecloudIo.py6
-rw-r--r--module/plugins/hoster/FilepostCom.py4
-rw-r--r--module/plugins/hoster/FilerNet.py4
-rw-r--r--module/plugins/hoster/FileserveCom.py4
-rw-r--r--module/plugins/hoster/Keep2ShareCc.py13
-rw-r--r--module/plugins/hoster/KingfilesNet.py4
-rw-r--r--module/plugins/hoster/LetitbitNet.py4
-rw-r--r--module/plugins/hoster/LoadTo.py4
-rw-r--r--module/plugins/hoster/LuckyShareNet.py4
-rw-r--r--module/plugins/hoster/MediafireCom.py4
-rw-r--r--module/plugins/hoster/MegaCoNz.py4
-rw-r--r--module/plugins/hoster/NetloadIn.py6
-rw-r--r--module/plugins/hoster/NitroflareCom.py6
-rw-r--r--module/plugins/hoster/NoPremiumPl.py6
-rw-r--r--module/plugins/hoster/OboomCom.py4
-rw-r--r--module/plugins/hoster/RapideoPl.py6
-rw-r--r--module/plugins/hoster/RapidgatorNet.py10
-rw-r--r--module/plugins/hoster/RapiduNet.py4
-rw-r--r--module/plugins/hoster/ShareonlineBiz.py4
-rw-r--r--module/plugins/hoster/TurbobitNet.py4
-rw-r--r--module/plugins/hoster/UpleaCom.py2
-rw-r--r--module/plugins/hoster/UploadableCh.py4
-rw-r--r--module/plugins/hoster/UpstoreNet.py4
-rw-r--r--module/plugins/hoster/ZippyshareCom.py37
-rw-r--r--module/plugins/internal/CaptchaService.py267
-rw-r--r--module/plugins/internal/SimpleCrypter.py2
-rw-r--r--module/plugins/internal/SimpleDereferer.py5
-rw-r--r--module/plugins/internal/SimpleHoster.py3
-rw-r--r--module/plugins/internal/XFSHoster.py6
44 files changed, 291 insertions, 256 deletions
diff --git a/module/plugins/container/RSDF.py b/module/plugins/container/RSDF.py
index 0c43f0e6c..e263c3fe3 100644
--- a/module/plugins/container/RSDF.py
+++ b/module/plugins/container/RSDF.py
@@ -39,7 +39,7 @@ class RSDF(Container):
with open(infile, 'r') as rsdf:
data = rsdf.read()
except IOError, e:
- self.fail(str(e))
+ self.fail(e)
if re.search(r"<title>404 - Not Found</title>", data) is None:
data = binascii.unhexlify(''.join(data.split()))
diff --git a/module/plugins/crypter/FilecryptCc.py b/module/plugins/crypter/FilecryptCc.py
index 51e6eb296..096fd414d 100644
--- a/module/plugins/crypter/FilecryptCc.py
+++ b/module/plugins/crypter/FilecryptCc.py
@@ -8,13 +8,13 @@ from Crypto.Cipher import AES
from urlparse import urljoin
from module.plugins.Crypter import Crypter
-from module.plugins.internal.CaptchaService import ReCaptchaV2
+from module.plugins.internal.CaptchaService import ReCaptcha
class FilecryptCc(Crypter):
__name__ = "FilecryptCc"
__type__ = "crypter"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'https?://(?:www\.)?filecrypt\.cc/Container/\w+'
@@ -74,7 +74,7 @@ class FilecryptCc(Crypter):
self.logInfo(_("Folder is password protected"))
password = self.getPassword()
-
+
if not password:
self.fail(_("Please enter the password in package section and try again"))
@@ -108,15 +108,19 @@ class FilecryptCc(Crypter):
post={'button.x': captcha_code[0], 'button.y': captcha_code[1]},
cookies=True,
decode=True)
-
- elif 'class="g-recaptcha"' in self.html: #: ReCaptchaV2
- captcha = ReCaptchaV2(self)
- response = captcha.doTheCaptcha(self.pyfile.url.split("/")[2])
- self.siteWithLinks = self.load(self.pyfile.url, cookies=True, decode=True, post={"g-recaptcha-response":response})
-
+
else:
- self.logInfo(_("No captcha found"))
- self.siteWithLinks = self.html
+ recaptcha = ReCaptcha(self)
+ captcha_key = recaptcha.detect_key()
+
+ if captcha_key:
+ response, challenge = recaptcha.challenge(captcha_key)
+ self.siteWithLinks = self.load(self.pyfile.url,
+ post={'g-recaptcha-response': response},
+ decode=True)
+ else:
+ self.logInfo(_("No captcha found"))
+ self.siteWithLinks = self.html
if "recaptcha_image" in self.siteWithLinks or "data-sitekey" in self.siteWithLinks:
self.invalidCaptcha()
diff --git a/module/plugins/crypter/MegaCoNzFolder.py b/module/plugins/crypter/MegaCoNzFolder.py
index bec4eba22..954bfb9a5 100644
--- a/module/plugins/crypter/MegaCoNzFolder.py
+++ b/module/plugins/crypter/MegaCoNzFolder.py
@@ -29,4 +29,4 @@ class MegaCoNzFolder(Crypter):
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/NCryptIn.py b/module/plugins/crypter/NCryptIn.py
index 7c881ce75..f75f6d484 100644
--- a/module/plugins/crypter/NCryptIn.py
+++ b/module/plugins/crypter/NCryptIn.py
@@ -13,7 +13,7 @@ from module.plugins.internal.CaptchaService import ReCaptcha
class NCryptIn(Crypter):
__name__ = "NCryptIn"
__type__ = "crypter"
- __version__ = "1.33"
+ __version__ = "1.34"
__pattern__ = r'http://(?:www\.)?ncrypt\.in/(?P<TYPE>folder|link|frame)-([^/\?]+)'
__config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
@@ -156,7 +156,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 +205,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):
diff --git a/module/plugins/crypter/RelinkUs.py b/module/plugins/crypter/RelinkUs.py
index 0fd80d593..a6014c866 100644
--- a/module/plugins/crypter/RelinkUs.py
+++ b/module/plugins/crypter/RelinkUs.py
@@ -191,7 +191,7 @@ 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):
@@ -223,8 +223,10 @@ class RelinkUs(Crypter):
with open(dlc_filepath, "wb") as f:
f.write(dlc)
package_links.append(dlc_filepath)
+
except Exception:
- self.fail("Unable to download DLC container")
+ self.fail(_("Unable to download DLC container"))
+
return package_links
diff --git a/module/plugins/crypter/SafelinkingNet.py b/module/plugins/crypter/SafelinkingNet.py
index a56a0a44c..8e46e1e41 100644
--- a/module/plugins/crypter/SafelinkingNet.py
+++ b/module/plugins/crypter/SafelinkingNet.py
@@ -14,7 +14,7 @@ from module.plugins.internal.CaptchaService import SolveMedia
class SafelinkingNet(Crypter):
__name__ = "SafelinkingNet"
__type__ = "crypter"
- __version__ = "0.13"
+ __version__ = "0.14"
__pattern__ = r'https?://(?:www\.)?safelinking\.net/([pd])/\w+'
__config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
@@ -57,7 +57,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/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py
index 050b6fe15..d513c446d 100644
--- a/module/plugins/hooks/DeathByCaptcha.py
+++ b/module/plugins/hooks/DeathByCaptcha.py
@@ -135,7 +135,7 @@ class DeathByCaptcha(Hook):
def submit(self, captcha, captchaType="file", match=None):
- #workaround multipart-post bug in HTTPRequest.py
+ #@NOTE: Workaround multipart-post bug in HTTPRequest.py
if re.match("^\w*$", self.getConfig("passkey")):
multipart = True
data = (FORM_FILE, captcha)
diff --git a/module/plugins/hooks/ExtractArchive.py b/module/plugins/hooks/ExtractArchive.py
index bdbaf64af..f2f4b5207 100644
--- a/module/plugins/hooks/ExtractArchive.py
+++ b/module/plugins/hooks/ExtractArchive.py
@@ -58,7 +58,7 @@ from module.utils import save_join, uniqify
class ExtractArchive(Hook):
__name__ = "ExtractArchive"
__type__ = "hook"
- __version__ = "1.04"
+ __version__ = "1.05"
__config__ = [("activated" , "bool" , "Activated" , True ),
("fullpath" , "bool" , "Extract full path" , True ),
@@ -305,33 +305,33 @@ class ExtractArchive(Hook):
encrypted = True #@TODO: set to `False`
passwords = self.getPasswords()
- # try:
- # self.logInfo(basename(plugin.file), "Verifying...")
+ try:
+ self.logInfo(basename(plugin.file), "Verifying...")
- # tmp_password = plugin.password
- # plugin.password = "" #: Force verifying without password
+ tmp_password = plugin.password
+ plugin.password = "" #: Force verifying without password
- # plugin.verify()
+ plugin.verify()
- # except PasswordError:
- # encrypted = True
+ except PasswordError:
+ encrypted = True
- # except CRCError:
- # self.logWarning(basename(plugin.file), _("Archive damaged"))
+ except CRCError:
+ self.logWarning(basename(plugin.file), _("Archive damaged"))
- # if not self.getConfig("repair"):
- # raise CRCError
+ if not self.getConfig("repair"):
+ raise CRCError
- # elif plugin.repair():
- # self.logInfo(basename(plugin.file), _("Successfully repaired"))
+ elif plugin.repair():
+ self.logInfo(basename(plugin.file), _("Successfully repaired"))
- # elif not self.getConfig("keepbroken"):
- # raise ArchiveError(_("Broken archive"))
+ elif not self.getConfig("keepbroken"):
+ raise ArchiveError(_("Broken archive"))
- # else:
- # self.logInfo(basename(plugin.file), _("All OK"))
+ else:
+ self.logInfo(basename(plugin.file), _("All OK"))
- # plugin.password = tmp_password
+ plugin.password = tmp_password
if not encrypted:
plugin.extract(progress)
diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py
index 768129e4a..d62fed385 100644
--- a/module/plugins/hooks/ImageTyperz.py
+++ b/module/plugins/hooks/ImageTyperz.py
@@ -82,7 +82,7 @@ class ImageTyperz(Hook):
req.c.setopt(LOW_SPEED_TIME, 80)
try:
- #workaround multipart-post bug in HTTPRequest.py
+ #@NOTE: Workaround multipart-post bug in HTTPRequest.py
if re.match("^\w*$", self.getConfig("passkey")):
multipart = True
data = (FORM_FILE, captcha)
diff --git a/module/plugins/hoster/BitshareCom.py b/module/plugins/hoster/BitshareCom.py
index f7b4d2709..657e70e56 100644
--- a/module/plugins/hoster/BitshareCom.py
+++ b/module/plugins/hoster/BitshareCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class BitshareCom(SimpleHoster):
__name__ = "BitshareCom"
__type__ = "hoster"
- __version__ = "0.52"
+ __version__ = "0.53"
__pattern__ = r'http://(?:www\.)?bitshare\.com/(files/)?(?(1)|\?f=)(?P<ID>\w+)(?(1)/(?P<NAME>.+?)\.html)'
@@ -114,7 +114,7 @@ class BitshareCom(SimpleHoster):
# Try up to 3 times
for i in xrange(3):
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
res = self.load("http://bitshare.com/files-ajax/" + self.file_id + "/request.html",
post={"request" : "validateCaptcha",
"ajaxid" : self.ajaxid,
diff --git a/module/plugins/hoster/CatShareNet.py b/module/plugins/hoster/CatShareNet.py
index ba8996193..339253aeb 100644
--- a/module/plugins/hoster/CatShareNet.py
+++ b/module/plugins/hoster/CatShareNet.py
@@ -9,7 +9,7 @@ from module.plugins.internal.CaptchaService import ReCaptcha
class CatShareNet(SimpleHoster):
__name__ = "CatShareNet"
__type__ = "hoster"
- __version__ = "0.10"
+ __version__ = "0.11"
__pattern__ = r'http://(?:www\.)?catshare\.net/\w{16}'
@@ -46,7 +46,7 @@ class CatShareNet(SimpleHoster):
def handleFree(self, pyfile):
recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
self.html = self.load(pyfile.url,
post={'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
diff --git a/module/plugins/hoster/CrockoCom.py b/module/plugins/hoster/CrockoCom.py
index 31d0eec95..474042a5a 100644
--- a/module/plugins/hoster/CrockoCom.py
+++ b/module/plugins/hoster/CrockoCom.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class CrockoCom(SimpleHoster):
__name__ = "CrockoCom"
__type__ = "hoster"
- __version__ = "0.18"
+ __version__ = "0.19"
__pattern__ = r'http://(?:www\.)?(crocko|easy-share)\.com/\w+'
@@ -52,7 +52,7 @@ class CrockoCom(SimpleHoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge()
+ inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
self.download(action, post=inputs)
if self.checkDownload({"captcha": recaptcha.KEY_AJAX_PATTERN}):
diff --git a/module/plugins/hoster/DateiTo.py b/module/plugins/hoster/DateiTo.py
index 99b86e000..e5061e026 100644
--- a/module/plugins/hoster/DateiTo.py
+++ b/module/plugins/hoster/DateiTo.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class DateiTo(SimpleHoster):
__name__ = "DateiTo"
__type__ = "hoster"
- __version__ = "0.06"
+ __version__ = "0.07"
__pattern__ = r'http://(?:www\.)?datei\.to/datei/(?P<ID>\w+)\.html'
@@ -52,7 +52,7 @@ class DateiTo(SimpleHoster):
data = dict(x.split('=') for x in m.group(2).split('&'))
if url.endswith('recaptcha.php'):
- data['recaptcha_challenge_field'], data['recaptcha_response_field'] = recaptcha.challenge()
+ data['recaptcha_response_field'], data['recaptcha_challenge_field'] = recaptcha.challenge()
else:
self.fail(_("Too bad..."))
diff --git a/module/plugins/hoster/DepositfilesCom.py b/module/plugins/hoster/DepositfilesCom.py
index 6e7f2909c..3af309cae 100644
--- a/module/plugins/hoster/DepositfilesCom.py
+++ b/module/plugins/hoster/DepositfilesCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class DepositfilesCom(SimpleHoster):
__name__ = "DepositfilesCom"
__type__ = "hoster"
- __version__ = "0.52"
+ __version__ = "0.53"
__pattern__ = r'https?://(?:www\.)?(depositfiles\.com|dfiles\.(eu|ru))(/\w{1,3})?/files/(?P<ID>\w+)'
@@ -77,7 +77,7 @@ class DepositfilesCom(SimpleHoster):
if '<input type=button value="Continue" onclick="check_recaptcha' in self.html:
if 'response' in params:
self.invalidCaptcha()
- params['challenge'], params['response'] = recaptcha.challenge(captcha_key)
+ params['response'], params['challenge'] = recaptcha.challenge(captcha_key)
self.logDebug(params)
continue
diff --git a/module/plugins/hoster/ExtabitCom.py b/module/plugins/hoster/ExtabitCom.py
index 5c2976a29..68695faad 100644
--- a/module/plugins/hoster/ExtabitCom.py
+++ b/module/plugins/hoster/ExtabitCom.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, s
class ExtabitCom(SimpleHoster):
__name__ = "ExtabitCom"
__type__ = "hoster"
- __version__ = "0.64"
+ __version__ = "0.65"
__pattern__ = r'http://(?:www\.)?extabit\.com/(file|go|fid)/(?P<ID>\w+)'
@@ -50,7 +50,7 @@ class ExtabitCom(SimpleHoster):
for _i in xrange(5):
get_data = {"type": "recaptcha"}
- get_data['challenge'], get_data['capture'] = recaptcha.challenge(captcha_key)
+ get_data['capture'], get_data['challenge'] = recaptcha.challenge(captcha_key)
res = json_loads(self.load("http://extabit.com/file/%s/" % fileID, get=get_data))
if "ok" in res:
self.correctCaptcha()
diff --git a/module/plugins/hoster/FilecloudIo.py b/module/plugins/hoster/FilecloudIo.py
index bc328ddbd..fb1aea58f 100644
--- a/module/plugins/hoster/FilecloudIo.py
+++ b/module/plugins/hoster/FilecloudIo.py
@@ -10,7 +10,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FilecloudIo(SimpleHoster):
__name__ = "FilecloudIo"
__type__ = "hoster"
- __version__ = "0.06"
+ __version__ = "0.08"
__pattern__ = r'http://(?:www\.)?(?:filecloud\.io|ifile\.it|mihd\.net)/(?P<ID>\w+)'
@@ -59,7 +59,7 @@ class FilecloudIo(SimpleHoster):
if captcha_key is None:
self.error(_("ReCaptcha key not found"))
- challenge, response = recaptcha.challenge(captcha_key)
+ response, challenge = recaptcha.challenge(captcha_key)
self.account.form_data = {"recaptcha_challenge_field": challenge,
"recaptcha_response_field" : response}
self.account.relogin(self.user)
@@ -78,7 +78,7 @@ class FilecloudIo(SimpleHoster):
data['ctype'] = "recaptcha"
for _i in xrange(5):
- data['recaptcha_challenge'], data['recaptcha_response'] = recaptcha.challenge(captcha_key)
+ data['recaptcha_response'], data['recaptcha_challenge'] = recaptcha.challenge(captcha_key)
json_url = "http://filecloud.io/download-request.json"
res = self.load(json_url, post=data)
diff --git a/module/plugins/hoster/FilepostCom.py b/module/plugins/hoster/FilepostCom.py
index 4dd36c6e4..25def94e8 100644
--- a/module/plugins/hoster/FilepostCom.py
+++ b/module/plugins/hoster/FilepostCom.py
@@ -12,7 +12,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FilepostCom(SimpleHoster):
__name__ = "FilepostCom"
__type__ = "hoster"
- __version__ = "0.32"
+ __version__ = "0.33"
__pattern__ = r'https?://(?:www\.)?(?:filepost\.com/files|fp\.io)/(?P<ID>[^/]+)'
@@ -74,7 +74,7 @@ class FilepostCom(SimpleHoster):
for i in xrange(5):
get_dict['JsHttpRequest'] = str(int(time() * 10000)) + '-xml'
if i:
- post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field'] = recaptcha.challenge(
+ post_dict['recaptcha_response_field'], post_dict['recaptcha_challenge_field'] = recaptcha.challenge(
captcha_key)
self.logDebug(u"RECAPTCHA: %s : %s : %s" % (
captcha_key, post_dict['recaptcha_challenge_field'], post_dict['recaptcha_response_field']))
diff --git a/module/plugins/hoster/FilerNet.py b/module/plugins/hoster/FilerNet.py
index a668a834b..f0b37e4cb 100644
--- a/module/plugins/hoster/FilerNet.py
+++ b/module/plugins/hoster/FilerNet.py
@@ -16,7 +16,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class FilerNet(SimpleHoster):
__name__ = "FilerNet"
__type__ = "hoster"
- __version__ = "0.13"
+ __version__ = "0.14"
__pattern__ = r'https?://(?:www\.)?filer\.net/get/\w+'
@@ -56,7 +56,7 @@ class FilerNet(SimpleHoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
#@NOTE: Work-around for v0.4.9 just_header issue
#@TODO: Check for v0.4.10
diff --git a/module/plugins/hoster/FileserveCom.py b/module/plugins/hoster/FileserveCom.py
index 515ec9029..6f316cea3 100644
--- a/module/plugins/hoster/FileserveCom.py
+++ b/module/plugins/hoster/FileserveCom.py
@@ -33,7 +33,7 @@ def checkFile(plugin, urls):
class FileserveCom(Hoster):
__name__ = "FileserveCom"
__type__ = "hoster"
- __version__ = "0.53"
+ __version__ = "0.54"
__pattern__ = r'http://(?:www\.)?fileserve\.com/file/(?P<ID>[^/]+)'
@@ -161,7 +161,7 @@ class FileserveCom(Hoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge(captcha_key)
+ response, challenge = recaptcha.challenge(captcha_key)
res = json_loads(self.load(self.URLS[2],
post={'recaptcha_challenge_field' : challenge,
'recaptcha_response_field' : response,
diff --git a/module/plugins/hoster/Keep2ShareCc.py b/module/plugins/hoster/Keep2ShareCc.py
index d02b9f709..34bc3de54 100644
--- a/module/plugins/hoster/Keep2ShareCc.py
+++ b/module/plugins/hoster/Keep2ShareCc.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class Keep2ShareCc(SimpleHoster):
__name__ = "Keep2ShareCc"
__type__ = "hoster"
- __version__ = "0.20"
+ __version__ = "0.21"
__pattern__ = r'https?://(?:www\.)?(keep2share|k2s|keep2s)\.cc/file/(?P<ID>\w+)'
@@ -29,7 +29,8 @@ class Keep2ShareCc(SimpleHoster):
OFFLINE_PATTERN = r'File not found or deleted|Sorry, this file is blocked or deleted|Error 404'
TEMP_OFFLINE_PATTERN = r'Downloading blocked due to'
- LINK_FREE_PATTERN = LINK_PREMIUM_PATTERN = r'"([^"]+url.html?file=.+?)"|window\.location\.href = \'(.+?)\';'
+ LINK_FREE_PATTERN = r'"([^"]+url.html?file=.+?)"|window\.location\.href = \'(.+?)\';'
+ LINK_PREMIUM_PATTERN = r'window\.location\.href = \'(.+?)\';'
CAPTCHA_PATTERN = r'src="(/file/captcha\.html.+?)"'
@@ -77,9 +78,7 @@ class Keep2ShareCc(SimpleHoster):
self.wait(30)
- self.html = self.load(pyfile.url, post={'uniqueId': self.fid, 'free': 1})
-
- self.checkErrors()
+ self.html = self.load(pyfile.url)
m = re.search(self.LINK_FREE_PATTERN, self.html)
if m is None:
@@ -100,13 +99,13 @@ class Keep2ShareCc(SimpleHoster):
captcha_url = urljoin("http://k2s.cc/", m.group(1))
post_data['CaptchaForm[code]'] = self.decryptCaptcha(captcha_url)
else:
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
post_data.update({'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
self.html = self.load(self.pyfile.url, post=post_data)
- if 'recaptcha' not in self.html:
+ if 'verification code is incorrect' not in self.html:
self.correctCaptcha()
else:
self.invalidCaptcha()
diff --git a/module/plugins/hoster/KingfilesNet.py b/module/plugins/hoster/KingfilesNet.py
index a75ef5f3e..eb4d34cc2 100644
--- a/module/plugins/hoster/KingfilesNet.py
+++ b/module/plugins/hoster/KingfilesNet.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class KingfilesNet(SimpleHoster):
__name__ = "KingfilesNet"
__type__ = "hoster"
- __version__ = "0.06"
+ __version__ = "0.07"
__pattern__ = r'http://(?:www\.)?kingfiles\.net/(?P<ID>\w{12})'
@@ -46,7 +46,7 @@ class KingfilesNet(SimpleHoster):
self.html = self.load(pyfile.url, post=post_data, cookies=True, decode=True)
solvemedia = SolveMedia(self)
- challenge, response = solvemedia.challenge()
+ response, challenge = solvemedia.challenge()
# Make the downloadlink appear and load the file
m = re.search(self.RAND_ID_PATTERN, self.html)
diff --git a/module/plugins/hoster/LetitbitNet.py b/module/plugins/hoster/LetitbitNet.py
index 6d5641778..cd922aea7 100644
--- a/module/plugins/hoster/LetitbitNet.py
+++ b/module/plugins/hoster/LetitbitNet.py
@@ -36,7 +36,7 @@ def getInfo(urls):
class LetitbitNet(SimpleHoster):
__name__ = "LetitbitNet"
__type__ = "hoster"
- __version__ = "0.29"
+ __version__ = "0.30"
__pattern__ = r'https?://(?:www\.)?(letitbit|shareflare)\.net/download/.+'
@@ -96,7 +96,7 @@ class LetitbitNet(SimpleHoster):
self.logDebug(res)
recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
post_data = {"recaptcha_challenge_field": challenge,
"recaptcha_response_field": response,
diff --git a/module/plugins/hoster/LoadTo.py b/module/plugins/hoster/LoadTo.py
index b21a69b5f..a16735cf4 100644
--- a/module/plugins/hoster/LoadTo.py
+++ b/module/plugins/hoster/LoadTo.py
@@ -13,7 +13,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class LoadTo(SimpleHoster):
__name__ = "LoadTo"
__type__ = "hoster"
- __version__ = "0.19"
+ __version__ = "0.20"
__pattern__ = r'http://(?:www\.)?load\.to/\w+'
@@ -58,7 +58,7 @@ class LoadTo(SimpleHoster):
if captcha_key is None:
self.download(download_url)
else:
- challenge, response = solvemedia.challenge(captcha_key)
+ response, challenge = solvemedia.challenge(captcha_key)
self.download(download_url, post={"adcopy_challenge": challenge, "adcopy_response": response})
diff --git a/module/plugins/hoster/LuckyShareNet.py b/module/plugins/hoster/LuckyShareNet.py
index 09300a41a..08f4f48dd 100644
--- a/module/plugins/hoster/LuckyShareNet.py
+++ b/module/plugins/hoster/LuckyShareNet.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class LuckyShareNet(SimpleHoster):
__name__ = "LuckyShareNet"
__type__ = "hoster"
- __version__ = "0.05"
+ __version__ = "0.06"
__pattern__ = r'https?://(?:www\.)?luckyshare\.net/(?P<ID>\d{10,})'
@@ -52,7 +52,7 @@ class LuckyShareNet(SimpleHoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
rep = self.load(r"http://luckyshare.net/download/verify/challenge/%s/response/%s/hash/%s" %
(challenge, response, json['hash']), decode=True)
self.logDebug("JSON: " + rep)
diff --git a/module/plugins/hoster/MediafireCom.py b/module/plugins/hoster/MediafireCom.py
index d404498f3..bc81c8202 100644
--- a/module/plugins/hoster/MediafireCom.py
+++ b/module/plugins/hoster/MediafireCom.py
@@ -54,7 +54,7 @@ def getInfo(urls):
class MediafireCom(SimpleHoster):
__name__ = "MediafireCom"
__type__ = "hoster"
- __version__ = "0.83"
+ __version__ = "0.84"
__pattern__ = r'http://(?:www\.)?mediafire\.com/(file/|(view/?|download\.php)?\?)(\w{11}|\w{15})($|/)'
@@ -121,7 +121,7 @@ class MediafireCom(SimpleHoster):
def checkCaptcha(self):
solvemedia = SolveMedia(self)
- challenge, response = solvemedia.challenge()
+ response, challenge = solvemedia.challenge()
self.html = self.load(self.link,
post={'adcopy_challenge': challenge,
'adcopy_response' : response},
diff --git a/module/plugins/hoster/MegaCoNz.py b/module/plugins/hoster/MegaCoNz.py
index fbd34c563..4ad20b265 100644
--- a/module/plugins/hoster/MegaCoNz.py
+++ b/module/plugins/hoster/MegaCoNz.py
@@ -124,7 +124,7 @@ class MegaCoNz(Hoster):
df = open(file_decrypted, "wb")
except IOError, e:
- self.fail(str(e))
+ self.fail(e)
chunk_size = 2 ** 15 # buffer size, 32k
# file_mac = [0, 0, 0, 0] # calculate CBC-MAC for checksum
@@ -160,7 +160,7 @@ class MegaCoNz(Hoster):
# if file_mac[0] ^ file_mac[1], file_mac[2] ^ file_mac[3] != meta_mac:
# os.remove(file_decrypted)
- # self.fail("Checksum mismatch")
+ # self.fail(_("Checksum mismatch"))
os.remove(file_crypted)
self.lastDownload = fs_decode(file_decrypted)
diff --git a/module/plugins/hoster/NetloadIn.py b/module/plugins/hoster/NetloadIn.py
index 35c814656..44f45696f 100644
--- a/module/plugins/hoster/NetloadIn.py
+++ b/module/plugins/hoster/NetloadIn.py
@@ -62,7 +62,7 @@ def getInfo(urls):
class NetloadIn(Hoster):
__name__ = "NetloadIn"
__type__ = "hoster"
- __version__ = "0.47"
+ __version__ = "0.48"
__pattern__ = r'https?://(?:[^/]*\.)?netload\.in/(?:datei(.*?)(?:\.htm|/)|index\.php?id=10&file_id=)'
@@ -235,7 +235,7 @@ class NetloadIn(Hoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
response_page = self.load("http://www.netload.in/index.php?id=10",
post={'captcha_check' : '1',
@@ -254,7 +254,7 @@ class NetloadIn(Hoster):
download_url = self.get_file_url(response_page)
self.logDebug("Download URL after get_file: " + download_url)
if not download_url.startswith("http://"):
- self.error("download url: %s" % download_url)
+ self.error(_("Download url: %s") % download_url)
self.wait()
self.url = download_url
diff --git a/module/plugins/hoster/NitroflareCom.py b/module/plugins/hoster/NitroflareCom.py
index 722fb6eaf..e21d067b3 100644
--- a/module/plugins/hoster/NitroflareCom.py
+++ b/module/plugins/hoster/NitroflareCom.py
@@ -16,7 +16,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster
class NitroflareCom(SimpleHoster):
__name__ = "NitroflareCom"
__type__ = "hoster"
- __version__ = "0.06"
+ __version__ = "0.07"
__pattern__ = r'https?://(?:www\.)?nitroflare\.com/view/(?P<ID>[\w^_]+)'
@@ -32,6 +32,8 @@ class NitroflareCom(SimpleHoster):
LINK_FREE_PATTERN = r'(https?://[\w\-]+\.nitroflare\.com/.+?)"'
+ RECAPTCHA_KEY = "6Lenx_USAAAAAF5L1pmTWvWcH73dipAEzNnmNLgy"
+
PREMIUM_ONLY_PATTERN = r'This file is available with Premium only'
WAIT_PATTERN = r'You have to wait .+?<'
ERROR_PATTERN = r'downloading is not possible'
@@ -81,7 +83,7 @@ class NitroflareCom(SimpleHoster):
self.wait(wait_time)
recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge("6Lenx_USAAAAAF5L1pmTWvWcH73dipAEzNnmNLgy")
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
self.html = self.load("http://nitroflare.com/ajax/freeDownload.php",
post={'method' : "fetchDownload",
diff --git a/module/plugins/hoster/NoPremiumPl.py b/module/plugins/hoster/NoPremiumPl.py
index 361d48c2d..43ae8b3cc 100644
--- a/module/plugins/hoster/NoPremiumPl.py
+++ b/module/plugins/hoster/NoPremiumPl.py
@@ -83,14 +83,14 @@ class NoPremiumPl(MultiHoster):
# error code isn't yet added to plugin
self.fail(
parsed["errstring"]
- or "Unknown error (code: %s)" % parsed["errno"]
+ or _("Unknown error (code: %s)") % parsed["errno"]
)
if "sdownload" in parsed:
if parsed["sdownload"] == "1":
self.fail(
- "Download from %s is possible only using NoPremium.pl webiste \
- directly. Update this plugin." % parsed["hosting"])
+ _("Download from %s is possible only using NoPremium.pl website \
+ directly") % parsed["hosting"])
pyfile.name = parsed["filename"]
pyfile.size = parsed["filesize"]
diff --git a/module/plugins/hoster/OboomCom.py b/module/plugins/hoster/OboomCom.py
index 588d8f64a..725763345 100644
--- a/module/plugins/hoster/OboomCom.py
+++ b/module/plugins/hoster/OboomCom.py
@@ -13,7 +13,7 @@ from module.plugins.internal.CaptchaService import ReCaptcha
class OboomCom(Hoster):
__name__ = "OboomCom"
__type__ = "hoster"
- __version__ = "0.30"
+ __version__ = "0.31"
__pattern__ = r'https?://(?:www\.)?oboom\.com/(#(id=|/)?)?(?P<ID>\w{8})'
@@ -74,7 +74,7 @@ class OboomCom(Hoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
apiUrl = "https://www.oboom.com/1.0/download/ticket"
params = {"recaptcha_challenge_field": challenge,
"recaptcha_response_field": response,
diff --git a/module/plugins/hoster/RapideoPl.py b/module/plugins/hoster/RapideoPl.py
index 2f7365e3b..85591f51f 100644
--- a/module/plugins/hoster/RapideoPl.py
+++ b/module/plugins/hoster/RapideoPl.py
@@ -83,14 +83,14 @@ class RapideoPl(MultiHoster):
# error code isn't yet added to plugin
self.fail(
parsed["errstring"]
- or "Unknown error (code: %s)" % parsed["errno"]
+ or _("Unknown error (code: %s)") % parsed["errno"]
)
if "sdownload" in parsed:
if parsed["sdownload"] == "1":
self.fail(
- "Download from %s is possible only using Rapideo.pl webiste \
- directly. Update this plugin." % parsed["hosting"])
+ _("Download from %s is possible only using Rapideo.pl website \
+ directly") % parsed["hosting"])
pyfile.name = parsed["filename"]
pyfile.size = parsed["filesize"]
diff --git a/module/plugins/hoster/RapidgatorNet.py b/module/plugins/hoster/RapidgatorNet.py
index 84c3b20d6..253109422 100644
--- a/module/plugins/hoster/RapidgatorNet.py
+++ b/module/plugins/hoster/RapidgatorNet.py
@@ -13,7 +13,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, s
class RapidgatorNet(SimpleHoster):
__name__ = "RapidgatorNet"
__type__ = "hoster"
- __version__ = "0.29"
+ __version__ = "0.30"
__pattern__ = r'http://(?:www\.)?(rapidgator\.net|rg\.to)/file/\w+'
@@ -128,7 +128,7 @@ class RapidgatorNet(SimpleHoster):
break
else:
captcha, captcha_key = self.getCaptcha()
- challenge, response = captcha.challenge(captcha_key)
+ response, challenge = captcha.challenge(captcha_key)
self.html = self.load(url, post={'DownloadCaptchaForm[captcha]': "",
'adcopy_challenge' : challenge,
@@ -146,17 +146,17 @@ class RapidgatorNet(SimpleHoster):
m = re.search(self.ADSCAPTCHA_PATTERN, self.html)
if m:
captcha_key = m.group(1)
- captcha = AdsCaptcha(self)
+ captcha = AdsCaptcha(self)
else:
m = re.search(self.RECAPTCHA_PATTERN, self.html)
if m:
captcha_key = m.group(1)
- captcha = ReCaptcha(self)
+ captcha = ReCaptcha(self)
else:
m = re.search(self.SOLVEMEDIA_PATTERN, self.html)
if m:
captcha_key = m.group(1)
- captcha = SolveMedia(self)
+ captcha = SolveMedia(self)
else:
self.error(_("Captcha"))
diff --git a/module/plugins/hoster/RapiduNet.py b/module/plugins/hoster/RapiduNet.py
index 0c40d95b9..b6806e49b 100644
--- a/module/plugins/hoster/RapiduNet.py
+++ b/module/plugins/hoster/RapiduNet.py
@@ -13,7 +13,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class RapiduNet(SimpleHoster):
__name__ = "RapiduNet"
__type__ = "hoster"
- __version__ = "0.05"
+ __version__ = "0.06"
__pattern__ = r'https?://(?:www\.)?rapidu\.net/(?P<ID>\d{10})'
@@ -59,7 +59,7 @@ class RapiduNet(SimpleHoster):
recaptcha = ReCaptcha(self)
for _i in xrange(10):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
jsvars = self.getJsonResponse("https://rapidu.net/ajax.php",
get={'a': "getCheckCaptcha"},
diff --git a/module/plugins/hoster/ShareonlineBiz.py b/module/plugins/hoster/ShareonlineBiz.py
index 5918726f5..6f49711b8 100644
--- a/module/plugins/hoster/ShareonlineBiz.py
+++ b/module/plugins/hoster/ShareonlineBiz.py
@@ -14,7 +14,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class ShareonlineBiz(SimpleHoster):
__name__ = "ShareonlineBiz"
__type__ = "hoster"
- __version__ = "0.47"
+ __version__ = "0.48"
__pattern__ = r'https?://(?:www\.)?(share-online\.biz|egoshare\.com)/(download\.php\?id=|dl/)(?P<ID>\w+)'
@@ -69,7 +69,7 @@ class ShareonlineBiz(SimpleHoster):
recaptcha = ReCaptcha(self)
for _i in xrange(5):
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
m = re.search(r'var wait=(\d+);', self.html)
self.setWait(int(m.group(1)) if m else 30)
diff --git a/module/plugins/hoster/TurbobitNet.py b/module/plugins/hoster/TurbobitNet.py
index ccca76018..b2388e02d 100644
--- a/module/plugins/hoster/TurbobitNet.py
+++ b/module/plugins/hoster/TurbobitNet.py
@@ -17,7 +17,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo, t
class TurbobitNet(SimpleHoster):
__name__ = "TurbobitNet"
__type__ = "hoster"
- __version__ = "0.17"
+ __version__ = "0.18"
__pattern__ = r'http://(?:www\.)?turbobit\.net/(?:download/free/)?(?P<ID>\w+)'
@@ -76,7 +76,7 @@ class TurbobitNet(SimpleHoster):
if inputs['captcha_type'] == 'recaptcha':
recaptcha = ReCaptcha(self)
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge()
+ inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge()
else:
m = re.search(self.CAPTCHA_PATTERN, self.html)
if m is None:
diff --git a/module/plugins/hoster/UpleaCom.py b/module/plugins/hoster/UpleaCom.py
index 5c63c7e8b..f5e00662a 100644
--- a/module/plugins/hoster/UpleaCom.py
+++ b/module/plugins/hoster/UpleaCom.py
@@ -39,7 +39,7 @@ class UpleaCom(XFSHoster):
def handleFree(self, pyfile):
m = re.search(self.STEP_PATTERN, self.html)
if m is None:
- self.error("STEP_PATTERN not found")
+ self.error(_("STEP_PATTERN not found"))
self.html = self.load(urljoin("http://uplea.com/", m.group(1)))
diff --git a/module/plugins/hoster/UploadableCh.py b/module/plugins/hoster/UploadableCh.py
index e28944ab9..be4cb5b06 100644
--- a/module/plugins/hoster/UploadableCh.py
+++ b/module/plugins/hoster/UploadableCh.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UploadableCh(SimpleHoster):
__name__ = "UploadableCh"
__type__ = "hoster"
- __version__ = "0.06"
+ __version__ = "0.07"
__pattern__ = r'http://(?:www\.)?uploadable\.ch/file/(?P<ID>\w+)'
@@ -46,7 +46,7 @@ class UploadableCh(SimpleHoster):
recaptcha = ReCaptcha(self)
- challenge, response = recaptcha.challenge(self.RECAPTCHA_KEY)
+ response, challenge = recaptcha.challenge(self.RECAPTCHA_KEY)
# Submit the captcha solution
self.load("http://www.uploadable.ch/checkReCaptcha.php",
diff --git a/module/plugins/hoster/UpstoreNet.py b/module/plugins/hoster/UpstoreNet.py
index f287a2b51..db9fa53a1 100644
--- a/module/plugins/hoster/UpstoreNet.py
+++ b/module/plugins/hoster/UpstoreNet.py
@@ -9,7 +9,7 @@ from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class UpstoreNet(SimpleHoster):
__name__ = "UpstoreNet"
__type__ = "hoster"
- __version__ = "0.04"
+ __version__ = "0.05"
__pattern__ = r'https?://(?:www\.)?upstore\.net/'
@@ -52,7 +52,7 @@ class UpstoreNet(SimpleHoster):
self.wait(wait_time)
# then, handle the captcha
- challenge, response = recaptcha.challenge()
+ response, challenge = recaptcha.challenge()
post_data.update({'recaptcha_challenge_field': challenge,
'recaptcha_response_field' : response})
diff --git a/module/plugins/hoster/ZippyshareCom.py b/module/plugins/hoster/ZippyshareCom.py
index 39c8d36d6..f32c5877f 100644
--- a/module/plugins/hoster/ZippyshareCom.py
+++ b/module/plugins/hoster/ZippyshareCom.py
@@ -2,42 +2,51 @@
import re
-from urlparse import urljoin
-
+from module.plugins.internal.CaptchaService import ReCaptcha
from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo
class ZippyshareCom(SimpleHoster):
__name__ = "ZippyshareCom"
__type__ = "hoster"
- __version__ = "0.67"
+ __version__ = "0.68"
- __pattern__ = r'(?P<HOST>http://www\d{0,2}\.zippyshare\.com)/v(?:/|iew\.jsp.*key=)(?P<KEY>[\w^_]+)'
+ __pattern__ = r'http://www\d{0,2}\.zippyshare\.com/v(/|iew\.jsp.*key=)(?P<KEY>[\w^_]+)'
__description__ = """Zippyshare.com hoster plugin"""
__license__ = "GPLv3"
__authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- NAME_PATTERN = r'("\d{6,}/"[ ]*\+.+?"/|<title>Zippyshare.com - )(?P<N>.+?)("|</title>)'
- SIZE_PATTERN = r'>Size:.+?">(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
+ COOKIES = [("zippyshare.com", "ziplocale", "en")]
- OFFLINE_PATTERN = r'>File does not exist on this server<'
+ NAME_PATTERN = r'("\d{6,}/"[ ]*\+.+?"/|<title>Zippyshare.com - )(?P<N>.+?)("|</title>)'
+ SIZE_PATTERN = r'>Size:.+?">(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
+ OFFLINE_PATTERN = r'>File does not exist on this server'
- COOKIES = [("zippyshare.com", "ziplocale", "en")]
+ LINK_PREMIUM_PATTERN = r'document.location = \'(.+?)\''
def setup(self):
- self.multiDL = True
self.chunkLimit = -1
+ self.multiDL = True
self.resumeDownload = True
def handleFree(self, pyfile):
- checksum = self.get_checksum()
- p_url = '/'.join(("d", self.info['pattern']['KEY'], str(checksum), self.pyfile.name))
+ recaptcha = ReCaptcha(self)
+ captcha_key = recaptcha.detect_key()
+
+ if captcha_key:
+ try:
+ self.link = re.search(self.LINK_PREMIUM_PATTERN, self.html)
+ recaptcha.challenge()
- self.link = urljoin(self.info['pattern']['HOST'], p_url)
+ except Exception, e:
+ self.error(e)
+
+ else:
+ self.link = '/'.join(("d", self.info['pattern']['KEY'], str(self.get_checksum()), self.pyfile.name))
def get_checksum(self):
@@ -51,8 +60,8 @@ class ZippyshareCom(SimpleHoster):
c1, c2 = map(int, re.search(r'\(\'downloadB\'\).omg\) \* \((\d+)%(\d+)', self.html).groups())
b = (a1 % a2) * (c1 % c2) + 18
- except Exception, e:
- self.error(_("Unable to calculate checksum"), e)
+ except Exception:
+ self.error(_("Unable to calculate checksum"))
else:
return b
diff --git a/module/plugins/internal/CaptchaService.py b/module/plugins/internal/CaptchaService.py
index 1cd261698..db31bd1bd 100644
--- a/module/plugins/internal/CaptchaService.py
+++ b/module/plugins/internal/CaptchaService.py
@@ -2,16 +2,17 @@
import re
import time
-import base64
-from random import random,randint
+from base64 import b64encode
+from random import random, randint
+from urlparse import urljoin, urlparse
from module.common.json_layer import json_loads
class CaptchaService:
__name__ = "CaptchaService"
- __version__ = "0.17"
+ __version__ = "0.18"
__description__ = """Base captcha service plugin"""
__license__ = "GPLv3"
@@ -46,7 +47,7 @@ class CaptchaService:
return None
- def challenge(self, key=None):
+ def challenge(self, key=None, html=None):
raise NotImplementedError
@@ -56,14 +57,15 @@ class CaptchaService:
class ReCaptcha(CaptchaService):
__name__ = "ReCaptcha"
- __version__ = "0.08"
+ __version__ = "0.09"
__description__ = """ReCaptcha captcha service plugin"""
__license__ = "GPLv3"
- __authors__ = [("pyLoad Team", "admin@pyload.org")]
+ __authors__ = [("pyLoad Team", "admin@pyload.org"),
+ ("zapp-brannigan", "fuerst.reinje@web.de")]
- KEY_PATTERN = r'recaptcha(?:/api|\.net)/(?:challenge|noscript)\?k=([\w-]+)'
+ KEY_PATTERN = r'(?:data-sitekey=["\']|["\']sitekey["\']:\s*["\']|recaptcha(?:/api|\.net)/(?:challenge|noscript)\?k=)([\w-]+)'
KEY_AJAX_PATTERN = r'Recaptcha\.create\s*\(\s*["\']([\w-]+)'
@@ -86,9 +88,23 @@ class ReCaptcha(CaptchaService):
return None
- def challenge(self, key=None):
+ def challenge(self, key=None, html=None):
+ if not html:
+ if hasattr(self.plugin, "html") and self.plugin.html:
+ html = self.plugin.html
+ else:
+ errmsg = _("ReCaptcha html not found")
+ self.plugin.fail(errmsg)
+ raise TypeError(errmsg)
+
+ challenge = "challenge_%s" % 'new' if re.search(r'sitekey', html) else 'old'
+
+ return getattr(self, challenge)(key, html)
+
+
+ def challenge_old(self, key=None, html=None):
if not key:
- if self.detect_key():
+ if self.detect_key(html):
key = self.key
else:
errmsg = _("ReCaptcha key not found")
@@ -99,14 +115,15 @@ class ReCaptcha(CaptchaService):
try:
challenge = re.search("challenge : '(.+?)',", html).group(1)
server = re.search("server : '(.+?)',", html).group(1)
- except:
+
+ except AttributeError:
errmsg = _("ReCaptcha challenge pattern not found")
self.plugin.fail(errmsg)
- raise ValueError(errmsg)
+ raise AttributeError(errmsg)
self.plugin.logDebug("ReCaptcha challenge: %s" % challenge)
- return challenge, self.result(server, challenge)
+ return self.result(server, challenge), challenge
def result(self, server, challenge):
@@ -121,126 +138,122 @@ class ReCaptcha(CaptchaService):
return result
-class ReCaptchaV2(CaptchaService):
- __name__ = "ReCaptchaV2"
- __version__ = "0.01"
+ def _collectApiInfo(self):
+ html = self.plugin.req.load("http://www.google.com/recaptcha/api.js")
+ a = re.search(r'po.src = \'(.*?)\';', html).group(1)
+ vers = a.split("/")[5]
- __description__ = """ReCaptchaV2 captcha service plugin"""
- __license__ = "GPLv3"
- __authors__ = [("pyLoad Team", "admin@pyload.org")]
+ self.plugin.logDebug("ReCaptcha API version: %s" %vers)
+ language = a.split("__")[1].split(".")[0]
- KEY_PATTERN = r'data-sitekey="(.*?)">'
+ self.plugin.logDebug("ReCaptcha API language: %s" % language)
+ html = self.plugin.req.load("https://apis.google.com/js/api.js")
+ b = re.search(r'"h":"(.*?)","', html).group(1)
+ jsh = b.decode('unicode-escape')
- def detect_key(self, html=None):
- if not html:
- if hasattr(self.plugin, "html") and self.plugin.html:
- html = self.plugin.html
- else:
- errmsg = _("ReCaptcha html not found")
- self.plugin.fail(errmsg)
- raise TypeError(errmsg)
+ self.plugin.logDebug("ReCaptcha API jsh-string: %s" % jsh)
- m = re.search(self.KEY_PATTERN, html)
- if m:
- self.key = m.group(1).strip()
- self.plugin.logDebug("ReCaptcha key: %s" % self.key)
- return self.key
- else:
- self.plugin.logDebug("ReCaptcha key not found")
- return None
+ return vers, language, jsh
- def collectApiInfo(self):
- html = self.plugin.req.load("http://www.google.com/recaptcha/api.js",cookies=True)
- a = re.search("po.src = '(.*?)';",html).group(1)
- vers = a.split("/")[5]
- self.plugin.logDebug("API version: %s" %vers)
- language = a.split("__")[1].split(".")[0]
- self.plugin.logDebug("API language: %s" %language)
+ def _prepareTimeAndRpc(self):
+ self.plugin.req.load("http://www.google.com/recaptcha/api2/demo")
- html = self.plugin.req.load("https://apis.google.com/js/api.js",cookies=True)
- b = re.search('"h":"(.*?)","',html).group(1)
- jsh = b.decode('unicode-escape')
- self.plugin.logDebug("API jsh-string: %s" %jsh)
+ millis = int(round(time.time() * 1000))
- return vers,language,jsh
+ self.plugin.logDebug("ReCaptcha time: %s" % millis)
- def prepareTimeAndRpc(self):
- html = self.plugin.req.load("http://www.google.com/recaptcha/api2/demo",cookies=True)
+ rand = randint(1, 99999999)
+ a = "0.%s" % str(rand * 2147483647)
+ rpc = int(100000000 * float(a))
- millis = int(round(time.time() * 1000))
- self.plugin.logDebug("Systemtime in milliseconds: %s" %str(millis))
+ self.plugin.logDebug("ReCaptcha rpc-token: %s" % rpc)
- rand = randint(1,99999999)
- a = "0.%s"%str(rand*2147483647)
- rpc = int(100000000*float(a))
- self.plugin.logDebug("Self-generated rpc-token: %s" %str(rpc))
+ return millis, rpc
- return millis,rpc
- def doTheCaptcha(self, host):
- self.plugin.logDebug("Parent host: %s" %host)
- botguardstring = "!A"
- sitekey = self.detect_key()
- vers,language,jsh = self.collectApiInfo()
- millis,rpc = self.prepareTimeAndRpc()
+ def challenge_new(self, key=None, html=None):
+ if not key:
+ if self.detect_key(html):
+ key = self.key
+ else:
+ errmsg = _("ReCaptcha key not found")
+ self.plugin.fail(errmsg)
+ raise TypeError(errmsg)
+
+ try:
+ parent = urljoin("http://", urlparse(self.plugin.pyfile.url).netloc)
+
+ except Exception:
+ parent = ""
+
+ botguardstring = "!A"
+ vers, language, jsh = self._collectApiInfo()
+ millis, rpc = self._prepareTimeAndRpc()
html = self.plugin.req.load("https://www.google.com/recaptcha/api2/anchor",
- get={"k":sitekey,
- "hl":language,
- "v":vers,
- "usegapi":"1",
- "jsh":jsh+"#id=IO_"+str(millis),
- "parent":"http://"+host,
- "pfname":"",
- "rpctoken":rpc},
- cookies=True)
- recaptchatoken = re.search('id="recaptcha-token" value="(.*?)">',html)
- self.plugin.logDebug("Captchatoken #1: %s" %recaptchatoken.group(1))
-
- html = self.plugin.req.load("https://www.google.com/recaptcha/api2/frame", get={"c":recaptchatoken.group(1),
- "hl":language,
- "v":vers,
- "bg":botguardstring,
- "usegapi":"1",
- "jsh":jsh},
- cookies=True)
- html = html.decode('unicode-escape')
- recaptchatoken2 = re.search('"finput","(.*?)",',html)
- self.plugin.logDebug("Captchatoken #2: %s" %recaptchatoken2.group(1))
- recaptchatoken3 = re.search('."asconf".\s.\s,"(.*?)".',html)
- self.plugin.logDebug("Captchatoken #3: %s" %recaptchatoken3.group(1))
-
- html = self.plugin.req.load("https://www.google.com/recaptcha/api2/reload", post={"c":recaptchatoken2.group(1),
- "reason":"fi",
- "fbg":recaptchatoken3.group(1)},
- cookies=True)
- recaptchatoken4 = re.search('"rresp","(.*?)",',html)
- self.plugin.logDebug("Captchatoken #4: %s" %recaptchatoken4.group(1))
+ get={'k' : key,
+ 'hl' : language,
+ 'v' : vers,
+ 'usegapi' : "1",
+ 'jsh' : "%s#id=IO_%s" % (jsh, millis),
+ 'parent' : parent,
+ 'pfname' : "",
+ 'rpctoken': rpc})
+
+ token1 = re.search(r'id="recaptcha-token" value="(.*?)">', html)
+ self.plugin.logDebug("ReCaptcha token #1: %s" % token1.group(1))
+
+ html = self.plugin.req.load("https://www.google.com/recaptcha/api2/frame",
+ get={'c' : token1.group(1),
+ 'hl' : language,
+ 'v' : vers,
+ 'bg' : botguardstring,
+ 'usegapi': "1",
+ 'jsh' : jsh}).decode('unicode-escape')
+
+ token2 = re.search(r'"finput","(.*?)",', html)
+ self.plugin.logDebug("ReCaptcha token #2: %s" % token2.group(1))
+
+ token3 = re.search(r'."asconf".\s.\s,"(.*?)".', html)
+ self.plugin.logDebug("ReCaptcha token #3: %s" % token3.group(1))
+
+ html = self.plugin.req.load("https://www.google.com/recaptcha/api2/reload",
+ post={'c' : token2.group(1),
+ 'reason': "fi",
+ 'fbg' : token3.group(1)})
+
+ token4 = re.search(r'"rresp","(.*?)",', html)
+ self.plugin.logDebug("ReCaptcha token #4: %s" % token4.group(1))
millis_captcha_loading = int(round(time.time() * 1000))
- captcha_response = self.plugin.decryptCaptcha("https://www.google.com/recaptcha/api2/payload", get={"c":recaptchatoken4.group(1)},forceUser=True)
- respone_encoded = base64.b64encode('{"response":"%s"}' %captcha_response)
- self.plugin.logDebug("Encoded result: %s" %respone_encoded)
+ captcha_response = self.plugin.decryptCaptcha("https://www.google.com/recaptcha/api2/payload",
+ get={'c':token4.group(1)}, forceUser=True)
+ response = b64encode('{"response":"%s"}' % captcha_response)
+
+ self.plugin.logDebug("ReCaptcha result: %s" % response)
- timeToSolve = int(round(time.time() * 1000)) - millis_captcha_loading
- timeToSolveMore = timeToSolve + int(float("0."+str(randint(1,99999999))) * 500)
- html = self.plugin.req.load("https://www.google.com/recaptcha/api2/userverify", cookies=True, post={"c":recaptchatoken4.group(1),
- "response":respone_encoded,
- "t":timeToSolve,
- "ct":timeToSolveMore,
- "bg":botguardstring})
- recaptchatoken5 = re.search('"uvresp","(.*?)",',html)
- self.plugin.logDebug("Captchatoken #5: %s" %recaptchatoken5.group(1))
+ timeToSolve = int(round(time.time() * 1000)) - millis_captcha_loading
+ timeToSolveMore = timeToSolve + int(float("0." + str(randint(1, 99999999))) * 500)
- return recaptchatoken5.group(1)
+ html = self.plugin.req.load("https://www.google.com/recaptcha/api2/userverify",
+ post={'c' : token4.group(1),
+ 'response': response,
+ 't' : timeToSolve,
+ 'ct' : timeToSolveMore,
+ 'bg' : botguardstring})
+
+ token5 = re.search(r'"uvresp","(.*?)",', html)
+ self.plugin.logDebug("ReCaptcha token #5: %s" % token5.group(1))
+
+ return token5.group(1), None
class AdsCaptcha(CaptchaService):
__name__ = "AdsCaptcha"
- __version__ = "0.06"
+ __version__ = "0.07"
__description__ = """AdsCaptcha captcha service plugin"""
__license__ = "GPLv3"
@@ -271,9 +284,9 @@ class AdsCaptcha(CaptchaService):
return None
- def challenge(self, key=None):
+ def challenge(self, key=None, html=None):
if not key:
- if self.detect_key():
+ if self.detect_key(html):
key = self.key
else:
errmsg = _("AdsCaptcha key not found")
@@ -286,14 +299,15 @@ class AdsCaptcha(CaptchaService):
try:
challenge = re.search("challenge: '(.+?)',", html).group(1)
server = re.search("server: '(.+?)',", html).group(1)
- except:
+
+ except AttributeError:
errmsg = _("AdsCaptcha challenge pattern not found")
self.plugin.fail(errmsg)
- raise ValueError(errmsg)
+ raise AttributeError(errmsg)
self.plugin.logDebug("AdsCaptcha challenge: %s" % challenge)
- return challenge, self.result(server, challenge)
+ return self.result(server, challenge), challenge
def result(self, server, challenge):
@@ -309,7 +323,7 @@ class AdsCaptcha(CaptchaService):
class SolveMedia(CaptchaService):
__name__ = "SolveMedia"
- __version__ = "0.06"
+ __version__ = "0.07"
__description__ = """SolveMedia captcha service plugin"""
__license__ = "GPLv3"
@@ -319,9 +333,9 @@ class SolveMedia(CaptchaService):
KEY_PATTERN = r'api\.solvemedia\.com/papi/challenge\.(?:no)?script\?k=(.+?)["\']'
- def challenge(self, key=None):
+ def challenge(self, key=None, html=None):
if not key:
- if self.detect_key():
+ if self.detect_key(html):
key = self.key
else:
errmsg = _("SolveMedia key not found")
@@ -333,14 +347,15 @@ class SolveMedia(CaptchaService):
challenge = re.search(r'<input type=hidden name="adcopy_challenge" id="adcopy_challenge" value="([^"]+)">',
html).group(1)
server = "http://api.solvemedia.com/papi/media"
- except:
+
+ except AttributeError:
errmsg = _("SolveMedia challenge pattern not found")
self.plugin.fail(errmsg)
- raise ValueError(errmsg)
+ raise AttributeError(errmsg)
self.plugin.logDebug("SolveMedia challenge: %s" % challenge)
- return challenge, self.result(server, challenge)
+ return self.result(server, challenge), challenge
def result(self, server, challenge):
@@ -353,7 +368,7 @@ class SolveMedia(CaptchaService):
class AdYouLike(CaptchaService):
__name__ = "AdYouLike"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """AdYouLike captcha service plugin"""
__license__ = "GPLv3"
@@ -384,9 +399,9 @@ class AdYouLike(CaptchaService):
return None
- def challenge(self, key=None):
+ def challenge(self, key=None, html=None):
if not key:
- if self.detect_key():
+ if self.detect_key(html):
key = self.key
else:
errmsg = _("AdYouLike key not found")
@@ -405,10 +420,11 @@ class AdYouLike(CaptchaService):
'callback': callback})
try:
challenge = json_loads(re.search(callback + r'\s*\((.+?)\)', html).group(1))
- except:
+
+ except AttributeError:
errmsg = _("AdYouLike challenge pattern not found")
self.plugin.fail(errmsg)
- raise ValueError(errmsg)
+ raise AttributeError(errmsg)
self.plugin.logDebug("AdYouLike challenge: %s" % challenge)
@@ -435,10 +451,11 @@ class AdYouLike(CaptchaService):
try:
instructions_visual = challenge['translations'][server['all']['lang']]['instructions_visual']
result = re.search(u'«(.+?)»', instructions_visual).group(1).strip()
- except:
+
+ except AttributeError:
errmsg = _("AdYouLike result not found")
self.plugin.fail(errmsg)
- raise ValueError(errmsg)
+ raise AttributeError(errmsg)
result = {'_ayl_captcha_engine' : "adyoulike",
'_ayl_env' : server['all']['env'],
diff --git a/module/plugins/internal/SimpleCrypter.py b/module/plugins/internal/SimpleCrypter.py
index 80504bf67..9df262deb 100644
--- a/module/plugins/internal/SimpleCrypter.py
+++ b/module/plugins/internal/SimpleCrypter.py
@@ -118,7 +118,7 @@ class SimpleCrypter(Crypter, SimpleHoster):
self.packages = [(self.info['name'], self.links, self.info['folder'])]
elif not self.urls and not self.packages: #@TODO: Remove in 0.4.10
- self.fail("No link grabbed")
+ self.fail(_("No link grabbed"))
def checkNameSize(self, getinfo=True):
diff --git a/module/plugins/internal/SimpleDereferer.py b/module/plugins/internal/SimpleDereferer.py
index deef42620..72d61d4a0 100644
--- a/module/plugins/internal/SimpleDereferer.py
+++ b/module/plugins/internal/SimpleDereferer.py
@@ -11,7 +11,7 @@ from module.plugins.internal.SimpleHoster import fileUrl, set_cookies
class SimpleDereferer(Crypter):
__name__ = "SimpleDereferer"
__type__ = "crypter"
- __version__ = "0.04"
+ __version__ = "0.05"
__pattern__ = r'^unmatchable$'
__config__ = [("use_subfolder", "bool", "Save package to subfolder", True),
@@ -66,7 +66,7 @@ class SimpleDereferer(Crypter):
self.urls = [link.strip()] #@TODO: Remove `.strip()` in 0.4.10
elif not self.urls and not self.packages: #@TODO: Remove in 0.4.10
- self.fail("No link grabbed")
+ self.fail(_("No link grabbed"))
def prepare(self):
@@ -77,6 +77,7 @@ class SimpleDereferer(Crypter):
def preload(self):
+ self.req.renewHTTPRequest() #@NOTE: Remove in 0.4.10
self.html = self.load(self.pyfile.url, cookies=bool(self.COOKIES), decode=not self.TEXT_ENCODING)
if isinstance(self.TEXT_ENCODING, basestring):
diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py
index 819572a7e..13a26c732 100644
--- a/module/plugins/internal/SimpleHoster.py
+++ b/module/plugins/internal/SimpleHoster.py
@@ -246,7 +246,7 @@ def secondsToMidnight(gmt=0):
class SimpleHoster(Hoster):
__name__ = "SimpleHoster"
__type__ = "hoster"
- __version__ = "1.06"
+ __version__ = "1.07"
__pattern__ = r'^unmatchable$'
@@ -453,6 +453,7 @@ class SimpleHoster(Hoster):
def preload(self):
+ self.req.renewHTTPRequest() #@NOTE: Remove in 0.4.10
self.html = self.load(self.pyfile.url, cookies=bool(self.COOKIES), decode=not self.TEXT_ENCODING)
if isinstance(self.TEXT_ENCODING, basestring):
diff --git a/module/plugins/internal/XFSHoster.py b/module/plugins/internal/XFSHoster.py
index 75d4df275..1dd3075d8 100644
--- a/module/plugins/internal/XFSHoster.py
+++ b/module/plugins/internal/XFSHoster.py
@@ -15,7 +15,7 @@ from module.utils import html_unescape
class XFSHoster(SimpleHoster):
__name__ = "XFSHoster"
__type__ = "hoster"
- __version__ = "0.37"
+ __version__ = "0.38"
__pattern__ = r'^unmatchable$'
@@ -327,7 +327,7 @@ class XFSHoster(SimpleHoster):
self.logDebug("ReCaptcha key: %s" % captcha_key)
if captcha_key:
- inputs['recaptcha_challenge_field'], inputs['recaptcha_response_field'] = recaptcha.challenge(captcha_key)
+ inputs['recaptcha_response_field'], inputs['recaptcha_challenge_field'] = recaptcha.challenge(captcha_key)
return 3
solvemedia = SolveMedia(self)
@@ -339,7 +339,7 @@ class XFSHoster(SimpleHoster):
self.logDebug("SolveMedia key: %s" % captcha_key)
if captcha_key:
- inputs['adcopy_challenge'], inputs['adcopy_response'] = solvemedia.challenge(captcha_key)
+ inputs['adcopy_response'], inputs['adcopy_challenge'] = solvemedia.challenge(captcha_key)
return 4
return 0