summaryrefslogtreecommitdiffstats
path: root/module/plugins/accounts
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/accounts')
-rw-r--r--module/plugins/accounts/AlldebridCom.py37
-rw-r--r--module/plugins/accounts/BackinNet.py16
-rw-r--r--module/plugins/accounts/BayfilesCom.py37
-rw-r--r--module/plugins/accounts/BitshareCom.py15
-rw-r--r--module/plugins/accounts/CatShareNet.py34
-rw-r--r--module/plugins/accounts/CloudzillaTo.py37
-rw-r--r--module/plugins/accounts/CzshareCom.py36
-rw-r--r--module/plugins/accounts/DebridItaliaCom.py7
-rw-r--r--module/plugins/accounts/DepositfilesCom.py8
-rw-r--r--module/plugins/accounts/DropboxCom.py10
-rw-r--r--module/plugins/accounts/EuroshareEu.py12
-rw-r--r--module/plugins/accounts/ExashareCom.py16
-rw-r--r--module/plugins/accounts/FastixRu.py15
-rw-r--r--module/plugins/accounts/File4SafeCom.py8
-rw-r--r--module/plugins/accounts/FilecloudIo.py10
-rw-r--r--module/plugins/accounts/FilefactoryCom.py14
-rw-r--r--module/plugins/accounts/FilejungleCom.py17
-rw-r--r--module/plugins/accounts/FilerNet.py19
-rw-r--r--module/plugins/accounts/FilesMailRu.py14
-rw-r--r--module/plugins/accounts/FileserveCom.py10
-rw-r--r--module/plugins/accounts/FourSharedCom.py14
-rw-r--r--module/plugins/accounts/FreakshareCom.py38
-rw-r--r--module/plugins/accounts/FreeWayMe.py19
-rw-r--r--module/plugins/accounts/FshareVn.py22
-rw-r--r--module/plugins/accounts/HellshareCz.py23
-rw-r--r--module/plugins/accounts/HundredEightyUploadCom.py2
-rw-r--r--module/plugins/accounts/JunkyvideoCom.py16
-rw-r--r--module/plugins/accounts/LetitbitNet.py4
-rw-r--r--module/plugins/accounts/LinestorageCom.py3
-rw-r--r--module/plugins/accounts/LinksnappyCom.py17
-rw-r--r--module/plugins/accounts/LomafileCom.py16
-rw-r--r--module/plugins/accounts/MegaRapidCz.py23
-rw-r--r--module/plugins/accounts/MegasharesCom.py14
-rw-r--r--module/plugins/accounts/MultihostersCom.py16
-rw-r--r--module/plugins/accounts/MultishareCz.py14
-rw-r--r--module/plugins/accounts/MyfastfileCom.py8
-rw-r--r--module/plugins/accounts/NetloadIn.py18
-rw-r--r--module/plugins/accounts/NoPremiumPl.py81
-rw-r--r--module/plugins/accounts/NowVideoSx.py15
-rw-r--r--module/plugins/accounts/OboomCom.py17
-rw-r--r--module/plugins/accounts/OneFichierCom.py9
-rw-r--r--module/plugins/accounts/OverLoadMe.py27
-rw-r--r--module/plugins/accounts/PremiumTo.py16
-rw-r--r--module/plugins/accounts/PremiumizeMe.py6
-rw-r--r--module/plugins/accounts/PutdriveCom.py16
-rw-r--r--module/plugins/accounts/QuickshareCz.py12
-rw-r--r--module/plugins/accounts/RPNetBiz.py6
-rw-r--r--module/plugins/accounts/RapideoPl.py80
-rw-r--r--module/plugins/accounts/RapidgatorNet.py42
-rw-r--r--module/plugins/accounts/RapiduNet.py62
-rw-r--r--module/plugins/accounts/RealdebridCom.py18
-rw-r--r--module/plugins/accounts/RehostTo.py49
-rw-r--r--module/plugins/accounts/RyushareCom.py13
-rw-r--r--module/plugins/accounts/ShareonlineBiz.py60
-rw-r--r--module/plugins/accounts/SimplyPremiumCom.py36
-rw-r--r--module/plugins/accounts/SimplydebridCom.py7
-rw-r--r--module/plugins/accounts/SmoozedCom.py62
-rw-r--r--module/plugins/accounts/StahnuTo.py15
-rw-r--r--module/plugins/accounts/TurbobitNet.py11
-rw-r--r--module/plugins/accounts/UlozTo.py22
-rw-r--r--module/plugins/accounts/UnrestrictLi.py8
-rw-r--r--module/plugins/accounts/UploadableCh.py34
-rw-r--r--module/plugins/accounts/UploadedTo.py37
-rw-r--r--module/plugins/accounts/UploadheroCom.py15
-rw-r--r--module/plugins/accounts/UptoboxCom.py3
-rw-r--r--module/plugins/accounts/WebshareCz.py68
-rw-r--r--module/plugins/accounts/XFileSharingPro.py8
-rw-r--r--module/plugins/accounts/YibaishiwuCom.py16
-rw-r--r--module/plugins/accounts/ZeveraCom.py66
69 files changed, 1077 insertions, 499 deletions
diff --git a/module/plugins/accounts/AlldebridCom.py b/module/plugins/accounts/AlldebridCom.py
index f9906bd9d..7fc11e343 100644
--- a/module/plugins/accounts/AlldebridCom.py
+++ b/module/plugins/accounts/AlldebridCom.py
@@ -4,7 +4,6 @@ import re
import xml.dom.minidom as dom
from time import time
-from urllib import urlencode
from BeautifulSoup import BeautifulSoup
@@ -14,7 +13,7 @@ from pyload.plugin.Account import Account
class AlldebridCom(Account):
__name__ = "AlldebridCom"
__type__ = "account"
- __version__ = "0.22"
+ __version__ = "0.23"
__description__ = """AllDebrid.com account plugin"""
__license__ = "GPLv3"
@@ -23,37 +22,43 @@ class AlldebridCom(Account):
def loadAccountInfo(self, user, req):
data = self.getAccountData(user)
- page = req.load("http://www.alldebrid.com/account/")
- soup = BeautifulSoup(page)
+ html = req.load("http://www.alldebrid.com/account/")
+ soup = BeautifulSoup(html)
+
#Try to parse expiration date directly from the control panel page (better accuracy)
try:
time_text = soup.find('div', attrs={'class': 'remaining_time_text'}).strong.string
+
self.logDebug("Account expires in: %s" % time_text)
+
p = re.compile('\d+')
exp_data = p.findall(time_text)
exp_time = time() + int(exp_data[0]) * 24 * 60 * 60 + int(
exp_data[1]) * 60 * 60 + (int(exp_data[2]) - 1) * 60
+
#Get expiration date from API
except Exception:
data = self.getAccountData(user)
- page = req.load("http://www.alldebrid.com/api.php",
+ html = req.load("http://www.alldebrid.com/api.php",
get={'action': "info_user", 'login': user, 'pw': data['password']})
- self.logDebug(page)
- xml = dom.parseString(page)
+
+ self.logDebug(html)
+
+ xml = dom.parseString(html)
exp_time = time() + int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue) * 24 * 60 * 60
+
account_info = {"validuntil": exp_time, "trafficleft": -1}
return account_info
def login(self, user, data, req):
- urlparams = urlencode({'action': 'login', 'login_login': user, 'login_password': data['password']})
- page = req.load("http://www.alldebrid.com/register/?%s" % urlparams)
-
- if "This login doesn't exist" in page:
- self.wrongPassword()
-
- if "The password is not valid" in page:
- self.wrongPassword()
+ html = req.load("http://www.alldebrid.com/register/",
+ get={'action' : "login",
+ 'login_login' : user,
+ 'login_password': data['password']},
+ decode=True)
- if "Invalid captcha" in page:
+ if "This login doesn't exist" in html \
+ or "The password is not valid" in html \
+ or "Invalid captcha" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/BackinNet.py b/module/plugins/accounts/BackinNet.py
new file mode 100644
index 000000000..46c8d7ac5
--- /dev/null
+++ b/module/plugins/accounts/BackinNet.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.XFSAccount import XFSAccount
+
+
+class BackinNet(XFSAccount):
+ __name__ = "BackinNet"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Backin.net account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = "backin.net"
diff --git a/module/plugins/accounts/BayfilesCom.py b/module/plugins/accounts/BayfilesCom.py
deleted file mode 100644
index 760c29d4e..000000000
--- a/module/plugins/accounts/BayfilesCom.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from time import time
-
-from pyload.plugin.Account import Account
-from pyload.utils import json_loads
-
-
-class BayfilesCom(Account):
- __name__ = "BayfilesCom"
- __type__ = "account"
- __version__ = "0.03"
-
- __description__ = """Bayfiles.com account plugin"""
- __license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
-
-
- def loadAccountInfo(self, user, req):
- for _i in xrange(2):
- res = json_loads(req.load("http://api.bayfiles.com/v1/account/info"))
- self.logDebug(res)
- if not res['error']:
- break
- self.logWarning(res['error'])
- self.relogin(user)
-
- return {"premium": bool(res['premium']), "trafficleft": -1,
- "validuntil": res['expires'] if res['expires'] >= int(time()) else -1}
-
-
- def login(self, user, data, req):
- res = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data['password'])))
- self.logDebug(res)
- if res['error']:
- self.logError(res['error'])
- self.wrongPassword()
diff --git a/module/plugins/accounts/BitshareCom.py b/module/plugins/accounts/BitshareCom.py
index aabab9e19..4774b9062 100644
--- a/module/plugins/accounts/BitshareCom.py
+++ b/module/plugins/accounts/BitshareCom.py
@@ -6,7 +6,7 @@ from pyload.plugin.Account import Account
class BitshareCom(Account):
__name__ = "BitshareCom"
__type__ = "account"
- __version__ = "0.12"
+ __version__ = "0.13"
__description__ = """Bitshare account plugin"""
__license__ = "GPLv3"
@@ -14,19 +14,22 @@ class BitshareCom(Account):
def loadAccountInfo(self, user, req):
- page = req.load("http://bitshare.com/mysettings.html")
+ html = req.load("http://bitshare.com/mysettings.html")
- if "\"http://bitshare.com/myupgrade.html\">Free" in page:
+ if "\"http://bitshare.com/myupgrade.html\">Free" in html:
return {"validuntil": -1, "trafficleft": -1, "premium": False}
- if not '<input type="checkbox" name="directdownload" checked="checked" />' in page:
+ if not '<input type="checkbox" name="directdownload" checked="checked" />' in html:
self.logWarning(_("Activate direct Download in your Bitshare Account"))
return {"validuntil": -1, "trafficleft": -1, "premium": True}
def login(self, user, data, req):
- page = req.load("http://bitshare.com/login.html",
- post={"user": user, "password": data['password'], "submit": "Login"}, cookies=True)
+ html = req.load("http://bitshare.com/login.html",
+ post={"user": user, "password": data['password'], "submit": "Login"},
+ cookies=True,
+ decode=True)
+
if "login" in req.lastEffectiveURL:
self.wrongPassword()
diff --git a/module/plugins/accounts/CatShareNet.py b/module/plugins/accounts/CatShareNet.py
index 4c1cd00d7..a604ebff1 100644
--- a/module/plugins/accounts/CatShareNet.py
+++ b/module/plugins/accounts/CatShareNet.py
@@ -10,39 +10,44 @@ from pyload.plugin.Account import Account
class CatShareNet(Account):
__name__ = "CatShareNet"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.05"
__description__ = """CatShareNet account plugin"""
__license__ = "GPLv3"
__authors__ = [("prOq", "")]
- PREMIUM_PATTERN = r'class="nav-collapse collapse pull-right">[\s\w<>=-."/:]*\sz.</a></li>\s*<li><a href="/premium">.*\s*<span style="color: red">(.*?)</span>[\s\w<>/]*href="/logout"'
- VALID_UNTIL_PATTERN = r'<div class="span6 pull-right">[\s\w<>=-":;]*<span style="font-size:13px;">.*?<strong>(.*?)</strong></span>'
+ PREMIUM_PATTERN = r'<a href="/premium">Konto:[\s\n]*Premium'
+ VALID_UNTIL_PATTERN = r'>Konto premium.*?<strong>(.*?)</strong></span>'
+ TRAFFIC_LEFT_PATTERN = r'<a href="/premium">([0-9.]+ [kMG]B)'
def loadAccountInfo(self, user, req):
- premium = False
- validuntil = -1
+ premium = False
+ validuntil = -1
+ trafficleft = -1
html = req.load("http://catshare.net/", decode=True)
+ if re.search(self.PREMIUM_PATTERN, html):
+ premium = True
+
try:
- m = re.search(self.PREMIUM_PATTERN, html)
- if "Premium" in m.group(1):
- premium = True
+ expiredate = re.search(self.VALID_UNTIL_PATTERN, html).group(1)
+ self.logDebug("Expire date: " + expiredate)
+
+ validuntil = mktime(strptime(expiredate, "%Y-%m-%d %H:%M:%S"))
+
except Exception:
pass
try:
- m = re.search(self.VALID_UNTIL_PATTERN, html)
- expiredate = m.group(1)
- if "-" not in expiredate:
- validuntil = mktime(strptime(expiredate, "%d.%m.%Y"))
+ trafficleft = self.parseTraffic(re.search(self.TRAFFIC_LEFT_PATTERN, html).group(1))
+
except Exception:
pass
- return {'premium': premium, 'trafficleft': -1, 'validuntil': validuntil}
+ return {'premium': premium, 'trafficleft': trafficleft, 'validuntil': validuntil}
def login(self, user, data, req):
@@ -50,7 +55,8 @@ class CatShareNet(Account):
post={'user_email': user,
'user_password': data['password'],
'remindPassword': 0,
- 'user[submit]': "Login"})
+ 'user[submit]': "Login"},
+ decode=True)
if not '<a href="/logout">Wyloguj</a>' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/CloudzillaTo.py b/module/plugins/accounts/CloudzillaTo.py
new file mode 100644
index 000000000..d22d5e4b3
--- /dev/null
+++ b/module/plugins/accounts/CloudzillaTo.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.Account import Account
+
+
+class CloudzillaTo(Account):
+ __name__ = "CloudzillaTo"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Cloudzilla.to account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ PREMIUM_PATTERN = r'<h2>account type</h2>\s*Premium Account'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.cloudzilla.to/")
+
+ premium = True if re.search(self.PREMIUM_PATTERN, html) else False
+
+ return {'validuntil': -1, 'trafficleft': -1, 'premium': premium}
+
+
+ def login(self, user, data, req):
+ html = req.load("http://www.cloudzilla.to/",
+ post={'lusername': user,
+ 'lpassword': data['password'],
+ 'w' : "dologin"},
+ decode=True)
+
+ if "ERROR" in html:
+ self.wrongPassword()
diff --git a/module/plugins/accounts/CzshareCom.py b/module/plugins/accounts/CzshareCom.py
index 6608efd90..dfe78c21c 100644
--- a/module/plugins/accounts/CzshareCom.py
+++ b/module/plugins/accounts/CzshareCom.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class CzshareCom(Account):
__name__ = "CzshareCom"
__type__ = "account"
- __version__ = "0.14"
+ __version__ = "0.18"
__description__ = """Czshare.com account plugin, now Sdilej.cz"""
__license__ = "GPLv3"
@@ -21,24 +21,34 @@ class CzshareCom(Account):
def loadAccountInfo(self, user, req):
+ premium = False
+ validuntil = None
+ trafficleft = None
+
html = req.load("http://sdilej.cz/prehled_kreditu/")
- m = re.search(self.CREDIT_LEFT_PATTERN, html)
- if m is None:
- return {"validuntil": 0, "trafficleft": 0}
+ try:
+ m = re.search(self.CREDIT_LEFT_PATTERN, html)
+ trafficleft = self.parseTraffic(m.group(1).replace(' ', '').replace(',', '.')) + m.group(2)
+ validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M'))
+
+ except Exception, e:
+ self.logError(e)
+
else:
- credits = float(m.group(1).replace(' ', '').replace(',', '.'))
- credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[m.group(2)]
- validuntil = mktime(strptime(m.group(3), '%d.%m.%y %H:%M'))
- return {"validuntil": validuntil, "trafficleft": credits}
+ premium = True
+
+ return {'premium' : premium,
+ 'validuntil' : validuntil,
+ 'trafficleft': trafficleft}
def login(self, user, data, req):
- html = req.load('https://sdilej.cz/index.php', post={
- "Prihlasit": "Prihlasit",
- "login-password": data['password'],
- "login-name": user
- })
+ html = req.load('https://sdilej.cz/index.php',
+ post={"Prihlasit": "Prihlasit",
+ "login-password": data['password'],
+ "login-name": user},
+ decode=True)
if '<div class="login' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/DebridItaliaCom.py b/module/plugins/accounts/DebridItaliaCom.py
index c8990f882..de97f6e64 100644
--- a/module/plugins/accounts/DebridItaliaCom.py
+++ b/module/plugins/accounts/DebridItaliaCom.py
@@ -10,7 +10,7 @@ from pyload.plugin.Account import Account
class DebridItaliaCom(Account):
__name__ = "DebridItaliaCom"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.13"
__description__ = """Debriditalia.com account plugin"""
__license__ = "GPLv3"
@@ -28,7 +28,7 @@ class DebridItaliaCom(Account):
if 'Account premium not activated' not in html:
m = re.search(self.WALID_UNTIL_PATTERN, html)
if m:
- validuntil = int(mktime(strptime(m.group(1), "%d/%m/%Y %H:%M")))
+ validuntil = mktime(strptime(m.group(1), "%d/%m/%Y %H:%M"))
info = {'premium': True, 'validuntil': validuntil, 'trafficleft': -1}
else:
self.logError(_("Unable to retrieve account information"))
@@ -38,7 +38,8 @@ class DebridItaliaCom(Account):
def login(self, user, data, req):
html = req.load("http://debriditalia.com/login.php",
- get={'u': user, 'p': data['password']})
+ get={'u': user, 'p': data['password']},
+ decode=True)
if 'NO' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/DepositfilesCom.py b/module/plugins/accounts/DepositfilesCom.py
index bce33777b..b3e896d31 100644
--- a/module/plugins/accounts/DepositfilesCom.py
+++ b/module/plugins/accounts/DepositfilesCom.py
@@ -10,7 +10,7 @@ from pyload.plugin.Account import Account
class DepositfilesCom(Account):
__name__ = "DepositfilesCom"
__type__ = "account"
- __version__ = "0.30"
+ __version__ = "0.32"
__description__ = """Depositfiles.com account plugin"""
__license__ = "GPLv3"
@@ -23,13 +23,15 @@ class DepositfilesCom(Account):
html = req.load("https://dfiles.eu/de/gold/")
validuntil = re.search(r"Sie haben Gold Zugang bis: <b>(.*?)</b></div>", html).group(1)
- validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S")))
+ validuntil = mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S"))
return {"validuntil": validuntil, "trafficleft": -1}
def login(self, user, data, req):
html = req.load("https://dfiles.eu/de/login.php", get={"return": "/de/gold/payment.php"},
- post={"login": user, "password": data['password']})
+ post={"login": user, "password": data['password']},
+ decode=True)
+
if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/DropboxCom.py b/module/plugins/accounts/DropboxCom.py
index 341bb761d..bcaa24b8e 100644
--- a/module/plugins/accounts/DropboxCom.py
+++ b/module/plugins/accounts/DropboxCom.py
@@ -8,7 +8,7 @@ from pyload.plugin.internal.SimpleHoster import SimpleHoster, create_getInfo
class DropboxCom(SimpleHoster):
__name__ = "DropboxCom"
__type__ = "hoster"
- __version__ = "0.03"
+ __version__ = "0.04"
__pattern__ = r'https?://(?:www\.)?dropbox\.com/.+'
@@ -31,12 +31,8 @@ class DropboxCom(SimpleHoster):
self.resumeDownload = True
- def handleFree(self):
- self.download(self.pyfile.url, get={'dl': "1"})
-
- check = self.checkDownload({'html': re.compile("html")})
- if check == "html":
- self.error(_("Downloaded file is an html page"))
+ def handleFree(self, pyfile):
+ self.download(pyfile.url, get={'dl': "1"})
getInfo = create_getInfo(DropboxCom)
diff --git a/module/plugins/accounts/EuroshareEu.py b/module/plugins/accounts/EuroshareEu.py
index 2d9288ba8..b37fc68fa 100644
--- a/module/plugins/accounts/EuroshareEu.py
+++ b/module/plugins/accounts/EuroshareEu.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class EuroshareEu(Account):
__name__ = "EuroshareEu"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """Euroshare.eu account plugin"""
__license__ = "GPLv3"
@@ -31,11 +31,11 @@ class EuroshareEu(Account):
def login(self, user, data, req):
- html = req.load('http://euroshare.eu/customer-zone/login/', post={
- "trvale": "1",
- "login": user,
- "password": data['password']
- }, decode=True)
+ html = req.load('http://euroshare.eu/customer-zone/login/',
+ post={"trvale": "1",
+ "login": user,
+ "password": data['password']},
+ decode=True)
if u">Nesprávne prihlasovacie meno alebo heslo" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/ExashareCom.py b/module/plugins/accounts/ExashareCom.py
new file mode 100644
index 000000000..431798522
--- /dev/null
+++ b/module/plugins/accounts/ExashareCom.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.XFSAccount import XFSAccount
+
+
+class ExashareCom(XFSAccount):
+ __name__ = "ExashareCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Exashare.com account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = "exashare.com"
diff --git a/module/plugins/accounts/FastixRu.py b/module/plugins/accounts/FastixRu.py
index 0f2ac71ce..69f78c3d9 100644
--- a/module/plugins/accounts/FastixRu.py
+++ b/module/plugins/accounts/FastixRu.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class FastixRu(Account):
__name__ = "FastixRu"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """Fastix account plugin"""
__license__ = "GPLv3"
@@ -16,9 +16,9 @@ class FastixRu(Account):
def loadAccountInfo(self, user, req):
data = self.getAccountData(user)
- page = json_loads(req.load("http://fastix.ru/api_v2/", get={'apikey': data['api'], 'sub': "getaccountdetails"}))
+ html = json_loads(req.load("http://fastix.ru/api_v2/", get={'apikey': data['api'], 'sub': "getaccountdetails"}))
- points = page['points']
+ points = html['points']
kb = float(points) * 1024 ** 2 / 1000
if points > 0:
@@ -29,10 +29,13 @@ class FastixRu(Account):
def login(self, user, data, req):
- page = req.load("http://fastix.ru/api_v2/",
+ html = req.load("http://fastix.ru/api_v2/",
get={'sub': "get_apikey", 'email': user, 'password': data['password']})
- api = json_loads(page)
+
+ api = json_loads(html)
api = api['apikey']
+
data['api'] = api
- if "error_code" in page:
+
+ if "error_code" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/File4SafeCom.py b/module/plugins/accounts/File4SafeCom.py
index 4f311aa4c..c48956d38 100644
--- a/module/plugins/accounts/File4SafeCom.py
+++ b/module/plugins/accounts/File4SafeCom.py
@@ -3,12 +3,12 @@
from pyload.plugin.internal.XFSAccount import XFSAccount
-class File4safeCom(XFSAccount):
- __name__ = "File4safeCom"
+class File4SafeCom(XFSAccount):
+ __name__ = "File4SafeCom"
__type__ = "account"
- __version__ = "0.04"
+ __version__ = "0.05"
- __description__ = """File4safe.com account plugin"""
+ __description__ = """File4Safe.com account plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
diff --git a/module/plugins/accounts/FilecloudIo.py b/module/plugins/accounts/FilecloudIo.py
index 8169bfdce..6d2dcb92a 100644
--- a/module/plugins/accounts/FilecloudIo.py
+++ b/module/plugins/accounts/FilecloudIo.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class FilecloudIo(Account):
__name__ = "FilecloudIo"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.04"
__description__ = """FilecloudIo account plugin"""
__license__ = "GPLv3"
@@ -19,7 +19,7 @@ class FilecloudIo(Account):
# It looks like the first API request always fails, so we retry 5 times, it should work on the second try
for _i in xrange(5):
rep = req.load("https://secure.filecloud.io/api-fetch_apikey.api",
- post={"username": user, "password": self.accounts[user]['password']})
+ post={"username": user, "password": self.getAccountData(user)['password']})
rep = json_loads(rep)
if rep['status'] == 'ok':
break
@@ -36,7 +36,7 @@ class FilecloudIo(Account):
rep = json_loads(rep)
if rep['is_premium'] == 1:
- return {"validuntil": int(rep['premium_until']), "trafficleft": -1}
+ return {"validuntil": float(rep['premium_until']), "trafficleft": -1}
else:
return {"premium": False}
@@ -55,5 +55,5 @@ class FilecloudIo(Account):
post=self.form_data,
multipart=True)
- self.logged_in = True if "you have successfully logged in - filecloud.io" in html else False
- self.form_data = {}
+ if "you have successfully logged in" not in html:
+ self.wrongPassword()
diff --git a/module/plugins/accounts/FilefactoryCom.py b/module/plugins/accounts/FilefactoryCom.py
index 6b7399db6..3395b3f90 100644
--- a/module/plugins/accounts/FilefactoryCom.py
+++ b/module/plugins/accounts/FilefactoryCom.py
@@ -11,7 +11,7 @@ from pyload.plugin.Account import Account
class FilefactoryCom(Account):
__name__ = "FilefactoryCom"
__type__ = "account"
- __version__ = "0.14"
+ __version__ = "0.15"
__description__ = """Filefactory.com account plugin"""
__license__ = "GPLv3"
@@ -19,7 +19,7 @@ class FilefactoryCom(Account):
("stickell", "l.stickell@yahoo.it")]
- VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<d>\d{1,2})\w{1,2} (?P<m>\w{3}), (?P<y>\d{4})</strong>'
+ VALID_UNTIL_PATTERN = r'Premium valid until: <strong>(?P<D>\d{1,2})\w{1,2} (?P<M>\w{3}), (?P<Y>\d{4})</strong>'
def loadAccountInfo(self, user, req):
@@ -28,7 +28,7 @@ class FilefactoryCom(Account):
m = re.search(self.VALID_UNTIL_PATTERN, html)
if m:
premium = True
- validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<d> \g<m> \g<y>', m.group(0))
+ validuntil = re.sub(self.VALID_UNTIL_PATTERN, '\g<D> \g<M> \g<Y>', m.group(0))
validuntil = mktime(strptime(validuntil, "%d %b %Y"))
else:
premium = False
@@ -40,10 +40,10 @@ class FilefactoryCom(Account):
def login(self, user, data, req):
req.http.c.setopt(REFERER, "http://www.filefactory.com/member/login.php")
- html = req.load("http://www.filefactory.com/member/signin.php", post={
- "loginEmail": user,
- "loginPassword": data['password'],
- "Submit": "Sign In"})
+ html = req.load("http://www.filefactory.com/member/signin.php",
+ post={"loginEmail" : user,
+ "loginPassword": data['password'],
+ "Submit" : "Sign In"})
if req.lastEffectiveURL != "http://www.filefactory.com/account/":
self.wrongPassword()
diff --git a/module/plugins/accounts/FilejungleCom.py b/module/plugins/accounts/FilejungleCom.py
index 5734f1638..2c476bffb 100644
--- a/module/plugins/accounts/FilejungleCom.py
+++ b/module/plugins/accounts/FilejungleCom.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class FilejungleCom(Account):
__name__ = "FilejungleCom"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.12"
__description__ = """Filejungle.com account plugin"""
__license__ = "GPLv3"
@@ -37,13 +37,14 @@ class FilejungleCom(Account):
def login(self, user, data, req):
- html = req.load(self.URL + "login.php", post={
- "loginUserName": user,
- "loginUserPassword": data['password'],
- "loginFormSubmit": "Login",
- "recaptcha_challenge_field": "",
- "recaptcha_response_field": "",
- "recaptcha_shortencode_field": ""})
+ html = req.load(self.URL + "login.php",
+ post={"loginUserName": user,
+ "loginUserPassword": data['password'],
+ "loginFormSubmit": "Login",
+ "recaptcha_challenge_field": "",
+ "recaptcha_response_field": "",
+ "recaptcha_shortencode_field": ""},
+ decode=True)
if re.search(self.LOGIN_FAILED_PATTERN, html):
self.wrongPassword()
diff --git a/module/plugins/accounts/FilerNet.py b/module/plugins/accounts/FilerNet.py
index 679a9dc40..f3cc42367 100644
--- a/module/plugins/accounts/FilerNet.py
+++ b/module/plugins/accounts/FilerNet.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class FilerNet(Account):
__name__ = "FilerNet"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.04"
__description__ = """Filer.net account plugin"""
__license__ = "GPLv3"
@@ -29,12 +29,14 @@ class FilerNet(Account):
if re.search(self.FREE_PATTERN, html):
return {"premium": False, "validuntil": None, "trafficleft": None}
- until = re.search(self.WALID_UNTIL_PATTERN, html)
+ until = re.search(self.WALID_UNTIL_PATTERN, html)
traffic = re.search(self.TRAFFIC_PATTERN, html)
+
if until and traffic:
- validuntil = int(time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S")))
+ validuntil = time.mktime(time.strptime(until.group(1), "%d.%m.%Y %H:%M:%S"))
trafficleft = self.parseTraffic(traffic.group(1))
return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
+
else:
self.logError(_("Unable to retrieve account information"))
return {"premium": False, "validuntil": None, "trafficleft": None}
@@ -42,9 +44,16 @@ class FilerNet(Account):
def login(self, user, data, req):
html = req.load("https://filer.net/login")
+
token = re.search(self.TOKEN_PATTERN, html).group(1)
+
html = req.load("https://filer.net/login_check",
- post={"_username": user, "_password": data['password'],
- "_remember_me": "on", "_csrf_token": token, "_target_path": "https://filer.net/"})
+ post={"_username": user,
+ "_password": data['password'],
+ "_remember_me": "on",
+ "_csrf_token": token,
+ "_target_path": "https://filer.net/"},
+ decode=True)
+
if 'Logout' not in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/FilesMailRu.py b/module/plugins/accounts/FilesMailRu.py
index bbff7311c..e6afd0168 100644
--- a/module/plugins/accounts/FilesMailRu.py
+++ b/module/plugins/accounts/FilesMailRu.py
@@ -6,7 +6,7 @@ from pyload.plugin.Account import Account
class FilesMailRu(Account):
__name__ = "FilesMailRu"
__type__ = "account"
- __version__ = "0.10"
+ __version__ = "0.11"
__description__ = """Filesmail.ru account plugin"""
__license__ = "GPLv3"
@@ -20,9 +20,13 @@ class FilesMailRu(Account):
def login(self, user, data, req):
user, domain = user.split("@")
- page = req.load("http://swa.mail.ru/cgi-bin/auth", None,
- {"Domain": domain, "Login": user, "Password": data['password'],
- "Page": "http://files.mail.ru/"}, cookies=True)
+ html = req.load("http://swa.mail.ru/cgi-bin/auth",
+ post={"Domain": domain,
+ "Login": user,
+ "Password": data['password'],
+ "Page": "http://files.mail.ru/"},
+ cookies=True,
+ decode=True)
- if "Неверное имя пользователя или пароль" in page: # @TODO seems not to work
+ if "Неверное имя пользователя или пароль" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/FileserveCom.py b/module/plugins/accounts/FileserveCom.py
index 7557450be..9aab88d2b 100644
--- a/module/plugins/accounts/FileserveCom.py
+++ b/module/plugins/accounts/FileserveCom.py
@@ -19,9 +19,9 @@ class FileserveCom(Account):
def loadAccountInfo(self, user, req):
data = self.getAccountData(user)
- page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
+ html = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
"submit": "Submit+Query"})
- res = json_loads(page)
+ res = json_loads(html)
if res['type'] == "premium":
validuntil = mktime(strptime(res['expireTime'], "%Y-%m-%d %H:%M:%S"))
@@ -31,14 +31,14 @@ class FileserveCom(Account):
def login(self, user, data, req):
- page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
+ html = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data['password'],
"submit": "Submit+Query"})
- res = json_loads(page)
+ res = json_loads(html)
if not res['type']:
self.wrongPassword()
- #login at fileserv page
+ #login at fileserv html
req.load("http://www.fileserve.com/login.php",
post={"loginUserName": user, "loginUserPassword": data['password'], "autoLogin": "checked",
"loginFormSubmit": "Login"})
diff --git a/module/plugins/accounts/FourSharedCom.py b/module/plugins/accounts/FourSharedCom.py
index 3ef865a91..127f9d58a 100644
--- a/module/plugins/accounts/FourSharedCom.py
+++ b/module/plugins/accounts/FourSharedCom.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class FourSharedCom(Account):
__name__ = "FourSharedCom"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.04"
__description__ = """FourShared.com account plugin"""
__license__ = "GPLv3"
@@ -22,12 +22,14 @@ class FourSharedCom(Account):
def login(self, user, data, req):
req.cj.setCookie("4shared.com", "4langcookie", "en")
- res = req.load('http://www.4shared.com/web/login',
- post={'login': user,
- 'password': data['password'],
- 'remember': "on",
+
+ res = req.load("http://www.4shared.com/web/login",
+ post={'login' : user,
+ 'password' : data['password'],
+ 'remember' : "on",
'_remember': "on",
- 'returnTo': "http://www.4shared.com/account/home.jsp"})
+ 'returnTo' : "http://www.4shared.com/account/home.jsp"},
+ decode=True)
if 'Please log in to access your 4shared account' in res:
self.wrongPassword()
diff --git a/module/plugins/accounts/FreakshareCom.py b/module/plugins/accounts/FreakshareCom.py
index 9905e3f55..9c61ac513 100644
--- a/module/plugins/accounts/FreakshareCom.py
+++ b/module/plugins/accounts/FreakshareCom.py
@@ -10,7 +10,7 @@ from pyload.plugin.Account import Account
class FreakshareCom(Account):
__name__ = "FreakshareCom"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.13"
__description__ = """Freakshare.com account plugin"""
__license__ = "GPLv3"
@@ -18,26 +18,36 @@ class FreakshareCom(Account):
def loadAccountInfo(self, user, req):
- page = req.load("http://freakshare.com/")
+ premium = False
+ validuntil = None
+ trafficleft = None
- validuntil = r'ltig bis:</td>\s*<td><b>([\d.:-]+)</b></td>'
- validuntil = re.search(validuntil, page, re.M)
- validuntil = validuntil.group(1).strip()
- validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M"))
+ html = req.load("http://freakshare.com/")
- traffic = r'Traffic verbleibend:</td>\s*<td>([^<]+)'
- traffic = re.search(traffic, page, re.M)
- traffic = traffic.group(1).strip()
- traffic = self.parseTraffic(traffic)
+ try:
+ m = re.search(r'ltig bis:</td>\s*<td><b>([\d.:-]+)</b></td>', html, re.M)
+ validuntil = mktime(strptime(m.group(1).strip(), "%d.%m.%Y - %H:%M"))
- return {"validuntil": validuntil, "trafficleft": traffic}
+ except Exception:
+ pass
+
+ try:
+ m = re.search(r'Traffic verbleibend:</td>\s*<td>([^<]+)', html, re.M)
+ trafficleft = self.parseTraffic(m.group(1))
+
+ except Exception:
+ pass
+
+ return {"premium": premium, "validuntil": validuntil, "trafficleft": trafficleft}
def login(self, user, data, req):
req.load("http://freakshare.com/index.php?language=EN")
- page = req.load("http://freakshare.com/login.html", None,
- {"submit": "Login", "user": user, "pass": data['password']}, cookies=True)
+ html = req.load("http://freakshare.com/login.html",
+ post={"submit": "Login", "user": user, "pass": data['password']},
+ cookies=True,
+ decode=True)
- if ">Wrong Username or Password" in page:
+ if ">Wrong Username or Password" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/FreeWayMe.py b/module/plugins/accounts/FreeWayMe.py
index 7b57cc6a0..dcd9d34cf 100644
--- a/module/plugins/accounts/FreeWayMe.py
+++ b/module/plugins/accounts/FreeWayMe.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class FreeWayMe(Account):
__name__ = "FreeWayMe"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.13"
__description__ = """FreeWayMe account plugin"""
__license__ = "GPLv3"
@@ -16,27 +16,22 @@ class FreeWayMe(Account):
def loadAccountInfo(self, user, req):
status = self.getAccountStatus(user, req)
- if not status:
- return False
+
self.logDebug(status)
account_info = {"validuntil": -1, "premium": False}
if status['premium'] == "Free":
- account_info['trafficleft'] = int(status['guthaben']) * 1024
+ account_info['trafficleft'] = self.parseTraffic(status['guthaben'] + "MB")
elif status['premium'] == "Spender":
account_info['trafficleft'] = -1
elif status['premium'] == "Flatrate":
- account_info = {"validuntil": int(status['Flatrate']),
+ account_info = {"validuntil": float(status['Flatrate']),
"trafficleft": -1,
"premium": True}
return account_info
- def getpw(self, user):
- return self.accounts[user]['password']
-
-
def login(self, user, data, req):
status = self.getAccountStatus(user, req)
@@ -47,9 +42,11 @@ class FreeWayMe(Account):
def getAccountStatus(self, user, req):
answer = req.load("https://www.free-way.me/ajax/jd.php",
- get={"id": 4, "user": user, "pass": self.accounts[user]['password']})
+ get={"id": 4, "user": user, "pass": self.getAccountData(user)['password']})
+
self.logDebug("Login: %s" % answer)
+
if answer == "Invalid login":
self.wrongPassword()
- return False
+
return json_loads(answer)
diff --git a/module/plugins/accounts/FshareVn.py b/module/plugins/accounts/FshareVn.py
index c84ce6648..282a17751 100644
--- a/module/plugins/accounts/FshareVn.py
+++ b/module/plugins/accounts/FshareVn.py
@@ -1,16 +1,16 @@
# -*- coding: utf-8 -*-
-from time import mktime, strptime
-from pycurl import REFERER
import re
+from time import mktime, strptime
+
from pyload.plugin.Account import Account
class FshareVn(Account):
__name__ = "FshareVn"
__type__ = "account"
- __version__ = "0.07"
+ __version__ = "0.09"
__description__ = """Fshare.vn account plugin"""
__license__ = "GPLv3"
@@ -46,13 +46,13 @@ class FshareVn(Account):
def login(self, user, data, req):
- req.http.c.setopt(REFERER, "https://www.fshare.vn/login.php")
-
- html = req.load('https://www.fshare.vn/login.php', post={
- "login_password": data['password'],
- "login_useremail": user,
- "url_refe": "http://www.fshare.vn/index.php"
- }, referer=True, decode=True)
+ html = req.load("https://www.fshare.vn/login.php",
+ post={'LoginForm[email]' : user,
+ 'LoginForm[password]' : data['password'],
+ 'LoginForm[rememberMe]': 1,
+ 'yt0' : "Login"},
+ referer=True,
+ decode=True)
if not re.search(r'<img\s+alt="VIP"', html):
self.wrongPassword()
@@ -60,4 +60,4 @@ class FshareVn(Account):
def getTrafficLeft(self):
m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- return float(m.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[m.group(2)] if m else 0
+ return self.parseTraffic(m.group(1) + m.group(2)) if m else 0
diff --git a/module/plugins/accounts/HellshareCz.py b/module/plugins/accounts/HellshareCz.py
index 6f160fa11..94467b375 100644
--- a/module/plugins/accounts/HellshareCz.py
+++ b/module/plugins/accounts/HellshareCz.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class HellshareCz(Account):
__name__ = "HellshareCz"
__type__ = "account"
- __version__ = "0.14"
+ __version__ = "0.16"
__description__ = """Hellshare.cz account plugin"""
__license__ = "GPLv3"
@@ -41,7 +41,7 @@ class HellshareCz(Account):
trafficleft = -1
else:
#Traffic-based account
- trafficleft = int(credit) * 1024
+ trafficleft = self.parseTraffic(credit + "MB")
validuntil = -1
except Exception, e:
self.logError(_("Unable to parse credit info"), e)
@@ -52,25 +52,28 @@ class HellshareCz(Account):
def login(self, user, data, req):
- html = req.load('http://www.hellshare.com/')
+ html = req.load('http://www.hellshare.com/', decode=True)
if req.lastEffectiveURL != 'http://www.hellshare.com/':
#Switch to English
self.logDebug("Switch lang - URL: %s" % req.lastEffectiveURL)
+
json = req.load("%s?do=locRouter-show" % req.lastEffectiveURL)
hash = re.search(r"(\-\-[0-9a-f]+\-)", json).group(1)
+
self.logDebug("Switch lang - HASH: %s" % hash)
- html = req.load('http://www.hellshare.com/%s/' % hash)
+
+ html = req.load('http://www.hellshare.com/%s/' % hash, decode=True)
if re.search(self.CREDIT_LEFT_PATTERN, html):
self.logDebug("Already logged in")
return
- html = req.load('http://www.hellshare.com/login?do=loginForm-submit', post={
- "login": "Log in",
- "password": data['password'],
- "username": user,
- "perm_login": "on"
- })
+ html = req.load('http://www.hellshare.com/login?do=loginForm-submit',
+ post={"login": "Log in",
+ "password": data['password'],
+ "username": user,
+ "perm_login": "on"},
+ decode=True)
if "<p>You input a wrong user name or wrong password</p>" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/HundredEightyUploadCom.py b/module/plugins/accounts/HundredEightyUploadCom.py
index 79b5ee033..72185a4bb 100644
--- a/module/plugins/accounts/HundredEightyUploadCom.py
+++ b/module/plugins/accounts/HundredEightyUploadCom.py
@@ -6,7 +6,7 @@ from pyload.plugin.internal.XFSAccount import XFSAccount
class HundredEightyUploadCom(XFSAccount):
__name__ = "HundredEightyUploadCom"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """180upload.com account plugin"""
__license__ = "GPLv3"
diff --git a/module/plugins/accounts/JunkyvideoCom.py b/module/plugins/accounts/JunkyvideoCom.py
new file mode 100644
index 000000000..8275ff176
--- /dev/null
+++ b/module/plugins/accounts/JunkyvideoCom.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.internal.XFSAccount import XFSAccount
+
+
+class JunkyvideoCom(XFSAccount):
+ __name__ = "JunkyvideoCom"
+ __type__ = "account"
+ __version__ = "0.01"
+
+ __description__ = """Junkyvideo.com account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = "junkyvideo.com"
diff --git a/module/plugins/accounts/LetitbitNet.py b/module/plugins/accounts/LetitbitNet.py
index c7615dd56..d0f08d0bb 100644
--- a/module/plugins/accounts/LetitbitNet.py
+++ b/module/plugins/accounts/LetitbitNet.py
@@ -7,7 +7,7 @@ from pyload.plugin.Account import Account
class LetitbitNet(Account):
__name__ = "LetitbitNet"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """Letitbit.net account plugin"""
__license__ = "GPLv3"
@@ -16,7 +16,7 @@ class LetitbitNet(Account):
def loadAccountInfo(self, user, req):
## DISABLED BECAUSE IT GET 'key exausted' EVEN IF VALID ##
- # api_key = self.accounts[user]['password']
+ # api_key = self.getAccountData(user)['password']
# json_data = [api_key, ['key/info']]
# api_rep = req.load('http://api.letitbit.net/json', post={'r': json_dumps(json_data)})
# self.logDebug("API Key Info: " + api_rep)
diff --git a/module/plugins/accounts/LinestorageCom.py b/module/plugins/accounts/LinestorageCom.py
index 6a9991b17..7a5d63a47 100644
--- a/module/plugins/accounts/LinestorageCom.py
+++ b/module/plugins/accounts/LinestorageCom.py
@@ -6,7 +6,7 @@ from pyload.plugin.internal.XFSAccount import XFSAccount
class LinestorageCom(XFSAccount):
__name__ = "LinestorageCom"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """Linestorage.com account plugin"""
__license__ = "GPLv3"
@@ -14,3 +14,4 @@ class LinestorageCom(XFSAccount):
HOSTER_DOMAIN = "linestorage.com"
+ HOSTER_URL = "http://linestorage.com/"
diff --git a/module/plugins/accounts/LinksnappyCom.py b/module/plugins/accounts/LinksnappyCom.py
index 968271dd7..0b1176ee9 100644
--- a/module/plugins/accounts/LinksnappyCom.py
+++ b/module/plugins/accounts/LinksnappyCom.py
@@ -9,8 +9,7 @@ from pyload.utils import json_loads
class LinksnappyCom(Account):
__name__ = "LinksnappyCom"
__type__ = "account"
- __version__ = "0.02"
-
+ __version__ = "0.05"
__description__ = """Linksnappy.com account plugin"""
__license__ = "GPLv3"
__authors__ = [("stickell", "l.stickell@yahoo.it")]
@@ -20,31 +19,39 @@ class LinksnappyCom(Account):
data = self.getAccountData(user)
r = req.load('http://gen.linksnappy.com/lseAPI.php',
get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
+
self.logDebug("JSON data: " + r)
+
j = json_loads(r)
if j['error']:
return {"premium": False}
validuntil = j['return']['expire']
+
if validuntil == 'lifetime':
validuntil = -1
+
elif validuntil == 'expired':
return {"premium": False}
+
else:
validuntil = float(validuntil)
if 'trafficleft' not in j['return'] or isinstance(j['return']['trafficleft'], str):
trafficleft = -1
else:
- trafficleft = int(j['return']['trafficleft']) * 1024
+ trafficleft = self.parseTraffic("%d MB" % j['return']['trafficleft'])
return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
def login(self, user, data, req):
- r = req.load('http://gen.linksnappy.com/lseAPI.php',
- get={'act': 'USERDETAILS', 'username': user, 'password': md5(data['password']).hexdigest()})
+ r = req.load("http://gen.linksnappy.com/lseAPI.php",
+ get={'act' : 'USERDETAILS',
+ 'username': user,
+ 'password': md5(data['password']).hexdigest()},
+ decode=True)
if 'Invalid Account Details' in r:
self.wrongPassword()
diff --git a/module/plugins/accounts/LomafileCom.py b/module/plugins/accounts/LomafileCom.py
deleted file mode 100644
index 24f988ac1..000000000
--- a/module/plugins/accounts/LomafileCom.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from pyload.plugin.internal.XFSAccount import XFSAccount
-
-
-class LomafileCom(XFSAccount):
- __name__ = "LomafileCom"
- __type__ = "account"
- __version__ = "0.02"
-
- __description__ = """Lomafile.com account plugin"""
- __license__ = "GPLv3"
- __authors__ = [("guidobelix", "guidobelix@hotmail.it")]
-
-
- HOSTER_DOMAIN = "lomafile.com"
diff --git a/module/plugins/accounts/MegaRapidCz.py b/module/plugins/accounts/MegaRapidCz.py
index 5ceee1301..5596fd623 100644
--- a/module/plugins/accounts/MegaRapidCz.py
+++ b/module/plugins/accounts/MegaRapidCz.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class MegaRapidCz(Account):
__name__ = "MegaRapidCz"
__type__ = "account"
- __version__ = "0.34"
+ __version__ = "0.35"
__description__ = """MegaRapid.cz account plugin"""
__license__ = "GPLv3"
@@ -25,19 +25,19 @@ class MegaRapidCz(Account):
def loadAccountInfo(self, user, req):
- html = req.load("http://megarapid.cz/mujucet/", decode=True)
+ htmll = req.load("http://megarapid.cz/mujucet/", decode=True)
- m = re.search(self.LIMITDL_PATTERN, html)
+ m = re.search(self.LIMITDL_PATTERN, htmll)
if m:
data = self.getAccountData(user)
data['options']['limitDL'] = [int(m.group(1))]
- m = re.search(self.VALID_UNTIL_PATTERN, html)
+ m = re.search(self.VALID_UNTIL_PATTERN, htmll)
if m:
validuntil = mktime(strptime(m.group(1), "%d.%m.%Y - %H:%M"))
return {"premium": True, "trafficleft": -1, "validuntil": validuntil}
- m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, htmll)
if m:
trafficleft = float(m.group(1)) * (1 << 20)
return {"premium": True, "trafficleft": trafficleft, "validuntil": -1}
@@ -46,12 +46,13 @@ class MegaRapidCz(Account):
def login(self, user, data, req):
- htm = req.load("http://megarapid.cz/prihlaseni/")
- if "Heslo:" in htm:
- start = htm.index('id="inp_hash" name="hash" value="')
- htm = htm[start + 33:]
- hashes = htm[0:32]
- htm = req.load("http://megarapid.cz/prihlaseni/",
+ html = req.load("http://megarapid.cz/prihlaseni/", decode=True)
+
+ if "Heslo:" in html:
+ start = html.index('id="inp_hash" name="hash" value="')
+ html = html[start + 33:]
+ hashes = html[0:32]
+ html = req.load("http://megarapid.cz/prihlaseni/",
post={"hash": hashes,
"login": user,
"pass1": data['password'],
diff --git a/module/plugins/accounts/MegasharesCom.py b/module/plugins/accounts/MegasharesCom.py
index 352e0abd5..53b854f65 100644
--- a/module/plugins/accounts/MegasharesCom.py
+++ b/module/plugins/accounts/MegasharesCom.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class MegasharesCom(Account):
__name__ = "MegasharesCom"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """Megashares.com account plugin"""
__license__ = "GPLv3"
@@ -37,12 +37,12 @@ class MegasharesCom(Account):
def login(self, user, data, req):
- html = req.load('http://d01.megashares.com/myms_login.php', post={
- "httpref": "",
- "myms_login": "Login",
- "mymslogin_name": user,
- "mymspassword": data['password']
- }, decode=True)
+ html = req.load('http://d01.megashares.com/myms_login.php',
+ post={"httpref" : "",
+ "myms_login" : "Login",
+ "mymslogin_name": user,
+ "mymspassword" : data['password']},
+ decode=True)
if not '<span class="b ml">%s</span>' % user in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/MultihostersCom.py b/module/plugins/accounts/MultihostersCom.py
new file mode 100644
index 000000000..e98f17b2d
--- /dev/null
+++ b/module/plugins/accounts/MultihostersCom.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.accounts.ZeveraCom import ZeveraCom
+
+
+class MultihostersCom(ZeveraCom):
+ __name__ = "MultihostersCom"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Multihosters.com account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("tjeh", "tjeh@gmx.net")]
+
+
+ HOSTER_DOMAIN = "multihosters.com"
diff --git a/module/plugins/accounts/MultishareCz.py b/module/plugins/accounts/MultishareCz.py
index 62b48c546..9b4f4447b 100644
--- a/module/plugins/accounts/MultishareCz.py
+++ b/module/plugins/accounts/MultishareCz.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class MultishareCz(Account):
__name__ = "MultishareCz"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.05"
__description__ = """Multishare.cz account plugin"""
__license__ = "GPLv3"
@@ -24,7 +24,7 @@ class MultishareCz(Account):
html = req.load("http://www.multishare.cz/profil/", decode=True)
m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- trafficleft = self.parseTraffic(m.group('S'), m.group('U')) if m else 0
+ trafficleft = self.parseTraffic(m.group('S') + m.group('U')) if m else 0
self.premium = True if trafficleft else False
html = req.load("http://www.multishare.cz/", decode=True)
@@ -34,11 +34,11 @@ class MultishareCz(Account):
def login(self, user, data, req):
- html = req.load('http://www.multishare.cz/html/prihlaseni_process.php', post={
- "akce": "Přihlásit",
- "heslo": data['password'],
- "jmeno": user
- }, decode=True)
+ html = req.load('http://www.multishare.cz/html/prihlaseni_process.php',
+ post={"akce" : "Přihlásit",
+ "heslo": data['password'],
+ "jmeno": user},
+ decode=True)
if '<div class="akce-chyba akce">' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/MyfastfileCom.py b/module/plugins/accounts/MyfastfileCom.py
index 01caf5c69..838a1eefd 100644
--- a/module/plugins/accounts/MyfastfileCom.py
+++ b/module/plugins/accounts/MyfastfileCom.py
@@ -9,7 +9,7 @@ from pyload.utils import json_loads
class MyfastfileCom(Account):
__name__ = "MyfastfileCom"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.04"
__description__ = """Myfastfile.com account plugin"""
__license__ = "GPLv3"
@@ -18,7 +18,7 @@ class MyfastfileCom(Account):
def loadAccountInfo(self, user, req):
if 'days_left' in self.json_data:
- validuntil = int(time() + self.json_data['days_left'] * 24 * 60 * 60)
+ validuntil = time() + self.json_data['days_left'] * 24 * 60 * 60
return {"premium": True, "validuntil": validuntil, "trafficleft": -1}
else:
self.logError(_("Unable to get account information"))
@@ -27,8 +27,10 @@ class MyfastfileCom(Account):
def login(self, user, data, req):
# Password to use is the API-Password written in http://myfastfile.com/myaccount
html = req.load("http://myfastfile.com/api.php",
- get={"user": user, "pass": data['password']})
+ get={"user": user, "pass": data['password']})
+
self.logDebug("JSON data: " + html)
+
self.json_data = json_loads(html)
if self.json_data['status'] != 'ok':
self.logError(_('Invalid login. The password to use is the API-Password you find in your "My Account" page'))
diff --git a/module/plugins/accounts/NetloadIn.py b/module/plugins/accounts/NetloadIn.py
index d0d48315a..68982e828 100644
--- a/module/plugins/accounts/NetloadIn.py
+++ b/module/plugins/accounts/NetloadIn.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class NetloadIn(Account):
__name__ = "NetloadIn"
__type__ = "account"
- __version__ = "0.22"
+ __version__ = "0.23"
__description__ = """Netload.in account plugin"""
__license__ = "GPLv3"
@@ -18,9 +18,9 @@ class NetloadIn(Account):
def loadAccountInfo(self, user, req):
- page = req.load("http://netload.in/index.php", get={'id': 2, 'lang': "de"})
+ html = req.load("http://netload.in/index.php", get={'id': 2, 'lang': "de"})
left = r'>(\d+) (Tag|Tage), (\d+) Stunden<'
- left = re.search(left, page)
+ left = re.search(left, html)
if left:
validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60
trafficleft = -1
@@ -33,8 +33,12 @@ class NetloadIn(Account):
def login(self, user, data, req):
- page = req.load("http://netload.in/index.php", None,
- {"txtuser": user, "txtpass": data['password'], "txtcheck": "login", "txtlogin": "Login"},
- cookies=True)
- if "password or it might be invalid!" in page:
+ html = req.load("http://netload.in/index.php",
+ post={"txtuser" : user,
+ "txtpass" : data['password'],
+ "txtcheck": "login",
+ "txtlogin": "Login"},
+ cookies=True,
+ decode=True)
+ if "password or it might be invalid!" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/NoPremiumPl.py b/module/plugins/accounts/NoPremiumPl.py
new file mode 100644
index 000000000..a36b114eb
--- /dev/null
+++ b/module/plugins/accounts/NoPremiumPl.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+from datetime import datetime
+import hashlib
+
+from module.plugins.Account import Account
+from time import mktime
+from module.common.json_layer import json_loads as loads
+
+
+class NoPremiumPl(Account):
+ __name__ = "NoPremiumPl"
+ __version__ = "0.01"
+ __type__ = "account"
+ __description__ = "NoPremium.pl account plugin"
+ __license__ = "GPLv3"
+ __authors__ = [("goddie", "dev@nopremium.pl")]
+
+ _api_url = "http://crypt.nopremium.pl"
+
+ _api_query = {
+ "site": "nopremium",
+ "username": "",
+ "password": "",
+ "output": "json",
+ "loc": "1",
+ "info": "1"
+ }
+
+ _req = None
+ _usr = None
+ _pwd = None
+
+ def loadAccountInfo(self, name, req):
+ self._req = req
+ try:
+ result = loads(self.runAuthQuery())
+ except Exception:
+ # todo: return or let it be thrown?
+ return
+
+ premium = False
+ valid_untill = -1
+
+ if "expire" in result.keys() and result["expire"]:
+ premium = True
+ valid_untill = mktime(datetime.fromtimestamp(int(result["expire"])).timetuple())
+ traffic_left = result["balance"] * 1024
+
+ return ({
+ "validuntil": valid_untill,
+ "trafficleft": traffic_left,
+ "premium": premium
+ })
+
+ def login(self, user, data, req):
+ self._usr = user
+ self._pwd = hashlib.sha1(hashlib.md5(data["password"]).hexdigest()).hexdigest()
+ self._req = req
+
+ try:
+ response = loads(self.runAuthQuery())
+ except Exception:
+ self.wrongPassword()
+
+ if "errno" in response.keys():
+ self.wrongPassword()
+ data['usr'] = self._usr
+ data['pwd'] = self._pwd
+
+ def createAuthQuery(self):
+ query = self._api_query
+ query["username"] = self._usr
+ query["password"] = self._pwd
+
+ return query
+
+ def runAuthQuery(self):
+ data = self._req.load(self._api_url, post=self.createAuthQuery())
+
+ return data \ No newline at end of file
diff --git a/module/plugins/accounts/NowVideoSx.py b/module/plugins/accounts/NowVideoSx.py
index d2527d635..8359e0410 100644
--- a/module/plugins/accounts/NowVideoSx.py
+++ b/module/plugins/accounts/NowVideoSx.py
@@ -7,10 +7,10 @@ from time import gmtime, mktime, strptime
from pyload.plugin.Account import Account
-class NowVideoAt(Account):
- __name__ = "NowVideoAt"
+class NowVideoSx(Account):
+ __name__ = "NowVideoSx"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.03"
__description__ = """NowVideo.at account plugin"""
__license__ = "GPLv3"
@@ -25,7 +25,7 @@ class NowVideoAt(Account):
trafficleft = -1
premium = None
- html = req.load("http://www.nowvideo.at/premium.php")
+ html = req.load("http://www.nowvideo.sx/premium.php")
m = re.search(self.VALID_UNTIL_PATTERN, html)
if m:
@@ -49,8 +49,9 @@ class NowVideoAt(Account):
def login(self, user, data, req):
- html = req.load("http://www.nowvideo.at/login.php",
- post={'user': user, 'pass': data['password']})
+ html = req.load("http://www.nowvideo.sx/login.php",
+ post={'user': user, 'pass': data['password']},
+ decode=True)
- if ">Invalid login details" is html:
+ if re.search(r'>Log In<', html):
self.wrongPassword()
diff --git a/module/plugins/accounts/OboomCom.py b/module/plugins/accounts/OboomCom.py
index a40783535..012fb42c3 100644
--- a/module/plugins/accounts/OboomCom.py
+++ b/module/plugins/accounts/OboomCom.py
@@ -11,7 +11,7 @@ from pyload.plugin.Account import Account
class OboomCom(Account):
__name__ = "OboomCom"
__type__ = "account"
- __version__ = "0.21"
+ __version__ = "0.23"
__description__ = """Oboom.com account plugin"""
__license__ = "GPLv3"
@@ -20,12 +20,15 @@ class OboomCom(Account):
def loadAccountData(self, user, req):
passwd = self.getAccountData(user)['password']
- salt = passwd[::-1]
+ salt = passwd[::-1]
pbkdf2 = PBKDF2(passwd, salt, 1000).hexread(16)
+
result = json_loads(req.load("https://www.oboom.com/1/login", get={"auth": user, "pass": pbkdf2}))
+
if not result[0] == 200:
self.logWarning(_("Failed to log in: %s") % result[1])
self.wrongPassword()
+
return result[1]
@@ -42,19 +45,19 @@ class OboomCom(Account):
if userData['premium_unix'] == "null":
validUntil = -1
else:
- validUntil = int(userData['premium_unix'])
+ validUntil = float(userData['premium_unix'])
traffic = userData['traffic']
- trafficLeft = traffic['current']
- maxTraffic = traffic['max']
+ trafficLeft = traffic['current'] / 1024 #@TODO: Remove `/ 1024` in 0.4.10
+ maxTraffic = traffic['max'] / 1024 #@TODO: Remove `/ 1024` in 0.4.10
session = accountData['session']
return {'premium' : premium,
'validuntil' : validUntil,
- 'trafficleft': trafficLeft / 1024, #@TODO: Remove / 1024 in 0.4.10
- 'maxtraffic' : maxTraffic / 1024, #@TODO: Remove / 1024 in 0.4.10
+ 'trafficleft': trafficLeft,
+ 'maxtraffic' : maxTraffic,
'session' : session}
diff --git a/module/plugins/accounts/OneFichierCom.py b/module/plugins/accounts/OneFichierCom.py
index 5d4a037f0..65ec841c4 100644
--- a/module/plugins/accounts/OneFichierCom.py
+++ b/module/plugins/accounts/OneFichierCom.py
@@ -12,7 +12,7 @@ from pyload.plugin.Account import Account
class OneFichierCom(Account):
__name__ = "OneFichierCom"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.12"
__description__ = """1fichier.com account plugin"""
__license__ = "GPLv3"
@@ -49,7 +49,12 @@ class OneFichierCom(Account):
req.http.c.setopt(REFERER, "https://1fichier.com/login.pl?lg=en")
html = req.load("https://1fichier.com/login.pl?lg=en",
- post={'mail': user, 'pass': data['password'], 'It': "on", 'purge': "off", 'valider': "Send"})
+ post={'mail' : user,
+ 'pass' : data['password'],
+ 'It' : "on",
+ 'purge' : "off",
+ 'valider': "Send"},
+ decode=True)
if '>Invalid email address' in html or '>Invalid password' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/OverLoadMe.py b/module/plugins/accounts/OverLoadMe.py
index 27ed9eb98..d945dd7bd 100644
--- a/module/plugins/accounts/OverLoadMe.py
+++ b/module/plugins/accounts/OverLoadMe.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class OverLoadMe(Account):
__name__ = "OverLoadMe"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.04"
__description__ = """Over-Load.me account plugin"""
__license__ = "GPLv3"
@@ -15,21 +15,28 @@ class OverLoadMe(Account):
def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("https://api.over-load.me/account.php", get={"user": user, "auth": data['password']}).strip()
- data = json_loads(page)
+ https = "https" if self.getConfig("ssl") else "http"
+ data = self.getAccountData(user)
+ html = req.load(https + "://api.over-load.me/account.php",
+ get={'user': user,
+ 'auth': data['password']}).strip()
+
+ data = json_loads(html)
+ self.logDebug(data)
# Check for premium
if data['membership'] == "Free":
- return {"premium": False}
-
- account_info = {"validuntil": data['expirationunix'], "trafficleft": -1}
- return account_info
+ return {'premium': False, 'validuntil': None, 'trafficleft': None}
+ else:
+ return {'premium': True, 'validuntil': data['expirationunix'], 'trafficleft': -1}
def login(self, user, data, req):
- jsondata = req.load("https://api.over-load.me/account.php",
- get={"user": user, "auth": data['password']}).strip()
+ https = "https" if self.getConfig("ssl") else "http"
+ jsondata = req.load(https + "://api.over-load.me/account.php",
+ get={'user': user,
+ 'auth': data['password']}).strip()
+
data = json_loads(jsondata)
if data['err'] == 1:
diff --git a/module/plugins/accounts/PremiumTo.py b/module/plugins/accounts/PremiumTo.py
index 7f15e8a86..04bbc10d5 100644
--- a/module/plugins/accounts/PremiumTo.py
+++ b/module/plugins/accounts/PremiumTo.py
@@ -6,7 +6,7 @@ from pyload.plugin.Account import Account
class PremiumTo(Account):
__name__ = "PremiumTo"
__type__ = "account"
- __version__ = "0.04"
+ __version__ = "0.08"
__description__ = """Premium.to account plugin"""
__license__ = "GPLv3"
@@ -17,18 +17,22 @@ class PremiumTo(Account):
def loadAccountInfo(self, user, req):
- api_r = req.load("http://premium.to/api/straffic.php",
- get={'username': self.username, 'password': self.password})
- traffic = sum(map(int, api_r.split(';')))
+ traffic = req.load("http://premium.to/api/straffic.php",
+ get={'username': self.username, 'password': self.password})
- return {"trafficleft": int(traffic) / 1024, "validuntil": -1} #@TODO: Remove / 1024 in 0.4.10
+ if "wrong username" not in traffic:
+ trafficleft = sum(map(float, traffic.split(';'))) / 1024 #@TODO: Remove `/ 1024` in 0.4.10
+ return {'premium': True, 'trafficleft': trafficleft, 'validuntil': -1}
+ else:
+ return {'premium': False, 'trafficleft': None, 'validuntil': None}
def login(self, user, data, req):
self.username = user
self.password = data['password']
authcode = req.load("http://premium.to/api/getauthcode.php",
- get={'username': user, 'password': self.password}).strip()
+ get={'username': user, 'password': self.password},
+ decode=True)
if "wrong username" in authcode:
self.wrongPassword()
diff --git a/module/plugins/accounts/PremiumizeMe.py b/module/plugins/accounts/PremiumizeMe.py
index 75fc22198..3cd15ce23 100644
--- a/module/plugins/accounts/PremiumizeMe.py
+++ b/module/plugins/accounts/PremiumizeMe.py
@@ -8,7 +8,7 @@ from pyload.utils import json_loads
class PremiumizeMe(Account):
__name__ = "PremiumizeMe"
__type__ = "account"
- __version__ = "0.11"
+ __version__ = "0.13"
__description__ = """Premiumize.me account plugin"""
__license__ = "GPLv3"
@@ -22,7 +22,7 @@ class PremiumizeMe(Account):
# Parse account info
account_info = {"validuntil": float(status['result']['expires']),
- "trafficleft": max(0, status['result']['trafficleft_bytes'])}
+ "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)} #@TODO: Remove `/ 1024` in 0.4.10
if status['result']['type'] == 'free':
account_info['premium'] = False
@@ -45,5 +45,5 @@ class PremiumizeMe(Account):
answer = req.load("https://api.premiumize.me/pm-api/v1.php",
get={'method' : "accountstatus",
'params[login]': user,
- 'params[pass]' : self.accounts[user]['password']})
+ 'params[pass]' : self.getAccountData(user)['password']})
return json_loads(answer)
diff --git a/module/plugins/accounts/PutdriveCom.py b/module/plugins/accounts/PutdriveCom.py
new file mode 100644
index 000000000..4f2fadbcc
--- /dev/null
+++ b/module/plugins/accounts/PutdriveCom.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.accounts.ZeveraCom import ZeveraCom
+
+
+class PutdriveCom(ZeveraCom):
+ __name__ = "PutdriveCom"
+ __type__ = "account"
+ __version__ = "0.02"
+
+ __description__ = """Putdrive.com account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = "putdrive.com"
diff --git a/module/plugins/accounts/QuickshareCz.py b/module/plugins/accounts/QuickshareCz.py
index c3d69e0c3..2bcde1c9d 100644
--- a/module/plugins/accounts/QuickshareCz.py
+++ b/module/plugins/accounts/QuickshareCz.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class QuickshareCz(Account):
__name__ = "QuickshareCz"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.03"
__description__ = """Quickshare.cz account plugin"""
__license__ = "GPLv3"
@@ -33,11 +33,11 @@ class QuickshareCz(Account):
def login(self, user, data, req):
- html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php', post={
- "akce": u'Přihlásit',
- "heslo": data['password'],
- "jmeno": user
- }, decode=True)
+ html = req.load('http://www.quickshare.cz/html/prihlaseni_process.php',
+ post={"akce": u'Přihlásit',
+ "heslo": data['password'],
+ "jmeno": user},
+ decode=True)
if u'>Takový uživatel neexistuje.<' in html or u'>Špatné heslo.<' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/RPNetBiz.py b/module/plugins/accounts/RPNetBiz.py
index bb529b19c..e0b35b68c 100644
--- a/module/plugins/accounts/RPNetBiz.py
+++ b/module/plugins/accounts/RPNetBiz.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class RPNetBiz(Account):
__name__ = "RPNetBiz"
__type__ = "account"
- __version__ = "0.10"
+ __version__ = "0.12"
__description__ = """RPNet.biz account plugin"""
__license__ = "GPLv3"
@@ -20,7 +20,7 @@ class RPNetBiz(Account):
try:
if res['accountInfo']['isPremium']:
# Parse account info. Change the trafficleft later to support per host info.
- account_info = {"validuntil": int(res['accountInfo']['premiumExpiry']),
+ account_info = {"validuntil": float(res['accountInfo']['premiumExpiry']),
"trafficleft": -1, "premium": True}
else:
account_info = {"validuntil": None, "trafficleft": None, "premium": False}
@@ -44,7 +44,7 @@ class RPNetBiz(Account):
def getAccountStatus(self, user, req):
# Using the rpnet API, check if valid premium account
res = req.load("https://premium.rpnet.biz/client_api.php",
- get={"username": user, "password": self.accounts[user]['password'],
+ get={"username": user, "password": self.getAccountData(user)['password'],
"action": "showAccountInformation"})
self.logDebug("JSON data: %s" % res)
diff --git a/module/plugins/accounts/RapideoPl.py b/module/plugins/accounts/RapideoPl.py
new file mode 100644
index 000000000..426c680a6
--- /dev/null
+++ b/module/plugins/accounts/RapideoPl.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+
+from datetime import datetime
+import hashlib
+
+from module.plugins.Account import Account
+from time import mktime
+from module.common.json_layer import json_loads as loads
+
+
+class RapideoPl(Account):
+ __name__ = "RapideoPl"
+ __version__ = "0.01"
+ __type__ = "account"
+ __description__ = "Rapideo.pl account plugin"
+ __license__ = "GPLv3"
+ __authors__ = [("goddie", "dev@rapideo.pl")]
+
+ _api_url = "http://enc.rapideo.pl"
+
+ _api_query = {
+ "site": "newrd",
+ "username": "",
+ "password": "",
+ "output": "json",
+ "loc": "1",
+ "info": "1"
+ }
+
+ _req = None
+ _usr = None
+ _pwd = None
+
+ def loadAccountInfo(self, name, req):
+ self._req = req
+ try:
+ result = loads(self.runAuthQuery())
+ except Exception:
+ # todo: return or let it be thrown?
+ return
+
+ premium = False
+ valid_untill = -1
+ if "expire" in result.keys() and result["expire"]:
+ premium = True
+ valid_untill = mktime(datetime.fromtimestamp(int(result["expire"])).timetuple())
+
+ traffic_left = result["balance"]
+
+ return ({
+ "validuntil": valid_untill,
+ "trafficleft": traffic_left,
+ "premium": premium
+ })
+
+ def login(self, user, data, req):
+ self._usr = user
+ self._pwd = hashlib.md5(data["password"]).hexdigest()
+ self._req = req
+ try:
+ response = loads(self.runAuthQuery())
+ except Exception:
+ self.wrongPassword()
+
+ if "errno" in response.keys():
+ self.wrongPassword()
+ data['usr'] = self._usr
+ data['pwd'] = self._pwd
+
+ def createAuthQuery(self):
+ query = self._api_query
+ query["username"] = self._usr
+ query["password"] = self._pwd
+
+ return query
+
+ def runAuthQuery(self):
+ data = self._req.load(self._api_url, post=self.createAuthQuery())
+
+ return data \ No newline at end of file
diff --git a/module/plugins/accounts/RapidgatorNet.py b/module/plugins/accounts/RapidgatorNet.py
index 693b78547..7643f07d2 100644
--- a/module/plugins/accounts/RapidgatorNet.py
+++ b/module/plugins/accounts/RapidgatorNet.py
@@ -7,51 +7,65 @@ from pyload.utils import json_loads
class RapidgatorNet(Account):
__name__ = "RapidgatorNet"
__type__ = "account"
- __version__ = "0.04"
+ __version__ = "0.09"
__description__ = """Rapidgator.net account plugin"""
__license__ = "GPLv3"
__authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
- API_URL = 'http://rapidgator.net/api/user'
+ API_URL = "http://rapidgator.net/api/user"
def loadAccountInfo(self, user, req):
+ validuntil = None
+ trafficleft = None
+ premium = False
+ sid = None
+
try:
- sid = self.getAccountData(user).get('SID')
+ sid = self.getAccountData(user).get('sid')
assert sid
- json = req.load("%s/info?sid=%s" % (self.API_URL, sid))
- self.logDebug("API:USERINFO", json)
- json = json_loads(json)
+ html = req.load("%s/info" % self.API_URL, get={'sid': sid})
+
+ self.logDebug("API:USERINFO", html)
+
+ json = json_loads(html)
if json['response_status'] == 200:
if "reset_in" in json['response']:
self.scheduleRefresh(user, json['response']['reset_in'])
- return {"validuntil": json['response']['expire_date'],
- "trafficleft": int(json['response']['traffic_left']),
- "premium": True}
+ validuntil = json['response']['expire_date']
+ trafficleft = float(json['response']['traffic_left']) / 1024 #@TODO: Remove `/ 1024` in 0.4.10
+ premium = True
else:
self.logError(json['response_details'])
+
except Exception, e:
self.logError(e)
- return {"validuntil": None, "trafficleft": None, "premium": False}
+ return {'validuntil' : validuntil,
+ 'trafficleft': trafficleft,
+ 'premium' : premium,
+ 'sid' : sid}
def login(self, user, data, req):
try:
- json = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']})
- self.logDebug("API:LOGIN", json)
- json = json_loads(json)
+ html = req.load('%s/login' % self.API_URL, post={"username": user, "password": data['password']})
+
+ self.logDebug("API:LOGIN", html)
+
+ json = json_loads(html)
if json['response_status'] == 200:
- data['SID'] = str(json['response']['session_id'])
+ data['sid'] = str(json['response']['session_id'])
return
else:
self.logError(json['response_details'])
+
except Exception, e:
self.logError(e)
diff --git a/module/plugins/accounts/RapiduNet.py b/module/plugins/accounts/RapiduNet.py
index 2c6fe04f8..8da698c57 100644
--- a/module/plugins/accounts/RapiduNet.py
+++ b/module/plugins/accounts/RapiduNet.py
@@ -2,47 +2,65 @@
import re
-from pyload.plugin.Account import Account
-from pyload.utils import json_loads
+from time import time
+
+from module.plugins.Account import Account
+from module.common.json_layer import json_loads
class RapiduNet(Account):
__name__ = "RapiduNet"
__type__ = "account"
- __version__ = "0.02"
+ __version__ = "0.05"
__description__ = """Rapidu.net account plugin"""
__license__ = "GPLv3"
- __authors__ = [("prOq", "")]
+ __authors__ = [("prOq", None),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ PREMIUM_PATTERN = r'>Account: <b>Premium'
+ VALID_UNTIL_PATTERN = r'>Account: <b>\w+ \((\d+)'
- PREMIUM_PATTERN = r'<a href="premium/" style="padding-left: 0px;">Account: <b>Premium</b></a>'
+ TRAFFIC_LEFT_PATTERN = r'class="tipsyS"><b>(.+?)<'
def loadAccountInfo(self, user, req):
- info = {'validuntil': None, 'trafficleft': None, 'premium': False}
+ validuntil = None
+ trafficleft = -1
+ premium = False
- req.load("https://rapidu.net/ajax.php", get={'a': "getChangeLang"}, post={"_go": "", "lang": "en"})
html = req.load("https://rapidu.net/", decode=True)
if re.search(self.PREMIUM_PATTERN, html):
- info['premium'] = True
+ premium = True
- return info
+ m = re.search(self.VALID_UNTIL_PATTERN, html)
+ if m:
+ validuntil = time() + (86400 * int(m.group(1)))
+ m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
+ if m:
+ trafficleft = self.parseTraffic(m.group(1))
- def login(self, user, data, req):
- try:
- json = json_loads(req.load("https://rapidu.net/ajax.php?a=getUserLogin",
- post={'_go': "",
- 'login': user,
- 'pass': data['password'],
- 'member': "1"}))
-
- self.logDebug(json)
+ return {'validuntil': validuntil, 'trafficleft': trafficleft, 'premium': premium}
- if not json['message'] == "success":
- self.wrongPassword()
- except Exception, e:
- self.logError(e)
+ def login(self, user, data, req):
+ req.load("https://rapidu.net/ajax.php",
+ get={'a': "getChangeLang"},
+ post={'_go' : "",
+ 'lang': "en"})
+
+ json = json_loads(req.load("https://rapidu.net/ajax.php",
+ get={'a': "getUserLogin"},
+ post={'_go' : "",
+ 'login' : user,
+ 'pass' : data['password'],
+ 'remember': "1"}))
+
+ self.logDebug(json)
+
+ if not json['message'] == "success":
+ self.wrongPassword()
diff --git a/module/plugins/accounts/RealdebridCom.py b/module/plugins/accounts/RealdebridCom.py
index d5aa2163c..07ff70496 100644
--- a/module/plugins/accounts/RealdebridCom.py
+++ b/module/plugins/accounts/RealdebridCom.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class RealdebridCom(Account):
__name__ = "RealdebridCom"
__type__ = "account"
- __version__ = "0.43"
+ __version__ = "0.45"
__description__ = """Real-Debrid.com account plugin"""
__license__ = "GPLv3"
@@ -18,9 +18,9 @@ class RealdebridCom(Account):
def loadAccountInfo(self, user, req):
if self.pin_code:
return {"premium": False}
- page = req.load("https://real-debrid.com/api/account.php")
- xml = dom.parseString(page)
- account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue),
+ html = req.load("https://real-debrid.com/api/account.php")
+ xml = dom.parseString(html)
+ account_info = {"validuntil": float(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue),
"trafficleft": -1}
return account_info
@@ -28,9 +28,13 @@ class RealdebridCom(Account):
def login(self, user, data, req):
self.pin_code = False
- page = req.load("https://real-debrid.com/ajax/login.php", get={"user": user, "pass": data['password']})
- if "Your login informations are incorrect" in page:
+ html = req.load("https://real-debrid.com/ajax/login.php",
+ get={"user": user, "pass": data['password']},
+ decode=True)
+
+ if "Your login informations are incorrect" in html:
self.wrongPassword()
- elif "PIN Code required" in page:
+
+ elif "PIN Code required" in html:
self.logWarning(_("PIN code required. Please login to https://real-debrid.com using the PIN or disable the double authentication in your control panel on https://real-debrid.com"))
self.pin_code = True
diff --git a/module/plugins/accounts/RehostTo.py b/module/plugins/accounts/RehostTo.py
index bcc34d47f..d62e1918a 100644
--- a/module/plugins/accounts/RehostTo.py
+++ b/module/plugins/accounts/RehostTo.py
@@ -6,7 +6,7 @@ from pyload.plugin.Account import Account
class RehostTo(Account):
__name__ = "RehostTo"
__type__ = "account"
- __version__ = "0.10"
+ __version__ = "0.16"
__description__ = """Rehost.to account plugin"""
__license__ = "GPLv3"
@@ -14,28 +14,41 @@ class RehostTo(Account):
def loadAccountInfo(self, user, req):
- data = self.getAccountData(user)
- page = req.load("http://rehost.to/api.php",
- get={'cmd': "login", 'user': user, 'pass': data['password']})
- data = [x.split("=") for x in page.split(",")]
- ses = data[0][1]
- long_ses = data[1][1]
+ premium = False
+ trafficleft = None
+ validuntil = -1
+ session = ""
- page = req.load("http://rehost.to/api.php",
- get={'cmd': "get_premium_credits", 'long_ses': long_ses})
- traffic, valid = page.split(",")
+ html = req.load("http://rehost.to/api.php",
+ get={'cmd' : "login", 'user': user,
+ 'pass': self.getAccountData(user)['password']})
+ try:
+ session = html.split(",")[1].split("=")[1]
- account_info = {"trafficleft": int(traffic) * 1024,
- "validuntil": int(valid),
- "long_ses": long_ses,
- "ses": ses}
+ html = req.load("http://rehost.to/api.php",
+ get={'cmd': "get_premium_credits", 'long_ses': session})
- return account_info
+ if html.strip() == "0,0" or "ERROR" in html:
+ self.logDebug(html)
+ else:
+ traffic, valid = html.split(",")
+
+ premium = True
+ trafficleft = self.parseTraffic(traffic + "MB")
+ validuntil = float(valid)
+
+ finally:
+ return {'premium' : premium,
+ 'trafficleft': trafficleft,
+ 'validuntil' : validuntil,
+ 'session' : session}
def login(self, user, data, req):
- page = req.load("http://rehost.to/api.php",
- get={'cmd': "login", 'user': user, 'pass': data['password']})
+ html = req.load("http://rehost.to/api.php",
+ get={'cmd': "login", 'user': user, 'pass': data['password']},
+ decode=True)
- if "Login failed." in page:
+ if "ERROR" in html:
+ self.logDebug(html)
self.wrongPassword()
diff --git a/module/plugins/accounts/RyushareCom.py b/module/plugins/accounts/RyushareCom.py
index fcef2d634..466d971f6 100644
--- a/module/plugins/accounts/RyushareCom.py
+++ b/module/plugins/accounts/RyushareCom.py
@@ -6,20 +6,11 @@ from pyload.plugin.internal.XFSAccount import XFSAccount
class RyushareCom(XFSAccount):
__name__ = "RyushareCom"
__type__ = "account"
- __version__ = "0.05"
+ __version__ = "0.06"
__description__ = """Ryushare.com account plugin"""
__license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz"),
- ("trance4us", "")]
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
HOSTER_DOMAIN = "ryushare.com"
-
-
- def login(self, user, data, req):
- req.lastURL = "http://ryushare.com/login.python"
- html = req.load("http://ryushare.com/login.python",
- post={"login": user, "password": data['password'], "op": "login"})
- if 'Incorrect Login or Password' in html or '>Error<' in html:
- self.wrongPassword()
diff --git a/module/plugins/accounts/ShareonlineBiz.py b/module/plugins/accounts/ShareonlineBiz.py
index 17425ac07..28bc3b9bc 100644
--- a/module/plugins/accounts/ShareonlineBiz.py
+++ b/module/plugins/accounts/ShareonlineBiz.py
@@ -1,45 +1,65 @@
# -*- coding: utf-8 -*-
+import re
+
from pyload.plugin.Account import Account
class ShareonlineBiz(Account):
__name__ = "ShareonlineBiz"
__type__ = "account"
- __version__ = "0.24"
+ __version__ = "0.31"
__description__ = """Share-online.biz account plugin"""
__license__ = "GPLv3"
- __authors__ = [("mkaay", "mkaay@mkaay.de"),
- ("zoidberg", "zoidberg@mujmail.cz")]
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
- def getUserAPI(self, user, req):
- return req.load("http://api.share-online.biz/account.php",
- {"username": user, "password": self.accounts[user]['password'], "act": "userDetails"})
+ def api_response(self, user, req):
+ return req.load("http://api.share-online.biz/cgi-bin",
+ get={'q' : "userdetails",
+ 'aux' : "traffic",
+ 'username': user,
+ 'password': self.getAccountData(user)['password']})
def loadAccountInfo(self, user, req):
- html = self.getUserAPI(user, req)
+ premium = False
+ validuntil = None
+ trafficleft = -1
+ maxtraffic = 100 * 1024 * 1024 * 1024 #: 100 GB
- info = {}
- for line in html.splitlines():
+ api = {}
+ for line in self.api_response(user, req).splitlines():
if "=" in line:
key, value = line.split("=")
- info[key] = value
- self.logDebug(info)
+ api[key] = value
+
+ self.logDebug(api)
+
+ if api['a'].lower() != "not_available":
+ req.cj.setCookie("share-online.biz", 'a', api['a'])
+
+ premium = api['group'] in ("Premium", "PrePaid")
+
+ validuntil = float(api['expire_date'])
+
+ traffic = float(api['traffic_1d'].split(";")[0])
+ maxtraffic = max(maxtraffic, traffic)
+ trafficleft = maxtraffic - traffic
- if "dl" in info and info['dl'].lower() != "not_available":
- req.cj.setCookie("share-online.biz", "dl", info['dl'])
- if "a" in info and info['a'].lower() != "not_available":
- req.cj.setCookie("share-online.biz", "a", info['a'])
+ maxtraffic /= 1024 #@TODO: Remove `/ 1024` in 0.4.10
+ trafficleft /= 1024 #@TODO: Remove `/ 1024` in 0.4.10
- return {"validuntil": int(info['expire_date']) if "expire_date" in info else -1,
- "trafficleft": -1,
- "premium": True if ("dl" in info or "a" in info) and (info['group'] != "Sammler") else False}
+ return {'premium' : premium,
+ 'validuntil' : validuntil,
+ 'trafficleft': trafficleft,
+ 'maxtraffic' : maxtraffic}
def login(self, user, data, req):
- html = self.getUserAPI(user, req)
- if "EXCEPTION" in html:
+ html = self.api_response(user, req)
+ err = re.search(r'\*\*(.+?)\*\*', html)
+ if err:
+ self.logError(err.group(1))
self.wrongPassword()
diff --git a/module/plugins/accounts/SimplyPremiumCom.py b/module/plugins/accounts/SimplyPremiumCom.py
index 0872e10f5..298ad8d59 100644
--- a/module/plugins/accounts/SimplyPremiumCom.py
+++ b/module/plugins/accounts/SimplyPremiumCom.py
@@ -7,7 +7,7 @@ from pyload.plugin.Account import Account
class SimplyPremiumCom(Account):
__name__ = "SimplyPremiumCom"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.05"
__description__ = """Simply-Premium.com account plugin"""
__license__ = "GPLv3"
@@ -15,32 +15,34 @@ class SimplyPremiumCom(Account):
def loadAccountInfo(self, user, req):
+ premium = False
+ validuntil = -1
+ trafficleft = None
+
json_data = req.load('http://www.simply-premium.com/api/user.php?format=json')
- self.logDebug("JSON data: " + json_data)
+
+ self.logDebug("JSON data: %s" % json_data)
+
json_data = json_loads(json_data)
- if 'vip' in json_data['result'] and json_data['result']['vip'] == 0:
- return {"premium": False}
+ if 'vip' in json_data['result'] and json_data['result']['vip']:
+ premium = True
- #Time package
- validuntil = float(json_data['result']['timeend'])
- #Traffic package
- # {"trafficleft": int(traffic), "validuntil": -1}
- #trafficleft = int(json_data['result']['traffic'])
+ if 'timeend' in json_data['result'] and json_data['result']['timeend']:
+ validuntil = float(json_data['result']['timeend'])
- #return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
- return {"premium": True, "validuntil": validuntil}
+ if 'remain_traffic' in json_data['result'] and json_data['result']['remain_traffic']:
+ trafficleft = float(json_data['result']['remain_traffic']) / 1024 #@TODO: Remove `/ 1024` in 0.4.10
+
+ return {"premium": premium, "validuntil": validuntil, "trafficleft": trafficleft}
def login(self, user, data, req):
req.cj.setCookie("simply-premium.com", "lang", "EN")
- if data['password'] == '' or data['password'] == '0':
- post_data = {"key": user}
- else:
- post_data = {"login_name": user, "login_pass": data['password']}
-
- html = req.load("http://www.simply-premium.com/login.php", post=post_data)
+ html = req.load("http://www.simply-premium.com/login.php",
+ post={'key': user} if not data['password'] else {'login_name': user, 'login_pass': data['password']},
+ decode=True)
if 'logout' not in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/SimplydebridCom.py b/module/plugins/accounts/SimplydebridCom.py
index 38ff90737..a826e44c7 100644
--- a/module/plugins/accounts/SimplydebridCom.py
+++ b/module/plugins/accounts/SimplydebridCom.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class SimplydebridCom(Account):
__name__ = "SimplydebridCom"
__type__ = "account"
- __version__ = "0.10"
+ __version__ = "0.11"
__description__ = """Simply-Debrid.com account plugin"""
__license__ = "GPLv3"
@@ -27,8 +27,9 @@ class SimplydebridCom(Account):
def login(self, user, data, req):
self.loginname = user
- self.password = data['password']
- get_data = {'login': 1, 'u': self.loginname, 'p': self.password}
+ self.password = data['password']
+ get_data = {'login': 1, 'u': self.loginname, 'p': self.password}
+
res = req.load("http://simply-debrid.com/api.php", get=get_data, decode=True)
if res != "02: loggin success":
self.wrongPassword()
diff --git a/module/plugins/accounts/SmoozedCom.py b/module/plugins/accounts/SmoozedCom.py
new file mode 100644
index 000000000..e6c25752b
--- /dev/null
+++ b/module/plugins/accounts/SmoozedCom.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+import hashlib
+
+from beaker.crypto.pbkdf2 import PBKDF2
+from time import time
+
+from module.common.json_layer import json_loads
+from module.plugins.Account import Account
+
+
+class SmoozedCom(Account):
+ __name__ = "SmoozedCom"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Smoozed.com account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("", "")]
+
+
+ def loadAccountInfo(self, user, req):
+ # Get user data from premiumize.me
+ status = self.getAccountStatus(user, req)
+
+ self.logDebug(status)
+
+ if status['state'] != 'ok':
+ info = {'validuntil' : None,
+ 'trafficleft': None,
+ 'premium' : False}
+ else:
+ # Parse account info
+ info = {'validuntil' : float(status["data"]["user"]["user_premium"]),
+ 'trafficleft': max(0, status["data"]["traffic"][1] - status["data"]["traffic"][0]),
+ 'session' : status["data"]["session_key"],
+ 'hosters' : [hoster["name"] for hoster in status["data"]["hoster"]]}
+
+ if info['validuntil'] < time():
+ info['premium'] = False
+ else:
+ info['premium'] = True
+
+ return info
+
+
+ def login(self, user, data, req):
+ # Get user data from premiumize.me
+ status = self.getAccountStatus(user, req)
+
+ # Check if user and password are valid
+ if status['state'] != 'ok':
+ self.wrongPassword()
+
+
+ def getAccountStatus(self, user, req):
+ password = self.getAccountData(user)['password']
+ salt = hashlib.sha256(password).hexdigest()
+ encrypted = PBKDF2(password, salt, iterations=1000).hexread(32)
+
+ return json_loads(req.load("http://www2.smoozed.com/api/login",
+ get={'auth': user, 'password': encrypted}))
diff --git a/module/plugins/accounts/StahnuTo.py b/module/plugins/accounts/StahnuTo.py
index adc7ab789..ed8df3b77 100644
--- a/module/plugins/accounts/StahnuTo.py
+++ b/module/plugins/accounts/StahnuTo.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class StahnuTo(Account):
__name__ = "StahnuTo"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.05"
__description__ = """StahnuTo account plugin"""
__license__ = "GPLv3"
@@ -19,16 +19,17 @@ class StahnuTo(Account):
html = req.load("http://www.stahnu.to/")
m = re.search(r'>VIP: (\d+.*)<', html)
- trafficleft = self.parseTraffic(m.group(1)) * 1024 if m else 0
+ trafficleft = self.parseTraffic(m.group(1)) if m else 0
- return {"premium": trafficleft > (512 * 1024), "trafficleft": trafficleft, "validuntil": -1}
+ return {"premium": trafficleft > 512, "trafficleft": trafficleft, "validuntil": -1}
def login(self, user, data, req):
- html = req.load("http://www.stahnu.to/login.php", post={
- "username": user,
- "password": data['password'],
- "submit": "Login"})
+ html = req.load("http://www.stahnu.to/login.php",
+ post={"username": user,
+ "password": data['password'],
+ "submit": "Login"},
+ decode=True)
if not '<a href="logout.php">' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/TurbobitNet.py b/module/plugins/accounts/TurbobitNet.py
index 1086ede2a..e3c07da2a 100644
--- a/module/plugins/accounts/TurbobitNet.py
+++ b/module/plugins/accounts/TurbobitNet.py
@@ -9,7 +9,7 @@ from pyload.plugin.Account import Account
class TurbobitNet(Account):
__name__ = "TurbobitNet"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """TurbobitNet account plugin"""
__license__ = "GPLv3"
@@ -33,10 +33,11 @@ class TurbobitNet(Account):
def login(self, user, data, req):
req.cj.setCookie("turbobit.net", "user_lang", "en")
- html = req.load("http://turbobit.net/user/login", post={
- "user[login]": user,
- "user[pass]": data['password'],
- "user[submit]": "Login"})
+ html = req.load("http://turbobit.net/user/login",
+ post={"user[login]": user,
+ "user[pass]": data['password'],
+ "user[submit]": "Login"},
+ decode=True)
if not '<div class="menu-item user-name">' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/UlozTo.py b/module/plugins/accounts/UlozTo.py
index 57031ce1f..1570419b0 100644
--- a/module/plugins/accounts/UlozTo.py
+++ b/module/plugins/accounts/UlozTo.py
@@ -10,7 +10,7 @@ from pyload.plugin.Account import Account
class UlozTo(Account):
__name__ = "UlozTo"
__type__ = "account"
- __version__ = "0.07"
+ __version__ = "0.10"
__description__ = """Uloz.to account plugin"""
__license__ = "GPLv3"
@@ -18,34 +18,32 @@ class UlozTo(Account):
("pulpe", "")]
- TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="/kredit" title="[^"]*?GB = ([\d.]+) MB"'
+ TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a .*?title="[^"]*?GB = ([\d.]+) MB"'
def loadAccountInfo(self, user, req):
- self.phpsessid = req.cj.getCookie("ULOSESSID") #@NOTE: this cookie gets lost somehow after each request
-
html = req.load("http://www.ulozto.net/", decode=True)
- req.cj.setCookie("ulozto.net", "ULOSESSID", self.phpsessid)
-
m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
- trafficleft = int(float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048) if m else 0
- self.premium = True if trafficleft else False
- return {"validuntil": -1, "trafficleft": trafficleft}
+ trafficleft = float(m.group(1).replace(' ', '').replace(',', '.')) * 1000 * 1.048 if m else 0
+ premium = True if trafficleft else False
+
+ return {'validuntil': -1, 'trafficleft': trafficleft, 'premium': premium}
def login(self, user, data, req):
login_page = req.load('http://www.ulozto.net/?do=web-login', decode=True)
- action = re.findall('<form action="(.+?)"', login_page)[1].replace('&amp;', '&')
- token = re.search('_token_" value="(.+?)"', login_page).group(1)
+ action = re.findall('<form action="(.+?)"', login_page)[1].replace('&amp;', '&')
+ token = re.search('_token_" value="(.+?)"', login_page).group(1)
html = req.load(urljoin("http://www.ulozto.net/", action),
post={'_token_' : token,
'do' : "loginForm-submit",
'login' : u"Přihlásit",
'password': data['password'],
- 'username': user},
+ 'username': user,
+ 'remember': "on"},
decode=True)
if '<div class="flash error">' in html:
diff --git a/module/plugins/accounts/UnrestrictLi.py b/module/plugins/accounts/UnrestrictLi.py
index 07e7d3e17..d8d7789bb 100644
--- a/module/plugins/accounts/UnrestrictLi.py
+++ b/module/plugins/accounts/UnrestrictLi.py
@@ -7,7 +7,7 @@ from pyload.utils import json_loads
class UnrestrictLi(Account):
__name__ = "UnrestrictLi"
__type__ = "account"
- __version__ = "0.03"
+ __version__ = "0.05"
__description__ = """Unrestrict.li account plugin"""
__license__ = "GPLv3"
@@ -23,14 +23,14 @@ class UnrestrictLi(Account):
return {"premium": False}
validuntil = json_data['result']['expires']
- trafficleft = int(json_data['result']['traffic'])
+ trafficleft = float(json_data['result']['traffic'] / 1024) #@TODO: Remove `/ 1024` in 0.4.10
return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft}
def login(self, user, data, req):
req.cj.setCookie("unrestrict.li", "lang", "EN")
- html = req.load("https://unrestrict.li/sign_in")
+ html = req.load("https://unrestrict.li/sign_in", decode=True)
if 'solvemedia' in html:
self.logError(_("A Captcha is required. Go to http://unrestrict.li/sign_in and login, then retry"))
@@ -38,7 +38,7 @@ class UnrestrictLi(Account):
post_data = {"username": user, "password": data['password'],
"remember_me": "remember", "signin": "Sign in"}
- html = req.load("https://unrestrict.li/sign_in", post=post_data)
+ html = req.load("https://unrestrict.li/sign_in", post=post_data, decode=True)
if 'sign_out' not in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/UploadableCh.py b/module/plugins/accounts/UploadableCh.py
new file mode 100644
index 000000000..86ae5dd17
--- /dev/null
+++ b/module/plugins/accounts/UploadableCh.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+
+from module.plugins.Account import Account
+
+
+class UploadableCh(Account):
+ __name__ = "UploadableCh"
+ __type__ = "account"
+ __version__ = "0.03"
+
+ __description__ = """Uploadable.ch account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("Sasch", "gsasch@gmail.com")]
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("http://www.uploadable.ch/login.php")
+
+ premium = '<a href="/logout.php"' in html
+ trafficleft = -1 if premium else None
+
+ return {'validuntil': None, 'trafficleft': trafficleft, 'premium': premium} #@TODO: validuntil
+
+
+ def login(self, user, data, req):
+ html = req.load("http://www.uploadable.ch/login.php",
+ post={'userName' : user,
+ 'userPassword' : data["password"],
+ 'autoLogin' : "1",
+ 'action__login': "normalLogin"},
+ decode=True)
+
+ if "Login failed" in html:
+ self.wrongPassword()
diff --git a/module/plugins/accounts/UploadedTo.py b/module/plugins/accounts/UploadedTo.py
index 91cdba2c1..3b0d957a5 100644
--- a/module/plugins/accounts/UploadedTo.py
+++ b/module/plugins/accounts/UploadedTo.py
@@ -9,16 +9,16 @@ from pyload.plugin.Account import Account
class UploadedTo(Account):
__name__ = "UploadedTo"
__type__ = "account"
- __version__ = "0.27"
+ __version__ = "0.30"
__description__ = """Uploaded.to account plugin"""
__license__ = "GPLv3"
- __authors__ = [("mkaay", "mkaay@mkaay.de")]
+ __authors__ = [("Walter Purcaro", "vuolter@gmail.com")]
PREMIUM_PATTERN = r'<em>Premium</em>'
- VALID_UNTIL_PATTERN = r'<td>Duration:</td>\s*<th>([^<]+)'
- TRAFFIC_LEFT_PATTERN = r'<th colspan="2"><b class="cB">([^<]+)'
+ VALID_UNTIL_PATTERN = r'<td>Duration:</td>\s*<th>(.+?)<'
+ TRAFFIC_LEFT_PATTERN = r'<b class="cB">(?P<S>[\d.,]+) (?P<U>[\w^_]+)'
def loadAccountInfo(self, user, req):
@@ -32,29 +32,40 @@ class UploadedTo(Account):
m = re.search(self.VALID_UNTIL_PATTERN, html, re.M)
if m:
- expiredate = m.group(1).strip()
+ expiredate = m.group(1).lower().strip()
if expiredate == "unlimited":
validuntil = -1
else:
- m = re.findall(r'(\d+) (Week|weeks|day|hour)', expiredate)
+ m = re.findall(r'(\d+) (week|day|hour)', expiredate)
if m:
validuntil = time()
for n, u in m:
- validuntil += int(n) * 60 * 60 * {'Week': 168, 'weeks': 168, 'day': 24, 'hour': 1}[u]
+ validuntil += float(n) * 60 * 60 * {'week': 168, 'day': 24, 'hour': 1}[u]
m = re.search(self.TRAFFIC_LEFT_PATTERN, html)
if m:
- trafficleft = self.parseTraffic(m.group(1).replace('.', ''))
+ traffic = m.groupdict()
+ size = traffic['S'].replace('.', '')
+ unit = traffic['U'].lower()
- return {'validuntil': validuntil, 'trafficleft': trafficleft, 'premium': premium}
+ if unit.startswith('t'): #@NOTE: Remove in 0.4.10
+ trafficleft = float(size.replace(',', '.')) / 1024
+ trafficleft *= 1 << 40
+ else:
+ trafficleft = self.parseTraffic(size + unit)
+
+ return {'validuntil' : validuntil,
+ 'trafficleft': trafficleft,
+ 'premium' : premium}
def login(self, user, data, req):
- req.cj.setCookie("uploaded.net", "lang", "en")
+ # req.cj.setCookie("uploaded.net", "lang", "en")
- page = req.load("http://uploaded.net/io/login",
- post={'id': user, 'pw': data['password'], '_': ""})
+ html = req.load("http://uploaded.net/io/login",
+ post={'id': user, 'pw': data['password'], '_': ""},
+ decode=True)
- if "User and password do not match" in page:
+ if '"err"' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/UploadheroCom.py b/module/plugins/accounts/UploadheroCom.py
index c7b05bc94..c73fc30f5 100644
--- a/module/plugins/accounts/UploadheroCom.py
+++ b/module/plugins/accounts/UploadheroCom.py
@@ -10,7 +10,7 @@ from pyload.plugin.Account import Account
class UploadheroCom(Account):
__name__ = "UploadheroCom"
__type__ = "account"
- __version__ = "0.20"
+ __version__ = "0.21"
__description__ = """Uploadhero.co account plugin"""
__license__ = "GPLv3"
@@ -21,10 +21,10 @@ class UploadheroCom(Account):
premium_pattern = re.compile('Il vous reste <span class="bleu">(\d+)</span> jours premium')
data = self.getAccountData(user)
- page = req.load("http://uploadhero.co/my-account")
+ html = req.load("http://uploadhero.co/my-account")
- if premium_pattern.search(page):
- end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1)))
+ if premium_pattern.search(html):
+ end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(html).group(1)))
end_date = time.mktime(future.timetuple())
account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True}
else:
@@ -34,8 +34,9 @@ class UploadheroCom(Account):
def login(self, user, data, req):
- page = req.load("http://uploadhero.co/lib/connexion.php",
- post={"pseudo_login": user, "password_login": data['password']})
+ html = req.load("http://uploadhero.co/lib/connexion.php",
+ post={"pseudo_login": user, "password_login": data['password']},
+ decode=True)
- if "mot de passe invalide" in page:
+ if "mot de passe invalide" in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/UptoboxCom.py b/module/plugins/accounts/UptoboxCom.py
index 2d0b49957..f7cb7a82e 100644
--- a/module/plugins/accounts/UptoboxCom.py
+++ b/module/plugins/accounts/UptoboxCom.py
@@ -6,7 +6,7 @@ from pyload.plugin.internal.XFSAccount import XFSAccount
class UptoboxCom(XFSAccount):
__name__ = "UptoboxCom"
__type__ = "account"
- __version__ = "0.07"
+ __version__ = "0.08"
__description__ = """DDLStorage.com account plugin"""
__license__ = "GPLv3"
@@ -15,3 +15,4 @@ class UptoboxCom(XFSAccount):
HOSTER_DOMAIN = "uptobox.com"
HOSTER_URL = "https://uptobox.com/"
+ LOGIN_URL = "https://login.uptobox.com/"
diff --git a/module/plugins/accounts/WebshareCz.py b/module/plugins/accounts/WebshareCz.py
new file mode 100644
index 000000000..f8e3eeb73
--- /dev/null
+++ b/module/plugins/accounts/WebshareCz.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from hashlib import md5, sha1
+from passlib.hash import md5_crypt
+from time import mktime, strptime, time
+
+from module.plugins.Account import Account
+
+
+class WebshareCz(Account):
+ __name__ = "WebshareCz"
+ __type__ = "account"
+ __version__ = "0.07"
+
+ __description__ = """Webshare.cz account plugin"""
+ __license__ = "GPLv3"
+ __authors__ = [("rush", "radek.senfeld@gmail.com")]
+
+
+ VALID_UNTIL_PATTERN = r'<vip_until>(.+)</vip_until>'
+
+ TRAFFIC_LEFT_PATTERN = r'<bytes>(.+)</bytes>'
+
+
+ def loadAccountInfo(self, user, req):
+ html = req.load("https://webshare.cz/api/user_data/",
+ post={'wst': self.infos['wst']},
+ decode=True)
+
+ self.logDebug("Response: " + html)
+
+ expiredate = re.search(self.VALID_UNTIL_PATTERN, html).group(1)
+ self.logDebug("Expire date: " + expiredate)
+
+ validuntil = mktime(strptime(expiredate, "%Y-%m-%d %H:%M:%S"))
+ trafficleft = self.parseTraffic(re.search(self.TRAFFIC_LEFT_PATTERN, html).group(1))
+ premium = validuntil > time()
+
+ return {'validuntil': validuntil, 'trafficleft': -1, 'premium': premium}
+
+
+ def login(self, user, data, req):
+ salt = req.load("https://webshare.cz/api/salt/",
+ post={'username_or_email': user,
+ 'wst' : ""},
+ decode=True)
+
+ if "<status>OK</status>" not in salt:
+ self.wrongPassword()
+
+ salt = re.search('<salt>(.+)</salt>', salt).group(1)
+ password = sha1(md5_crypt.encrypt(data["password"], salt=salt)).hexdigest()
+ digest = md5(user + ":Webshare:" + password).hexdigest()
+
+ login = req.load("https://webshare.cz/api/login/",
+ post={'digest' : digest,
+ 'keep_logged_in' : 1,
+ 'password' : password,
+ 'username_or_email': user,
+ 'wst' : ""},
+ decode=True)
+
+ if "<status>OK</status>" not in login:
+ self.wrongPassword()
+
+ self.infos['wst'] = re.search('<token>(.+)</token>', login).group(1)
diff --git a/module/plugins/accounts/XFileSharingPro.py b/module/plugins/accounts/XFileSharingPro.py
index 9d938c4c5..216af5385 100644
--- a/module/plugins/accounts/XFileSharingPro.py
+++ b/module/plugins/accounts/XFileSharingPro.py
@@ -6,7 +6,7 @@ from pyload.plugin.internal.XFSAccount import XFSAccount
class XFileSharingPro(XFSAccount):
__name__ = "XFileSharingPro"
__type__ = "account"
- __version__ = "0.05"
+ __version__ = "0.06"
__description__ = """XFileSharingPro multi-purpose account plugin"""
__license__ = "GPLv3"
@@ -27,4 +27,8 @@ class XFileSharingPro(XFSAccount):
def login(self, user, data, req):
if self.HOSTER_DOMAIN:
- return super(XFileSharingPro, self).login(user, data, req)
+ try:
+ return super(XFileSharingPro, self).login(user, data, req)
+ except Exception:
+ self.HOSTER_URL = self.HOSTER_URL.replace("www.", "")
+ return super(XFileSharingPro, self).login(user, data, req)
diff --git a/module/plugins/accounts/YibaishiwuCom.py b/module/plugins/accounts/YibaishiwuCom.py
index e169a5901..150b0d931 100644
--- a/module/plugins/accounts/YibaishiwuCom.py
+++ b/module/plugins/accounts/YibaishiwuCom.py
@@ -8,7 +8,7 @@ from pyload.plugin.Account import Account
class YibaishiwuCom(Account):
__name__ = "YibaishiwuCom"
__type__ = "account"
- __version__ = "0.01"
+ __version__ = "0.02"
__description__ = """115.com account plugin"""
__license__ = "GPLv3"
@@ -23,18 +23,18 @@ class YibaishiwuCom(Account):
html = req.load("http://115.com/", decode=True)
m = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S)
- premium = True if (m and 'is_vip: 1' in m.group(1)) else False
+ premium = True if m and 'is_vip: 1' in m.group(1) else False
validuntil = trafficleft = (-1 if m else 0)
return dict({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium})
def login(self, user, data, req):
- html = req.load('http://passport.115.com/?ac=login', post={
- "back": "http://www.115.com/",
- "goto": "http://115.com/",
- "login[account]": user,
- "login[passwd]": data['password']
- }, decode=True)
+ html = req.load("http://passport.115.com/?ac=login",
+ post={"back": "http://www.115.com/",
+ "goto": "http://115.com/",
+ "login[account]": user,
+ "login[passwd]": data['password']},
+ decode=True)
if not 'var USER_PERMISSION = {' in html:
self.wrongPassword()
diff --git a/module/plugins/accounts/ZeveraCom.py b/module/plugins/accounts/ZeveraCom.py
index 2eee62ac1..db23170f3 100644
--- a/module/plugins/accounts/ZeveraCom.py
+++ b/module/plugins/accounts/ZeveraCom.py
@@ -8,43 +8,65 @@ from pyload.plugin.Account import Account
class ZeveraCom(Account):
__name__ = "ZeveraCom"
__type__ = "account"
- __version__ = "0.21"
+ __version__ = "0.26"
__description__ = """Zevera.com account plugin"""
__license__ = "GPLv3"
- __authors__ = [("zoidberg", "zoidberg@mujmail.cz")]
+ __authors__ = [("zoidberg", "zoidberg@mujmail.cz"),
+ ("Walter Purcaro", "vuolter@gmail.com")]
+
+
+ HOSTER_DOMAIN = "zevera.com"
+
+
+ def __init__(self, manager, accounts): #@TODO: remove in 0.4.10
+ self.init()
+ return super(ZeveraCom, self).__init__(manager, accounts)
+
+
+ def init(self):
+ if not self.HOSTER_DOMAIN:
+ self.logError(_("Missing HOSTER_DOMAIN"))
+
+ if not hasattr(self, "API_URL"):
+ self.API_URL = "http://api.%s/jDownloader.ashx" % (self.HOSTER_DOMAIN or "")
def loadAccountInfo(self, user, req):
- data = self.getAPIData(req)
- if data == "No traffic":
- account_info = {"trafficleft": 0, "validuntil": 0, "premium": False}
- else:
- account_info = {
- "trafficleft": int(data['availabletodaytraffic']) * 1024,
- "validuntil": mktime(strptime(data['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S")),
- "premium": True
- }
- return account_info
+ validuntil = None
+ trafficleft = None
+ premium = False
+
+ api = self.api_response(req)
+
+ if "No trafic" not in api and api['endsubscriptiondate'] != "Expired!":
+ validuntil = mktime(strptime(api['endsubscriptiondate'], "%Y/%m/%d %H:%M:%S"))
+ trafficleft = float(api['availabletodaytraffic']) * 1024 if api['orondaytrafficlimit'] != '0' else -1
+ premium = True
+
+ return {'validuntil': validuntil, 'trafficleft': trafficleft, 'premium': premium}
def login(self, user, data, req):
- self.loginname = user
+ self.user = user
self.password = data['password']
- if self.getAPIData(req) == "No traffic":
+
+ if self.api_response(req) == "No trafic":
self.wrongPassword()
- def getAPIData(self, req, just_header=False, **kwargs):
- get_data = {
- 'cmd': 'accountinfo',
- 'login': self.loginname,
- 'pass': self.password
- }
+ def api_response(self, req, just_header=False, **kwargs):
+ get_data = {'cmd' : "accountinfo",
+ 'login': self.user,
+ 'pass' : self.password}
+
get_data.update(kwargs)
- res = req.load("http://www.zevera.com/jDownloader.ashx", get=get_data,
- decode=True, just_header=just_header)
+ res = req.load(self.API_URL,
+ get=get_data,
+ just_header=just_header,
+ decode=True)
+
self.logDebug(res)
if ':' in res: