summaryrefslogtreecommitdiffstats
path: root/pyload/plugins/crypter/ShareLinksBiz.py
diff options
context:
space:
mode:
authorGravatar Walter Purcaro <vuolter@gmail.com> 2014-11-13 23:47:36 +0100
committerGravatar Walter Purcaro <vuolter@gmail.com> 2014-11-13 23:47:36 +0100
commitbdfa8104065831bf0eb2f6a022552e8de725ed47 (patch)
tree4a43864e1bb257c7737a765d62899244b825a859 /pyload/plugins/crypter/ShareLinksBiz.py
parent[themes] Tiny code cosmetics (diff)
parent[Plugin] Some fixes by rlindner81 (diff)
downloadpyload-bdfa8104065831bf0eb2f6a022552e8de725ed47.tar.xz
Merge branch 'stable' into 0.4.10
Conflicts: module/plugins/accounts/MegaRapidCz.py module/plugins/accounts/ShareRapidCom.py module/plugins/crypter/HotfileComFolder.py module/plugins/crypter/HotfileFolderCom.py module/plugins/hoster/Keep2shareCC.py module/plugins/hoster/Keep2shareCc.py module/plugins/hoster/MegaCoNz.py module/plugins/hoster/MegaNz.py module/plugins/hoster/MegaRapidCz.py module/plugins/hoster/ShareRapidCom.py module/plugins/internal/CaptchaService.py pyload/api/__init__.py pyload/manager/AccountManager.py pyload/manager/PluginManager.py pyload/manager/thread/PluginThread.py pyload/network/HTTPRequest.py pyload/network/XDCCRequest.py pyload/plugins/Plugin.py pyload/plugins/account/BillionuploadsCom.py pyload/plugins/account/CramitIn.py pyload/plugins/account/EasybytezCom.py pyload/plugins/account/FastshareCz.py pyload/plugins/account/File4safeCom.py pyload/plugins/account/FileParadoxIn.py pyload/plugins/account/FileomCom.py pyload/plugins/account/FilerNet.py pyload/plugins/account/FilerioCom.py pyload/plugins/account/FourSharedCom.py pyload/plugins/account/Ftp.py pyload/plugins/account/Http.py pyload/plugins/account/HugefilesNet.py pyload/plugins/account/HundredEightyUploadCom.py pyload/plugins/account/LomafileCom.py pyload/plugins/account/MovReelCom.py pyload/plugins/account/MultishareCz.py pyload/plugins/account/MyfastfileCom.py pyload/plugins/account/NosuploadCom.py pyload/plugins/account/NovafileCom.py pyload/plugins/account/QuickshareCz.py pyload/plugins/account/RarefileNet.py pyload/plugins/account/RyushareCom.py pyload/plugins/account/SecureUploadEu.py pyload/plugins/account/SendmywayCom.py pyload/plugins/account/ShareRapidCom.py pyload/plugins/account/StahnuTo.py pyload/plugins/account/StreamcloudEu.py pyload/plugins/account/TusfilesNet.py pyload/plugins/account/UploadingCom.py pyload/plugins/account/UptoboxCom.py pyload/plugins/account/VidPlayNet.py pyload/plugins/addon/Checksum.py pyload/plugins/addon/ClickAndLoad.py pyload/plugins/addon/DeleteFinished.py pyload/plugins/addon/DownloadScheduler.py pyload/plugins/addon/ExternalScripts.py pyload/plugins/addon/ExtractArchive.py pyload/plugins/addon/HotFolder.py pyload/plugins/addon/IRCInterface.py pyload/plugins/addon/MergeFiles.py pyload/plugins/addon/MultiHome.py pyload/plugins/addon/RestartFailed.py pyload/plugins/addon/UnSkipOnFail.py pyload/plugins/addon/WindowsPhoneToastNotify.py pyload/plugins/addon/XMPPInterface.py pyload/plugins/base/Container.py pyload/plugins/base/Crypter.py pyload/plugins/base/Hook.py pyload/plugins/base/OCR.py pyload/plugins/container/RSDF.py pyload/plugins/crypter/DuploadOrgFolder.py pyload/plugins/crypter/EasybytezComFolder.py pyload/plugins/crypter/FiredriveComFolder.py pyload/plugins/crypter/HotfileFolderCom.py pyload/plugins/crypter/LinkSaveIn.py pyload/plugins/crypter/MultiuploadCom.py pyload/plugins/crypter/ShareRapidComFolder.py pyload/plugins/crypter/TusfilesNetFolder.py pyload/plugins/crypter/UploadableChFolder.py pyload/plugins/crypter/UploadedToFolder.py pyload/plugins/hook/Captcha9kw.py pyload/plugins/hook/MyfastfileCom.py pyload/plugins/hoster/BillionuploadsCom.py pyload/plugins/hoster/CramitIn.py pyload/plugins/hoster/EasybytezCom.py pyload/plugins/hoster/File4safeCom.py pyload/plugins/hoster/FileParadoxIn.py pyload/plugins/hoster/FilefactoryCom.py pyload/plugins/hoster/FileomCom.py pyload/plugins/hoster/FilerioCom.py pyload/plugins/hoster/FileshareInUa.py pyload/plugins/hoster/FiredriveCom.py pyload/plugins/hoster/Ftp.py pyload/plugins/hoster/HugefilesNet.py pyload/plugins/hoster/HundredEightyUploadCom.py pyload/plugins/hoster/Keep2shareCC.py pyload/plugins/hoster/LoadTo.py pyload/plugins/hoster/LomafileCom.py pyload/plugins/hoster/MegaNz.py pyload/plugins/hoster/MegacrypterCom.py pyload/plugins/hoster/MovReelCom.py pyload/plugins/hoster/MyvideoDe.py pyload/plugins/hoster/NosuploadCom.py pyload/plugins/hoster/NovafileCom.py pyload/plugins/hoster/PandaPlaNet.py pyload/plugins/hoster/PremiumTo.py pyload/plugins/hoster/RarefileNet.py pyload/plugins/hoster/RyushareCom.py pyload/plugins/hoster/SecureUploadEu.py pyload/plugins/hoster/SendmywayCom.py pyload/plugins/hoster/ShareRapidCom.py pyload/plugins/hoster/SockshareCom.py pyload/plugins/hoster/StreamcloudEu.py pyload/plugins/hoster/TurbobitNet.py pyload/plugins/hoster/TusfilesNet.py pyload/plugins/hoster/UptoboxCom.py pyload/plugins/hoster/VidPlayNet.py pyload/plugins/hoster/WebshareCz.py pyload/plugins/internal/DeadCrypter.py pyload/plugins/internal/DeadHoster.py pyload/plugins/internal/MultiHoster.py pyload/plugins/internal/SimpleCrypter.py pyload/plugins/internal/SimpleHoster.py pyload/plugins/internal/UpdateManager.py pyload/plugins/internal/XFSPAccount.py pyload/plugins/internal/XFSPHoster.py pyload/utils/__init__.py pyload/utils/packagetools.py pyload/webui/app/cnl.py
Diffstat (limited to 'pyload/plugins/crypter/ShareLinksBiz.py')
-rw-r--r--pyload/plugins/crypter/ShareLinksBiz.py76
1 files changed, 47 insertions, 29 deletions
diff --git a/pyload/plugins/crypter/ShareLinksBiz.py b/pyload/plugins/crypter/ShareLinksBiz.py
index 796643e8d..0c646eda8 100644
--- a/pyload/plugins/crypter/ShareLinksBiz.py
+++ b/pyload/plugins/crypter/ShareLinksBiz.py
@@ -9,23 +9,26 @@ from pyload.plugins.base.Crypter import Crypter
class ShareLinksBiz(Crypter):
- __name__ = "ShareLinksBiz"
- __type__ = "crypter"
- __version__ = "1.13"
+ __name__ = "ShareLinksBiz"
+ __type__ = "crypter"
+ __version__ = "1.14"
__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)]
__description__ = """Share-Links.biz decrypter plugin"""
- __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
+ __license__ = "GPLv3"
+ __authors__ = [("fragonib", "fragonib[AT]yahoo[DOT]es")]
def setup(self):
self.baseUrl = None
self.fileId = None
self.package = None
- self.html = None
self.captcha = False
+
def decrypt(self, pyfile):
# Init
self.initFile(pyfile)
@@ -60,6 +63,7 @@ class ShareLinksBiz(Crypter):
# Pack
self.packages = [(package_name, package_links, package_folder)]
+
def initFile(self, pyfile):
url = pyfile.url
if 's2l.biz' in url:
@@ -68,29 +72,34 @@ class ShareLinksBiz(Crypter):
self.fileId = re.match(self.__pattern__, url).group('ID')
self.package = pyfile.package()
+
def isOnline(self):
if "No usable content was found" in self.html:
self.logDebug("File not found")
return False
return True
+
def isPasswordProtected(self):
if re.search(r'''<form.*?id="passwordForm".*?>''', self.html):
self.logDebug("Links are protected")
return True
return False
+
def isCaptchaProtected(self):
if '<map id="captchamap"' in self.html:
self.logDebug("Links are captcha protected")
return True
return False
+
def unblockServer(self):
imgs = re.findall(r"(/template/images/.*?\.gif)", self.html)
for img in imgs:
self.load(self.baseUrl + img)
+
def unlockPasswordProtection(self):
password = self.getPassword()
self.logDebug("Submitting password [%s] for protected links" % password)
@@ -98,6 +107,7 @@ class ShareLinksBiz(Crypter):
url = self.baseUrl + '/' + self.fileId
self.html = self.load(url, post=post, decode=True)
+
def unlockCaptchaProtection(self):
# Get captcha map
captchaMap = self._getCaptchaMap()
@@ -108,19 +118,17 @@ class ShareLinksBiz(Crypter):
captchaUrl = self.baseUrl + '/captcha.gif?d=%s&PHPSESSID=%s' % (m.group(1), m.group(2))
self.logDebug("Waiting user for correct position")
coords = self.decryptCaptcha(captchaUrl, forceUser=True, imgtype="gif", result_type='positional')
- self.logDebug("Captcha resolved, coords [%s]" % coords)
+ self.logDebug("Captcha resolved, coords [%s]" % str(coords))
# Resolve captcha
href = self._resolveCoords(coords, captchaMap)
if href is None:
- self.logDebug("Invalid captcha resolving, retrying")
self.invalidCaptcha()
- self.setWait(5, False)
- self.wait()
- self.retry()
+ self.retry(wait_time=5)
url = self.baseUrl + href
self.html = self.load(url, decode=True)
+
def _getCaptchaMap(self):
mapp = {}
for m in re.finditer(r'<area shape="rect" coords="(.*?)" href="(.*?)"', self.html):
@@ -129,34 +137,34 @@ class ShareLinksBiz(Crypter):
mapp[rect] = href
return mapp
+
def _resolveCoords(self, coords, captchaMap):
x, y = coords
- for rect, href in captchaMap.items():
+ for rect, href in captchaMap.iteritems():
x1, y1, x2, y2 = rect
if (x >= x1 and x <= x2) and (y >= y1 and y <= y2):
return href
+
def handleErrors(self):
if "The inserted password was wrong" in self.html:
self.logDebug("Incorrect password, please set right password on 'Edit package' form and retry")
- self.fail("Incorrect password, please set right password on 'Edit package' form and retry")
+ self.fail(_("Incorrect password, please set right password on 'Edit package' form and retry"))
if self.captcha:
if "Your choice was wrong" in self.html:
- self.logDebug("Invalid captcha, retrying")
self.invalidCaptcha()
- self.setWait(5)
- self.wait()
- self.retry()
+ self.retry(wait_time=5)
else:
self.correctCaptcha()
+
def getPackageInfo(self):
name = folder = None
# Extract from web package header
title_re = r'<h2><img.*?/>(.*)</h2>'
- m = re.search(title_re, self.html, re.DOTALL)
+ m = re.search(title_re, self.html, re.S)
if m is not None:
title = m.group(1).strip()
if 'unnamed' not in title:
@@ -172,38 +180,45 @@ class ShareLinksBiz(Crypter):
# Return package info
return name, folder
+
def handleWebLinks(self):
package_links = []
self.logDebug("Handling Web links")
#@TODO: Gather paginated web links
- pattern = r"javascript:_get\('(.*?)', \d+, ''\)"
+ pattern = r'javascript:_get\(\'(.*?)\', \d+, \'\'\)'
ids = re.findall(pattern, self.html)
self.logDebug("Decrypting %d Web links" % len(ids))
for i, ID in enumerate(ids):
try:
self.logDebug("Decrypting Web link %d, [%s]" % (i + 1, ID))
+
dwLink = self.baseUrl + "/get/lnk/" + ID
- response = self.load(dwLink)
- code = re.search(r'frm/(\d+)', response).group(1)
+ res = self.load(dwLink)
+
+ code = re.search(r'frm/(\d+)', res).group(1)
fwLink = self.baseUrl + "/get/frm/" + code
- response = self.load(fwLink)
- jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', response,
- re.DOTALL).group(1)
+ res = self.load(fwLink)
+
+ jscode = re.search(r'<script language="javascript">\s*eval\((.*)\)\s*</script>', res, re.S).group(1)
jscode = self.js.eval("f = %s" % jscode)
jslauncher = "window=''; parent={frames:{Main:{location:{href:''}}},location:''}; %s; parent.frames.Main.location.href"
+
dlLink = self.js.eval(jslauncher % jscode)
+
self.logDebug("JsEngine returns value [%s] for redirection link" % dlLink)
+
package_links.append(dlLink)
except Exception, detail:
self.logDebug("Error decrypting Web link [%s], %s" % (ID, detail))
return package_links
+
def handleContainers(self):
package_links = []
self.logDebug("Handling Container links")
- pattern = r"javascript:_get\('(.*?)', 0, '(rsdf|ccf|dlc)'\)"
+ pattern = r'javascript:_get\(\'(.*?)\', 0, \'(rsdf|ccf|dlc)\'\)'
containersLinks = re.findall(pattern, self.html)
self.logDebug("Decrypting %d Container links" % len(containersLinks))
for containerLink in containersLinks:
@@ -211,6 +226,7 @@ class ShareLinksBiz(Crypter):
package_links.append(link)
return package_links
+
def handleCNL2(self):
package_links = []
self.logDebug("Handling CNL2 links")
@@ -220,15 +236,16 @@ class ShareLinksBiz(Crypter):
(crypted, jk) = self._getCipherParams()
package_links.extend(self._getLinks(crypted, jk))
except:
- self.fail("Unable to decrypt CNL2 links")
+ self.fail(_("Unable to decrypt CNL2 links"))
return package_links
+
def _getCipherParams(self):
# Request CNL2
- code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
- url = "%s/get/cnl2/%s" % (self.baseUrl, code)
- response = self.load(url)
- params = response.split(";;")
+ code = re.search(r'ClicknLoad.swf\?code=(.*?)"', self.html).group(1)
+ url = "%s/get/cnl2/%s" % (self.baseUrl, code)
+ res = self.load(url)
+ params = res.split(";;")
# Get jk
strlist = list(base64.standard_b64decode(params[1]))
@@ -243,6 +260,7 @@ class ShareLinksBiz(Crypter):
# Log and return
return crypted, jk
+
def _getLinks(self, crypted, jk):
# Get key
jreturn = self.js.eval("%s f()" % jk)