diff options
| author | 2013-06-09 18:10:22 +0200 | |
|---|---|---|
| committer | 2013-06-09 18:10:23 +0200 | |
| commit | 16af85004c84d0d6c626b4f8424ce9647669a0c1 (patch) | |
| tree | 025d479862d376dbc17e934f4ed20031c8cd97d1 /pyload/plugins/accounts | |
| parent | adapted to jshint config (diff) | |
| download | pyload-16af85004c84d0d6c626b4f8424ce9647669a0c1.tar.xz | |
moved everything from module to pyload
Diffstat (limited to 'pyload/plugins/accounts')
62 files changed, 2724 insertions, 0 deletions
| diff --git a/pyload/plugins/accounts/AlldebridCom.py b/pyload/plugins/accounts/AlldebridCom.py new file mode 100644 index 000000000..baaa9d264 --- /dev/null +++ b/pyload/plugins/accounts/AlldebridCom.py @@ -0,0 +1,49 @@ +from module.plugins.Account import Account +import xml.dom.minidom as dom +from BeautifulSoup import BeautifulSoup +from time import time +import re +import urllib + +class AlldebridCom(Account): +    __name__ = "AlldebridCom" +    __version__ = "0.21" +    __type__ = "account" +    __description__ = """AllDebrid.com account plugin""" +    __author_name__ = ("Andy, Voigt") +    __author_mail__ = ("spamsales@online.de") + +    def loadAccountInfo(self, user, req): +        data = self.getAccountData(user) +        page = req.load("http://www.alldebrid.com/account/") +        soup=BeautifulSoup(page) +        #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.log.debug("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: +            data = self.getAccountData(user) +            page = req.load("http://www.alldebrid.com/api.php?action=info_user&login=%s&pw=%s" %  (user, data["password"])) +            self.log.debug(page) +            xml = dom.parseString(page) +            exp_time=time()+int(xml.getElementsByTagName("date")[0].childNodes[0].nodeValue)*86400 +        account_info = {"validuntil": exp_time, "trafficleft": -1} +        return account_info + +    def login(self, user, data, req):       +     +        urlparams = urllib.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() +             +        if "Invalid captcha" in page: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/BayfilesCom.py b/pyload/plugins/accounts/BayfilesCom.py new file mode 100644 index 000000000..0d036488b --- /dev/null +++ b/pyload/plugins/accounts/BayfilesCom.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +from module.common.json_layer import json_loads +import re +from time import time, mktime, strptime + +class BayfilesCom(Account): +    __name__ = "BayfilesCom" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """bayfiles.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    def loadAccountInfo(self, user, req): +        for i in range(2): +            response = json_loads(req.load("http://api.bayfiles.com/v1/account/info")) +            self.logDebug(response)             +            if not response["error"]:  +                break +            self.logWarning(response["error"]) +            self.relogin() +         +        return {"premium": bool(response['premium']), \ +                "trafficleft": -1, \ +                "validuntil": response['expires'] if response['expires'] >= int(time()) else -1} + +    def login(self, user, data, req): +        response = json_loads(req.load("http://api.bayfiles.com/v1/account/login/%s/%s" % (user, data["password"]))) +        self.logDebug(response) +        if response["error"]: +            self.logError(response["error"]) +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/BitshareCom.py b/pyload/plugins/accounts/BitshareCom.py new file mode 100644 index 000000000..a4f56e31c --- /dev/null +++ b/pyload/plugins/accounts/BitshareCom.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: pking +""" + +from module.plugins.Account import Account + +class BitshareCom(Account): +    __name__ = "BitshareCom" +    __version__ = "0.11" +    __type__ = "account" +    __description__ = """Bitshare account plugin""" +    __author_name__ = ("Paul King") + +    def loadAccountInfo(self, user, req): +        page = req.load("http://bitshare.com/mysettings.html") +     +        if "\"http://bitshare.com/myupgrade.html\">Free" in page: +            return {"validuntil": -1, "trafficleft":-1, "premium": False} + +        if not '<input type="checkbox" name="directdownload" checked="checked" />' in page: +            self.core.log.warning(_("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) +        if "login" in req.lastEffectiveURL: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/BoltsharingCom.py b/pyload/plugins/accounts/BoltsharingCom.py new file mode 100644 index 000000000..678591d1d --- /dev/null +++ b/pyload/plugins/accounts/BoltsharingCom.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class BoltsharingCom(XFSPAccount): +    __name__ = "BoltsharingCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """Boltsharing.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    MAIN_PAGE = "http://boltsharing.com/" diff --git a/pyload/plugins/accounts/CramitIn.py b/pyload/plugins/accounts/CramitIn.py new file mode 100644 index 000000000..182c9d647 --- /dev/null +++ b/pyload/plugins/accounts/CramitIn.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class CramitIn(XFSPAccount): +    __name__ = "CramitIn" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """cramit.in account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    MAIN_PAGE = "http://cramit.in/"
\ No newline at end of file diff --git a/pyload/plugins/accounts/CyberlockerCh.py b/pyload/plugins/accounts/CyberlockerCh.py new file mode 100644 index 000000000..31e0c3e24 --- /dev/null +++ b/pyload/plugins/accounts/CyberlockerCh.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount +from module.plugins.internal.SimpleHoster import parseHtmlForm + +class CyberlockerCh(XFSPAccount): +    __name__ = "CyberlockerCh" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """CyberlockerCh account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    MAIN_PAGE = "http://cyberlocker.ch/" + +    def login(self, user, data, req): +        html = req.load(self.MAIN_PAGE + 'login.html', decode = True) + +        action, inputs = parseHtmlForm('name="FL"', html) +        if not inputs: +            inputs = {"op": "login", +                      "redirect": self.MAIN_PAGE} + +        inputs.update({"login": user, +                       "password": data['password']}) + +        # Without this a 403 Forbidden is returned +        req.http.lastURL = self.MAIN_PAGE + 'login.html' +        html = req.load(self.MAIN_PAGE, post = inputs, decode = True) + +        if 'Incorrect Login or Password' in html or '>Error<' in html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/CzshareCom.py b/pyload/plugins/accounts/CzshareCom.py new file mode 100644 index 000000000..7b1a8edc5 --- /dev/null +++ b/pyload/plugins/accounts/CzshareCom.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from time import mktime, strptime +import re + +from module.plugins.Account import Account + + +class CzshareCom(Account): +    __name__ = "CzshareCom" +    __version__ = "0.13" +    __type__ = "account" +    __description__ = """czshare.com account plugin""" +    __author_name__ = ("zoidberg", "stickell") +    __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + +    CREDIT_LEFT_PATTERN = r'<tr class="active">\s*<td>([0-9 ,]+) (KiB|MiB|GiB)</td>\s*<td>([^<]*)</td>\s*</tr>' + +    def loadAccountInfo(self, user, req): +        html = req.load("http://czshare.com/prehled_kreditu/") + +        found = re.search(self.CREDIT_LEFT_PATTERN, html) +        if not found: +            return {"validuntil": 0, "trafficleft": 0} +        else: +            credits = float(found.group(1).replace(' ', '').replace(',', '.')) +            credits = credits * 1024 ** {'KiB': 0, 'MiB': 1, 'GiB': 2}[found.group(2)] +            validuntil = mktime(strptime(found.group(3), '%d.%m.%y %H:%M')) +            return {"validuntil": validuntil, "trafficleft": credits} + +    def login(self, user, data, req): + +        html = req.load('https://czshare.com/index.php', post={ +            "Prihlasit": "Prihlasit", +            "login-password": data["password"], +            "login-name": user +        }) + +        if '<div class="login' in html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/DdlstorageCom.py b/pyload/plugins/accounts/DdlstorageCom.py new file mode 100644 index 000000000..01d165f23 --- /dev/null +++ b/pyload/plugins/accounts/DdlstorageCom.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class DdlstorageCom(XFSPAccount): +    __name__ = "DdlstorageCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """DDLStorage.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    MAIN_PAGE = "http://ddlstorage.com/"
\ No newline at end of file diff --git a/pyload/plugins/accounts/DebridItaliaCom.py b/pyload/plugins/accounts/DebridItaliaCom.py new file mode 100644 index 000000000..91dd3787f --- /dev/null +++ b/pyload/plugins/accounts/DebridItaliaCom.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +############################################################################ +# This program is free software: you can redistribute it and/or modify     # +# it under the terms of the GNU Affero General Public License as           # +# published by the Free Software Foundation, either version 3 of the       # +# License, or (at your option) any later version.                          # +#                                                                          # +# This program is distributed in the hope that it will be useful,          # +# but WITHOUT ANY WARRANTY; without even the implied warranty of           # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            # +# GNU Affero General Public License for more details.                      # +#                                                                          # +# You should have received a copy of the GNU Affero General Public License # +# along with this program.  If not, see <http://www.gnu.org/licenses/>.    # +############################################################################ + +import re +import _strptime +import time + +from module.plugins.Account import Account + + +class DebridItaliaCom(Account): +    __name__ = "DebridItaliaCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """debriditalia.com account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    WALID_UNTIL_PATTERN = r"Premium valid till: (?P<D>[^|]+) \|" + +    def loadAccountInfo(self, user, req): +        if 'Account premium not activated' in self.html: +            return {"premium": False, "validuntil": None, "trafficleft": None} + +        m = re.search(self.WALID_UNTIL_PATTERN, self.html) +        if m: +            validuntil = int(time.mktime(time.strptime(m.group('D'), "%d/%m/%Y %H:%M"))) +            return {"premium": True, "validuntil": validuntil, "trafficleft": -1} +        else: +            self.logError('Unable to retrieve account information - Plugin may be out of date') + +    def login(self, user, data, req): +        self.html = req.load("http://debriditalia.com/login.php", +                             get={"u": user, "p": data["password"]}) +        if 'NO' in self.html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/DepositfilesCom.py b/pyload/plugins/accounts/DepositfilesCom.py new file mode 100644 index 000000000..b0730de8e --- /dev/null +++ b/pyload/plugins/accounts/DepositfilesCom.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account +import re +from time import strptime, mktime + +class DepositfilesCom(Account): +    __name__ = "DepositfilesCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """depositfiles.com account plugin""" +    __author_name__ = ("mkaay") +    __author_mail__ = ("mkaay@mkaay.de") +     +    def loadAccountInfo(self, user, req): + +        src = req.load("http://depositfiles.com/de/gold/") +        validuntil = re.search("noch den Gold-Zugriff: <b>(.*?)</b></div>", src).group(1) + +        validuntil = int(mktime(strptime(validuntil, "%Y-%m-%d %H:%M:%S"))) + +        tmp = {"validuntil":validuntil, "trafficleft":-1} +        return tmp +     +    def login(self, user, data, req): + +        req.load("http://depositfiles.com/de/gold/payment.php") +        src = req.load("http://depositfiles.com/de/login.php", get={"return": "/de/gold/payment.php"}, post={"login": user, "password": data["password"]}) +        if r'<div class="error_message">Sie haben eine falsche Benutzername-Passwort-Kombination verwendet.</div>' in src: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/EasybytezCom.py b/pyload/plugins/accounts/EasybytezCom.py new file mode 100644 index 000000000..ba7829b83 --- /dev/null +++ b/pyload/plugins/accounts/EasybytezCom.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +from module.plugins.internal.SimpleHoster import parseHtmlForm +import re +from module.utils import parseFileSize +from time import mktime, strptime + +class EasybytezCom(Account): +    __name__ = "EasybytezCom" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """EasyBytez.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    VALID_UNTIL_PATTERN = r'<TR><TD>Premium account expire:</TD><TD><b>([^<]+)</b>' +    TRAFFIC_LEFT_PATTERN = r'<TR><TD>Traffic available today:</TD><TD><b>(?P<S>[^<]+)</b>' + +    def loadAccountInfo(self, user, req):       +        html = req.load("http://www.easybytez.com/?op=my_account", decode = True) +         +        validuntil = trafficleft = None +        premium = False +         +        found = re.search(self.VALID_UNTIL_PATTERN, html) +        if found: +            premium = True +            trafficleft = -1 +            try: +                self.logDebug(found.group(1)) +                validuntil = mktime(strptime(found.group(1), "%d %B %Y")) +            except Exception, e: +                self.logError(e) +        else: +            found = re.search(self.TRAFFIC_LEFT_PATTERN, html) +            if found: +                trafficleft = found.group(1) +                if "Unlimited" in trafficleft: +                    premium = True +                else: +                    trafficleft = parseFileSize(trafficleft) / 1024                            +         +        return ({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}) +     +    def login(self, user, data, req): +        html = req.load('http://www.easybytez.com/login.html', decode = True) +        action, inputs = parseHtmlForm('name="FL"', html) +        inputs.update({"login": user, +                       "password": data['password'], +                       "redirect": "http://www.easybytez.com/"}) +         +        html = req.load(action, post = inputs, decode = True) +         +        if 'Incorrect Login or Password' in html or '>Error<' in html:           +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/EgoFilesCom.py b/pyload/plugins/accounts/EgoFilesCom.py new file mode 100644 index 000000000..da1ed03ad --- /dev/null +++ b/pyload/plugins/accounts/EgoFilesCom.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account +import re +import time +from module.utils import parseFileSize + +class EgoFilesCom(Account): +    __name__ = "EgoFilesCom" +    __version__ = "0.2" +    __type__ = "account" +    __description__ = """egofiles.com account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    PREMIUM_ACCOUNT_PATTERN = '<br/>\s*Premium: (?P<P>[^/]*) / Traffic left: (?P<T>[\d.]*) (?P<U>\w*)\s*\\n\s*<br/>' + +    def loadAccountInfo(self, user, req): +        html = req.load("http://egofiles.com") +        if 'You are logged as a Free User' in html: +            return {"premium": False, "validuntil": None, "trafficleft": None} + +        m = re.search(self.PREMIUM_ACCOUNT_PATTERN, html) +        if m: +            validuntil = int(time.mktime(time.strptime(m.group('P'), "%Y-%m-%d %H:%M:%S"))) +            trafficleft = parseFileSize(m.group('T'), m.group('U')) / 1024 +            return {"premium": True, "validuntil": validuntil, "trafficleft": trafficleft} +        else: +            self.logError('Unable to retrieve account information - Plugin may be out of date') + +    def login(self, user, data, req): +        # Set English language +        req.load("https://egofiles.com/ajax/lang.php?lang=en", just_header=True) + +        html = req.load("http://egofiles.com/ajax/register.php", +                        post={"log": 1, +                              "loginV": user, +                              "passV": data["password"]}) +        if 'Login successful' not in html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/EuroshareEu.py b/pyload/plugins/accounts/EuroshareEu.py new file mode 100644 index 000000000..42967d975 --- /dev/null +++ b/pyload/plugins/accounts/EuroshareEu.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +from time import mktime, strptime +from string import replace +import re + +class EuroshareEu(Account): +    __name__ = "EuroshareEu" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """euroshare.eu account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    def loadAccountInfo(self, user, req): +        self.relogin(user) +        html = req.load("http://euroshare.eu/customer-zone/settings/") +         +        found = re.search('id="input_expire_date" value="(\d+\.\d+\.\d+ \d+:\d+)"', html) +        if found is None: +            premium, validuntil = False, -1 +        else: +            premium = True +            validuntil = mktime(strptime(found.group(1), "%d.%m.%Y %H:%M")) +         +        return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} +     +    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) +                 +        if u">Nesprávne prihlasovacie meno alebo heslo" in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/FastshareCz.py b/pyload/plugins/accounts/FastshareCz.py new file mode 100644 index 000000000..69bbb0827 --- /dev/null +++ b/pyload/plugins/accounts/FastshareCz.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +import re +from module.plugins.Account import Account +from module.utils import parseFileSize + + +class FastshareCz(Account): +    __name__ = "FastshareCz" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """fastshare.cz account plugin""" +    __author_name__ = ("zoidberg", "stickell") +    __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") + +    def loadAccountInfo(self, user, req): +        html = req.load("http://www.fastshare.cz/user", decode=True) + +        found = re.search(r'(?:Kredit|Credit)\s*: </td><td>(.+?) ', html) +        if found: +            trafficleft = parseFileSize(found.group(1)) / 1024 +            premium = True if trafficleft else False +        else: +            trafficleft = None +            premium = False + +        return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} + +    def login(self, user, data, req): +        req.load('http://www.fastshare.cz/login')  # Do not remove or it will not login +        html = req.load('http://www.fastshare.cz/sql.php', post={ +            "heslo": data['password'], +            "login": user +        }, decode=True) + +        if u'>Špatné uživatelské jméno nebo heslo.<' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/FilebeerInfo.py b/pyload/plugins/accounts/FilebeerInfo.py new file mode 100644 index 000000000..40ab70519 --- /dev/null +++ b/pyload/plugins/accounts/FilebeerInfo.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +import re +from time import mktime, strptime +from module.plugins.Account import Account +from module.utils import parseFileSize + +class FilebeerInfo(Account): +    __name__ = "FilebeerInfo" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """filebeer.info account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    VALID_UNTIL_PATTERN = r'Reverts To Free Account:\s</td>\s*<td>\s*(.*?)\s*</td>' +     +    def loadAccountInfo(self, user, req): +        html = req.load("http://filebeer.info/upgrade.php", decode = True)         +        premium = not 'Free User </td>' in html +                 +        validuntil = None +        if premium: +            try: +                validuntil = mktime(strptime(re.search(self.VALID_UNTIL_PATTERN, html).group(1), "%d/%m/%Y %H:%M:%S"))  +            except Exception, e: +                self.logError("Unable to parse account info", e) + +        return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} +     +    def login(self, user, data, req): +        html = req.load('http://filebeer.info/login.php', post = { +            "submit": 'Login', +            "loginPassword": data['password'], +            "loginUsername": user, +            "submitme": '1' +            }, decode = True) +             +        if "<ul class='pageErrors'>" in html or ">Your username and password are invalid<" in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/FilecloudIo.py b/pyload/plugins/accounts/FilecloudIo.py new file mode 100644 index 000000000..cf9f92209 --- /dev/null +++ b/pyload/plugins/accounts/FilecloudIo.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account + +class FilecloudIo(Account): +    __name__ = "FilecloudIo" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """FilecloudIo account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +         +    def loadAccountInfo(self, user, req):                            +        return ({"validuntil": -1, "trafficleft": -1, "premium": False}) +     +    def login(self, user, data, req): +        req.cj.setCookie("secure.filecloud.io", "lang", "en") +        html = req.load('https://secure.filecloud.io/user-login.html') +         +        if not hasattr(self, "form_data"): +            self.form_data = {} +                        +        self.form_data["username"] = user +        self.form_data["password"] = data['password'] +     +        html = req.load('https://secure.filecloud.io/user-login_p.html', +                    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 = {} +            
\ No newline at end of file diff --git a/pyload/plugins/accounts/FilefactoryCom.py b/pyload/plugins/accounts/FilefactoryCom.py new file mode 100644 index 000000000..8e163e2f6 --- /dev/null +++ b/pyload/plugins/accounts/FilefactoryCom.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +from time import mktime, strptime + +class FilefactoryCom(Account): +    __name__ = "FilefactoryCom" +    __version__ = "0.13" +    __type__ = "account" +    __description__ = """filefactory.com account plugin""" +    __author_name__ = ("zoidberg", "stickell") +    __author_mail__ = ("zoidberg@mujmail.cz", "l.stickell@yahoo.it") +     +    ACCOUNT_INFO_PATTERN = r'<time datetime="([\d-]+)">' + +    def loadAccountInfo(self, user, req):       +        html = req.load("http://www.filefactory.com/member/") +             +        found = re.search(self.ACCOUNT_INFO_PATTERN, html) +        if found: +            premium = True +            validuntil = mktime(strptime(found.group(1),"%Y-%m-%d")) +        else: +            premium = False +            validuntil = -1    + +        return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + +    def login(self, user, data, req): +        html = req.load("http://www.filefactory.com/member/login.php", post={ +            "email": user,  +            "password": data["password"], +            "redirect": "/"}) +             +        if '/member/login.php?err=1' in req.http.header: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/FilejungleCom.py b/pyload/plugins/accounts/FilejungleCom.py new file mode 100644 index 000000000..8ac25c201 --- /dev/null +++ b/pyload/plugins/accounts/FilejungleCom.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +from time import mktime, strptime + +class FilejungleCom(Account): +    __name__ = "FilejungleCom" +    __version__ = "0.11" +    __type__ = "account" +    __description__ = """filejungle.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    login_timeout = 60 +     +    URL = "http://filejungle.com/" +    TRAFFIC_LEFT_PATTERN = r'"/extend_premium\.php">Until (\d+ [A-Za-z]+ \d+)<br' +    LOGIN_FAILED_PATTERN = r'<span htmlfor="loginUser(Name|Password)" generated="true" class="fail_info">' + +    def loadAccountInfo(self, user, req): +        html = req.load(self.URL + "dashboard.php") +        found = re.search(self.TRAFFIC_LEFT_PATTERN, html) +        if found: +            premium = True +            validuntil = mktime(strptime(found.group(1), "%d %b %Y")) +        else: +            premium = False  +            validuntil = -1 + +        return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + +    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": ""}) +         +        if re.search(self.LOGIN_FAILED_PATTERN, html): +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/FilerioCom.py b/pyload/plugins/accounts/FilerioCom.py new file mode 100644 index 000000000..feacacaf5 --- /dev/null +++ b/pyload/plugins/accounts/FilerioCom.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class FilerioCom(XFSPAccount): +    __name__ = "FilerioCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """FileRio.in account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    MAIN_PAGE = "http://filerio.in/"
\ No newline at end of file diff --git a/pyload/plugins/accounts/FilesMailRu.py b/pyload/plugins/accounts/FilesMailRu.py new file mode 100644 index 000000000..98fe13248 --- /dev/null +++ b/pyload/plugins/accounts/FilesMailRu.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: RaNaN +""" + +from module.plugins.Account import Account +import re +from time import time + +class FilesMailRu(Account): +    __name__ = "FilesMailRu" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """filesmail.ru account plugin""" +    __author_name__ = ("RaNaN") +    __author_mail__ = ("RaNaN@pyload.org") + +    def loadAccountInfo(self, user, req): +        return {"validuntil": None, "trafficleft": None} +     +    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) + +        if "Неверное имя пользователя или пароль" in page: # @TODO seems not to work +            self.wrongPassword() diff --git a/pyload/plugins/accounts/FileserveCom.py b/pyload/plugins/accounts/FileserveCom.py new file mode 100644 index 000000000..5e5068f22 --- /dev/null +++ b/pyload/plugins/accounts/FileserveCom.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from time import mktime, strptime + +from module.plugins.Account import Account +from module.common.json_layer import json_loads + +class FileserveCom(Account): +    __name__ = "FileserveCom" +    __version__ = "0.2" +    __type__ = "account" +    __description__ = """fileserve.com account plugin""" +    __author_name__ = ("mkaay") +    __author_mail__ = ("mkaay@mkaay.de") + +    def loadAccountInfo(self, user, req): +        data = self.getAccountData(user) + +        page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data["password"], +                                                                     "submit": "Submit+Query"}) +        res = json_loads(page) + +        if res["type"] == "premium": +            validuntil = mktime(strptime(res["expireTime"], "%Y-%m-%d %H:%M:%S")) +            return {"trafficleft": res["traffic"], "validuntil": validuntil} +        else: +            return {"premium": False, "trafficleft": None, "validuntil": None} + + +    def login(self, user, data, req): +        page = req.load("http://app.fileserve.com/api/login/", post={"username": user, "password": data["password"], +                                                                     "submit": "Submit+Query"}) +        res = json_loads(page) + +        if not res["type"]: +            self.wrongPassword() + +        #login at fileserv page +        req.load("http://www.fileserve.com/login.php", +                 post={"loginUserName": user, "loginUserPassword": data["password"], "autoLogin": "checked", +                       "loginFormSubmit": "Login"}) diff --git a/pyload/plugins/accounts/FourSharedCom.py b/pyload/plugins/accounts/FourSharedCom.py new file mode 100644 index 000000000..bd3820277 --- /dev/null +++ b/pyload/plugins/accounts/FourSharedCom.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +from module.common.json_layer import json_loads + +class FourSharedCom(Account): +    __name__ = "FourSharedCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """FourSharedCom account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    def loadAccountInfo(self, user, req):                            +        #fixme +        return ({"validuntil": -1, "trafficleft": -1, "premium": False}) +     +    def login(self, user, data, req): +        req.cj.setCookie("www.4shared.com", "4langcookie", "en") +        response = req.load('http://www.4shared.com/login', +                            post = {"login": user, +                                    "password": data['password'], +                                    "remember": "false", +                                    "doNotRedirect": "true"}) +        self.logDebug(response)  +        response = json_loads(response) +         +        if not "ok" in response or response['ok'] != True: +            if "rejectReason" in response and response['rejectReason'] != True: +                self.logError(response['rejectReason'])       +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/FreakshareCom.py b/pyload/plugins/accounts/FreakshareCom.py new file mode 100644 index 000000000..732f9e203 --- /dev/null +++ b/pyload/plugins/accounts/FreakshareCom.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: RaNaN +""" +import re +from time import strptime, mktime + +from module.plugins.Account import Account + +class FreakshareCom(Account): +    __name__ = "FreakshareCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """freakshare.com account plugin""" +    __author_name__ = ("RaNaN") +    __author_mail__ = ("RaNaN@pyload.org") + +    def loadAccountInfo(self, user, req): +        page = req.load("http://freakshare.com/") + +        validuntil = r"ltig bis:</td>\s*<td><b>([0-9 \-:.]+)</b></td>" +        validuntil = re.search(validuntil, page, re.MULTILINE) +        validuntil = validuntil.group(1).strip() +        validuntil = mktime(strptime(validuntil, "%d.%m.%Y - %H:%M")) + +        traffic = r"Traffic verbleibend:</td>\s*<td>([^<]+)" +        traffic = re.search(traffic, page, re.MULTILINE) +        traffic = traffic.group(1).strip() +        traffic = self.parseTraffic(traffic) + +        return {"validuntil": validuntil, "trafficleft": traffic} + +    def login(self, user, data, req): +        page = req.load("http://freakshare.com/login.html", None, { "submit" : "Login", "user" : user, "pass" : data['password']}, cookies=True) + +        if "Falsche Logindaten!" in page or "Wrong Username or Password!" in page: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/FshareVn.py b/pyload/plugins/accounts/FshareVn.py new file mode 100644 index 000000000..9b22cbafb --- /dev/null +++ b/pyload/plugins/accounts/FshareVn.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: zoidberg +""" + +from module.plugins.Account import Account +from time import mktime, strptime +from pycurl import REFERER +import re + +class FshareVn(Account): +    __name__ = "FshareVn" +    __version__ = "0.04" +    __type__ = "account" +    __description__ = """fshare.vn account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    VALID_UNTIL_PATTERN = ur'<dt>Thời hạn dùng:</dt>\s*<dd>([^<]+)</dd>' +    TRAFFIC_LEFT_PATTERN = ur'<dt>Tổng Dung Lượng Tài Khoản</dt>\s*<dd[^>]*>([0-9.]+) ([kKMG])B</dd>' +    DIRECT_DOWNLOAD_PATTERN = ur'<input type="checkbox"\s*([^=>]*)[^>]*/>Kích hoạt download trực tiếp</dt>' + +    def loadAccountInfo(self, user, req): +        html = req.load("http://www.fshare.vn/account_info.php", decode = True) +        found = re.search(self.VALID_UNTIL_PATTERN, html) +        if found: +            premium = True +            validuntil = mktime(strptime(found.group(1), '%I:%M:%S %p %d-%m-%Y')) +            found = re.search(self.TRAFFIC_LEFT_PATTERN, html) +            trafficleft = float(found.group(1)) * 1024 ** {'k': 0, 'K': 0, 'M': 1, 'G': 2}[found.group(2)] if found else 0 +        else: +            premium = False +            validuntil = None +            trafficleft = None + +        return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + +    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" : "https://www.fshare.vn/login.php" +            }, referer = True, decode = True) + +        if not '<img alt="VIP"' in html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/Ftp.py b/pyload/plugins/accounts/Ftp.py new file mode 100644 index 000000000..9c1081662 --- /dev/null +++ b/pyload/plugins/accounts/Ftp.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account + +class Ftp(Account): +    __name__ = "Ftp" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """Ftp dummy account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    login_timeout = info_threshold = 1000000
\ No newline at end of file diff --git a/pyload/plugins/accounts/HellshareCz.py b/pyload/plugins/accounts/HellshareCz.py new file mode 100644 index 000000000..c7a918dec --- /dev/null +++ b/pyload/plugins/accounts/HellshareCz.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +import time + +class HellshareCz(Account): +    __name__ = "HellshareCz" +    __version__ = "0.14" +    __type__ = "account" +    __description__ = """hellshare.cz account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    CREDIT_LEFT_PATTERN = r'<div class="credit-link">\s*<table>\s*<tr>\s*<th>(\d+|\d\d\.\d\d\.)</th>' + +    def loadAccountInfo(self, user, req): +        self.relogin(user) +        html = req.load("http://www.hellshare.com/") + +        found = re.search(self.CREDIT_LEFT_PATTERN, html) +        if found is None: +            trafficleft = None +            validuntil = None +            premium = False +        else: +            credit = found.group(1) +            premium = True +            try: +                if "." in credit: +                    #Time-based account +                    vt = [int(x) for x in credit.split('.')[:2]] +                    lt = time.localtime() +                    year = lt.tm_year + int(vt[1] < lt.tm_mon or (vt[1] == lt.tm_mon and vt[0] < lt.tm_mday)) +                    validuntil = time.mktime(time.strptime("%s%d 23:59:59" % (credit,year), "%d.%m.%Y %H:%M:%S"))  +                    trafficleft = -1 +                else: +                    #Traffic-based account +                    trafficleft = int(credit) * 1024 +                    validuntil = -1 +            except Exception, e: +                self.logError('Unable to parse credit info', e) +                validuntil = -1 +                trafficleft = -1 + +        return {"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium} + +    def login(self, user, data, req): +        html = req.load('http://www.hellshare.com/') +        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) + +        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" +                }) + +        if "<p>You input a wrong user name or wrong password</p>" in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/HellspyCz.py b/pyload/plugins/accounts/HellspyCz.py new file mode 100644 index 000000000..5f14a093e --- /dev/null +++ b/pyload/plugins/accounts/HellspyCz.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +import string + +class HellspyCz(Account): +    __name__ = "HellspyCz" +    __version__ = "0.2" +    __type__ = "account" +    __description__ = """hellspy.cz account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    CREDIT_LEFT_PATTERN = r'<strong>Credits: </strong>\s*(\d+)' +    WRONG_PASSWORD_PATTERN = r'<p class="block-error-3 marg-tb-050">\s*Wrong user or password was entered<br />' + +    phpsessid = '' + +    def loadAccountInfo(self, user, req): +        cj = self.getAccountCookies(user) +        cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid) + +        html = req.load("http://www.hellspy.com/") + +        found = re.search(self.CREDIT_LEFT_PATTERN, html) +        if found is None: +            credits = 0 +        else: +            credits = int(found.group(1)) * 1024 + +        return {"validuntil": -1, "trafficleft": credits} + +    def login(self, user, data,req): +        header = req.load('http://www.hellspy.com/', just_header = True) +        self.phpsessid = re.search(r'PHPSESSID=(\w+)', header).group(1)        +        self.logDebug("PHPSESSID:" + self.phpsessid) +         +        html = req.load("http://www.hellspy.com/--%s-" % self.phpsessid) + +        html = req.load("http://www.hell-share.com/user/login/?do=apiLoginForm-submit&api_hash=hellspy_iq&user_hash=%s" % self.phpsessid, post={ +                "login": "1", +                "password": data["password"], +                "username": user, +                "redir_url":	'http://www.hellspy.com/?do=loginBox-login', +                "permanent_login": "1" +                }) + +        cj = self.getAccountCookies(user) +        cj.setCookie(".hellspy.com", "PHPSESSID", self.phpsessid) + +        if not re.search(self.CREDIT_LEFT_PATTERN, html): +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/HotfileCom.py b/pyload/plugins/accounts/HotfileCom.py new file mode 100644 index 000000000..23e42dacf --- /dev/null +++ b/pyload/plugins/accounts/HotfileCom.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay, JoKoT3 +""" + +from module.plugins.Account import Account +from time import strptime, mktime +import hashlib + +class HotfileCom(Account): +    __name__ = "HotfileCom" +    __version__ = "0.2" +    __type__ = "account" +    __description__ = """hotfile.com account plugin""" +    __author_name__ = ("mkaay","JoKoT3") +    __author_mail__ = ("mkaay@mkaay.de","jokot3@gmail.com") +     +    def loadAccountInfo(self, user, req): +        resp = self.apiCall("getuserinfo", user=user) +        if resp.startswith("."): +            self.core.debug("HotfileCom API Error: %s" % resp) +            raise Exception +        info = {} +        for p in resp.split("&"): +            key, value = p.split("=") +            info[key] = value + +        if info['is_premium'] == '1': +            info["premium_until"] = info["premium_until"].replace("T"," ") +            zone = info["premium_until"][19:] +            info["premium_until"] = info["premium_until"][:19] +            zone = int(zone[:3]) +             +            validuntil = int(mktime(strptime(info["premium_until"], "%Y-%m-%d %H:%M:%S"))) + (zone*3600) +            tmp = {"validuntil":validuntil, "trafficleft":-1, "premium":True} + +        elif info['is_premium'] == '0': +            tmp = {"premium":False} +         +        return tmp +     +    def apiCall(self, method, post={}, user=None): +        if user: +            data = self.getAccountData(user) +        else: +            user, data = self.selectAccount() +         +        req = self.getAccountRequest(user) +     +        digest = req.load("http://api.hotfile.com/", post={"action":"getdigest"}) +        h = hashlib.md5() +        h.update(data["password"]) +        hp = h.hexdigest() +        h = hashlib.md5() +        h.update(hp) +        h.update(digest) +        pwhash = h.hexdigest() +         +        post.update({"action": method}) +        post.update({"username":user, "passwordmd5dig":pwhash, "digest":digest}) +        resp = req.load("http://api.hotfile.com/", post=post) +        req.close() +        return resp +     +    def login(self, user, data, req): +        cj = self.getAccountCookies(user) +        cj.setCookie("hotfile.com", "lang", "en") +        req.load("http://hotfile.com/", cookies=True) +        page = req.load("http://hotfile.com/login.php", post={"returnto": "/", "user": user, "pass": data["password"]}, cookies=True) + +        if "Bad username/password" in page: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/Http.py b/pyload/plugins/accounts/Http.py new file mode 100644 index 000000000..805d19900 --- /dev/null +++ b/pyload/plugins/accounts/Http.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account + +class Http(Account): +    __name__ = "Http" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """Http dummy account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    login_timeout = info_threshold = 1000000
\ No newline at end of file diff --git a/pyload/plugins/accounts/MegasharesCom.py b/pyload/plugins/accounts/MegasharesCom.py new file mode 100644 index 000000000..91601fc95 --- /dev/null +++ b/pyload/plugins/accounts/MegasharesCom.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account +import re +from time import mktime, strptime + +class MegasharesCom(Account): +    __name__ = "MegasharesCom" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """megashares.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    VALID_UNTIL_PATTERN = r'<p class="premium_info_box">Period Ends: (\w{3} \d{1,2}, \d{4})</p>' +     +    def loadAccountInfo(self, user, req): +        #self.relogin(user) +        html = req.load("http://d01.megashares.com/myms.php", decode = True) +                     +        premium = False if '>Premium Upgrade<' in html else True +         +        validuntil = trafficleft = -1 +        try:              +            timestr = re.search(self.VALID_UNTIL_PATTERN, html).group(1) +            self.logDebug(timestr) +            validuntil = mktime(strptime(timestr, "%b %d, %Y")) +        except Exception, e: +            self.logError(e)                           +          +        return {"validuntil": validuntil, "trafficleft": -1, "premium": premium} +     +    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) +         +        if not '<span class="b ml">%s</span>' % user in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/MultiDebridCom.py b/pyload/plugins/accounts/MultiDebridCom.py new file mode 100644 index 000000000..904be5ee7 --- /dev/null +++ b/pyload/plugins/accounts/MultiDebridCom.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +############################################################################ +# This program is free software: you can redistribute it and/or modify     # +# it under the terms of the GNU Affero General Public License as           # +# published by the Free Software Foundation, either version 3 of the       # +# License, or (at your option) any later version.                          # +#                                                                          # +# This program is distributed in the hope that it will be useful,          # +# but WITHOUT ANY WARRANTY; without even the implied warranty of           # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            # +# GNU Affero General Public License for more details.                      # +#                                                                          # +# You should have received a copy of the GNU Affero General Public License # +# along with this program.  If not, see <http://www.gnu.org/licenses/>.    # +############################################################################ + +from time import time + +from module.plugins.Account import Account +from module.common.json_layer import json_loads + + +class MultiDebridCom(Account): +    __name__ = "MultiDebridCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """Multi-debrid.com account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    def loadAccountInfo(self, user, req): +        if 'days_left' in self.json_data: +            validuntil = int(time() + self.json_data['days_left'] * 86400) +            return {"premium": True, "validuntil": validuntil, "trafficleft": -1} +        else: +            self.logError('Unable to get account information') + +    def login(self, user, data, req): +        # Password to use is the API-Password written in http://multi-debrid.com/myaccount +        self.html = req.load("http://multi-debrid.com/api.php", +                             get={"user": user, "pass": data["password"]}) +        self.logDebug('JSON data: ' + self.html) +        self.json_data = json_loads(self.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') +            self.wrongPassword() diff --git a/pyload/plugins/accounts/MultishareCz.py b/pyload/plugins/accounts/MultishareCz.py new file mode 100644 index 000000000..39439cbbe --- /dev/null +++ b/pyload/plugins/accounts/MultishareCz.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +#from time import mktime, strptime +#from pycurl import REFERER +import re +from module.utils import parseFileSize + +class MultishareCz(Account): +    __name__ = "MultishareCz" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """multishare.cz account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    TRAFFIC_LEFT_PATTERN = r'<span class="profil-zvyrazneni">Kredit:</span>\s*<strong>(?P<S>[0-9,]+) (?P<U>\w+)</strong>' +    ACCOUNT_INFO_PATTERN = r'<input type="hidden" id="(u_ID|u_hash)" name="[^"]*" value="([^"]+)">' + +    def loadAccountInfo(self, user, req): +        #self.relogin(user) +        html = req.load("http://www.multishare.cz/profil/", decode = True) +                     +        found = re.search(self.TRAFFIC_LEFT_PATTERN, html)            +        trafficleft = parseFileSize(found.group('S'), found.group('U')) / 1024 if found else 0 +        self.premium = True if trafficleft else False  +         +        html = req.load("http://www.multishare.cz/", decode = True) +        mms_info = dict(re.findall(self.ACCOUNT_INFO_PATTERN, html)) + +        return dict(mms_info, **{"validuntil": -1, "trafficleft": trafficleft}) +     +    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) +         +        if '<div class="akce-chyba akce">' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/NetloadIn.py b/pyload/plugins/accounts/NetloadIn.py new file mode 100755 index 000000000..cef3e298b --- /dev/null +++ b/pyload/plugins/accounts/NetloadIn.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account +import re +from time import time + +class NetloadIn(Account): +    __name__ = "NetloadIn" +    __version__ = "0.22" +    __type__ = "account" +    __description__ = """netload.in account plugin""" +    __author_name__ = ("RaNaN", "CryNickSystems") +    __author_mail__ = ("RaNaN@pyload.org", "webmaster@pcProfil.de") + +    def loadAccountInfo(self, user, req): +        page = req.load("http://netload.in/index.php?id=2&lang=de") +        left = r">(\d+) (Tag|Tage), (\d+) Stunden<" +        left = re.search(left, page) +        if left: +            validuntil = time() + int(left.group(1)) * 24 * 60 * 60 + int(left.group(3)) * 60 * 60 +            trafficleft = -1 +            premium = True +        else: +            validuntil = None +            premium = False +            trafficleft = None +        return {"validuntil": validuntil, "trafficleft": trafficleft, "premium" : premium} +     +    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: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/Premium4Me.py b/pyload/plugins/accounts/Premium4Me.py new file mode 100644 index 000000000..de1538e4a --- /dev/null +++ b/pyload/plugins/accounts/Premium4Me.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from module.plugins.MultiHoster import MultiHoster + +class Premium4Me(MultiHoster): +    __name__ = "Premium4Me" +    __version__ = "0.10" +    __type__ = "account" +    __description__ = """Premium4.me account plugin""" +    __author_name__ = ("RaNaN", "zoidberg") +    __author_mail__ = ("RaNaN@pyload.org", "zoidberg@mujmail.cz") + +    def loadAccountInfo(self, req): +        traffic = req.load("http://premium4.me/api/traffic.php?authcode=%s" % self.authcode) + +        account_info = {"trafficleft": int(traffic) / 1024, "validuntil": -1} + +        return account_info + +    def login(self, req): +        self.authcode = req.load("http://premium4.me/api/getauthcode.php?username=%s&password=%s" % (self.loginname, self.password)).strip() + +        if "wrong username" in self.authcode: +            self.wrongPassword() +         +    def loadHosterList(self, req): +        page = req.load("http://premium4.me/api/hosters.php?authcode=%s" % self.authcode) +        return [x.strip() for x in page.replace("\"", "").split(";")]
\ No newline at end of file diff --git a/pyload/plugins/accounts/PremiumizeMe.py b/pyload/plugins/accounts/PremiumizeMe.py new file mode 100644 index 000000000..696fdf88f --- /dev/null +++ b/pyload/plugins/accounts/PremiumizeMe.py @@ -0,0 +1,44 @@ +from module.plugins.Account   import Account + +from module.common.json_layer import json_loads + +class PremiumizeMe(Account): +    __name__ = "PremiumizeMe" +    __version__ = "0.11" +    __type__ = "account" +    __description__ = """Premiumize.Me account plugin""" +     +    __author_name__ = ("Florian Franzen") +    __author_mail__ = ("FlorianFranzen@gmail.com") + +    def loadAccountInfo(self, user, req): +         +        # Get user data from premiumize.me +        status = self.getAccountStatus(user, req) +        self.logDebug(status) +             +        # Parse account info +        account_info = {"validuntil": float(status['result']['expires']), +                        "trafficleft": max(0, status['result']['trafficleft_bytes'] / 1024)} + +        if status['result']['type'] == 'free': +            account_info['premium'] = False + +        return account_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['status'] != 200: +            self.wrongPassword() + +     +    def getAccountStatus(self, user, req): +         +        # Use premiumize.me API v1 (see https://secure.premiumize.me/?show=api) to retrieve account info and return the parsed json answer +        answer = req.load("https://api.premiumize.me/pm-api/v1.php?method=accountstatus¶ms[login]=%s¶ms[pass]=%s" % (user, self.accounts[user]['password']))             +        return json_loads(answer) +         diff --git a/pyload/plugins/accounts/QuickshareCz.py b/pyload/plugins/accounts/QuickshareCz.py new file mode 100644 index 000000000..94649cc43 --- /dev/null +++ b/pyload/plugins/accounts/QuickshareCz.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +import re +from module.plugins.Account import Account +from module.utils import parseFileSize + +class QuickshareCz(Account): +    __name__ = "QuickshareCz" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """quickshare.cz account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    def loadAccountInfo(self, user, req): +        html = req.load("http://www.quickshare.cz/premium", decode = True) +                     +        found = re.search(r'Stav kreditu: <strong>(.+?)</strong>', html)                    +        if found: +            trafficleft = parseFileSize(found.group(1)) / 1024    +            premium = True if trafficleft else False +        else: +            trafficleft = None +            premium = False   + +        return {"validuntil": -1, "trafficleft": trafficleft, "premium": premium} +     +    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) +         +        if u'>Takový uživatel neexistuje.<' in html or u'>Špatné heslo.<' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/RapidgatorNet.py b/pyload/plugins/accounts/RapidgatorNet.py new file mode 100644 index 000000000..85adc71a3 --- /dev/null +++ b/pyload/plugins/accounts/RapidgatorNet.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +import re +from module.plugins.Account import Account +from module.utils import parseFileSize +from module.common.json_layer import json_loads + +class RapidgatorNet(Account): +    __name__ = "RapidgatorNet" +    __version__ = "0.04" +    __type__ = "account" +    __description__ = """rapidgator.net account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    API_URL = 'http://rapidgator.net/api/user' +         +    def loadAccountInfo(self, user, req): +        try: +            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) +                         +            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']) / 1024,  +                        "premium": True} +            else: +                self.logError(json['response_details']) +        except Exception, e: +            self.logError(e) + +        return {"validuntil": None, "trafficleft": None, "premium": False} +     +    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)             +         +            if json['response_status'] == 200: +                data['SID'] = str(json['response']['session_id']) +                return             +            else: +                self.logError(json['response_details']) +        except Exception, e: +            self.logError(e) +             +        self.wrongPassword() diff --git a/pyload/plugins/accounts/RapidshareCom.py b/pyload/plugins/accounts/RapidshareCom.py new file mode 100644 index 000000000..15722e099 --- /dev/null +++ b/pyload/plugins/accounts/RapidshareCom.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account + +class RapidshareCom(Account): +    __name__ = "RapidshareCom" +    __version__ = "0.22" +    __type__ = "account" +    __description__ = """Rapidshare.com account plugin""" +    __author_name__ = ("mkaay") +    __author_mail__ = ("mkaay@mkaay.de") +     +    def loadAccountInfo(self, user, req): +        data = self.getAccountData(user) +        api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" +        api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, "password": data["password"], "withcookie": 1} +        src = req.load(api_url_base, cookies=False, get=api_param_prem) +        if src.startswith("ERROR"): +            raise Exception(src) +        fields = src.split("\n") +        info = {} +        for t in fields: +            if not t.strip(): +                continue +            k, v = t.split("=") +            info[k] = v +         +        validuntil = int(info["billeduntil"]) +        premium = True if validuntil else False + +        tmp = {"premium": premium, "validuntil": validuntil, "trafficleft":-1, "maxtraffic":-1} + +        return tmp +     +    def login(self, user, data, req): +        api_url_base = "http://api.rapidshare.com/cgi-bin/rsapi.cgi" +        api_param_prem = {"sub": "getaccountdetails", "type": "prem", "login": user, "password": data["password"], "withcookie": 1} +        src = req.load(api_url_base, cookies=False, get=api_param_prem) +        if src.startswith("ERROR"): +            raise Exception(src+"### Note you have to use your account number for login, instead of name.") +        fields = src.split("\n") +        info = {} +        for t in fields: +            if not t.strip(): +                continue +            k, v = t.split("=") +            info[k] = v +        cj = self.getAccountCookies(user) +        cj.setCookie("rapidshare.com", "enc", info["cookie"]) +             + diff --git a/pyload/plugins/accounts/RarefileNet.py b/pyload/plugins/accounts/RarefileNet.py new file mode 100644 index 000000000..90ad02d43 --- /dev/null +++ b/pyload/plugins/accounts/RarefileNet.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class RarefileNet(XFSPAccount): +    __name__ = "RarefileNet" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """RareFile.net account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    MAIN_PAGE = "http://rarefile.net/" diff --git a/pyload/plugins/accounts/RealdebridCom.py b/pyload/plugins/accounts/RealdebridCom.py new file mode 100644 index 000000000..9460fc815 --- /dev/null +++ b/pyload/plugins/accounts/RealdebridCom.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from module.plugins.MultiHoster import MultiHoster +import xml.dom.minidom as dom + +class RealdebridCom(MultiHoster): +    __name__ = "RealdebridCom" +    __version__ = "0.5" +    __type__ = "account" +    __description__ = """Real-Debrid.com account plugin""" +    __author_name__ = ("Devirex, Hazzard") +    __author_mail__ = ("naibaf_11@yahoo.de") + +    def loadAccountInfo(self, req): +        page = req.load("http://real-debrid.com/api/account.php") +        xml = dom.parseString(page) +        account_info = {"validuntil": int(xml.getElementsByTagName("expiration")[0].childNodes[0].nodeValue), +                        "trafficleft": -1} + +        return account_info + +    def login(self, req): +        page = req.load("https://real-debrid.com/ajax/login.php?user=%s&pass=%s" % (self.loginname, self.password)) +        #page = req.load("https://real-debrid.com/login.html", post={"user": user, "pass": data["password"]}, cookies=True) + +        if "Your login informations are incorrect" in page: +            self.wrongPassword() + + +    def loadHosterList(self, req): +        https = "https" if self.getConfig("https") else "http" +        page = req.load(https + "://real-debrid.com/api/hosters.php").replace("\"","").strip() + +        return[x.strip() for x in page.split(",") if x.strip()]
\ No newline at end of file diff --git a/pyload/plugins/accounts/RehostTo.py b/pyload/plugins/accounts/RehostTo.py new file mode 100644 index 000000000..e1cb2668f --- /dev/null +++ b/pyload/plugins/accounts/RehostTo.py @@ -0,0 +1,37 @@ +from module.plugins.Account import Account + + +class RehostTo(Account): +    __name__ = "RehostTo" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """Rehost.to account plugin""" +    __author_name__ = ("RaNaN") +    __author_mail__ = ("RaNaN@pyload.org") + + +    def loadAccountInfo(self, user, req): + +        data = self.getAccountData(user) +        page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data["password"])) +        data = [x.split("=") for x in page.split(",")] +        ses = data[0][1] +        long_ses = data[1][1] + +        page = req.load("http://rehost.to/api.php?cmd=get_premium_credits&long_ses=%s" % long_ses) +        traffic, valid = page.split(",") + +        account_info = {"trafficleft": int(traffic) * 1024, +                        "validuntil": int(valid), +                        "long_ses": long_ses, +                        "ses": ses} + +        return account_info + +    def login(self, user, data, req): +        page = req.load("http://rehost.to/api.php?cmd=login&user=%s&pass=%s" % (user, data["password"])) + +        if "Login failed." in page: +            self.wrongPassword() + + diff --git a/pyload/plugins/accounts/ReloadCc.py b/pyload/plugins/accounts/ReloadCc.py new file mode 100644 index 000000000..e4cb32c42 --- /dev/null +++ b/pyload/plugins/accounts/ReloadCc.py @@ -0,0 +1,73 @@ +from module.plugins.Account   import Account + +from module.common.json_layer import json_loads + +from module.network.HTTPRequest import BadHeader + +class ReloadCc(Account): +    __name__ = "ReloadCc" +    __version__ = "0.3" +    __type__ = "account" +    __description__ = """Reload.Cc account plugin""" + +    __author_name__ = ("Reload Team") +    __author_mail__ = ("hello@reload.cc") + +    def loadAccountInfo(self, user, req): + +        # Get user data from reload.cc +        status = self.getAccountStatus(user, req) + +        # Parse account info +        account_info = {"validuntil": float(status['msg']['expires']), +                        "pwdhash": status['msg']['hash'], +                        "trafficleft": -1} + +        return account_info + +    def login(self, user, data, req): + +        # Get user data from reload.cc +        status = self.getAccountStatus(user, req) + +        if not status: +            raise Exception("There was an error upon logging in to Reload.cc!") + +        # Check if user and password are valid +        if status['status'] != "ok": +            self.wrongPassword() + + +    def getAccountStatus(self, user, req): +        # Use reload.cc API v1 to retrieve account info and return the parsed json answer +        query_params = dict( +            via='pyload', +            v=1, +            get_traffic='true', +            user=user +        ) + +        try: +            query_params.update(dict(hash=self.infos[user]['pwdhash'])) +        except Exception: +            query_params.update(dict(pwd=self.accounts[user]['password'])) + +        try: +            answer = req.load("http://api.reload.cc/login", get=query_params) +        except BadHeader, e: +            if e.code == 400: +                raise Exception("There was an unknown error within the Reload.cc plugin.") +            elif e.code == 401: +                self.wrongPassword() +            elif e.code == 402: +                self.expired(user) +            elif e.code == 403: +                raise Exception("Your account is disabled. Please contact the Reload.cc support!") +            elif e.code == 409: +                self.empty(user) +            elif e.code == 503: +                self.logInfo("Reload.cc is currently in maintenance mode! Please check again later.") +                self.wrongPassword() +            return None + +        return json_loads(answer) diff --git a/pyload/plugins/accounts/RyushareCom.py b/pyload/plugins/accounts/RyushareCom.py new file mode 100644 index 000000000..f734eb11b --- /dev/null +++ b/pyload/plugins/accounts/RyushareCom.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class RyushareCom(XFSPAccount): +    __name__ = "RyushareCom" +    __version__ = "0.03" +    __type__ = "account" +    __description__ = """ryushare.com account plugin""" +    __author_name__ = ("zoidberg", "trance4us") +    __author_mail__ = ("zoidberg@mujmail.cz", "") +     +    MAIN_PAGE = "http://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()
\ No newline at end of file diff --git a/pyload/plugins/accounts/Share76Com.py b/pyload/plugins/accounts/Share76Com.py new file mode 100644 index 000000000..9c946ae50 --- /dev/null +++ b/pyload/plugins/accounts/Share76Com.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class Share76Com(XFSPAccount): +    __name__ = "Share76Com" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """Share76.com account plugin""" +    __author_name__ = ("me") + +    MAIN_PAGE = "http://Share76.com/" diff --git a/pyload/plugins/accounts/ShareFilesCo.py b/pyload/plugins/accounts/ShareFilesCo.py new file mode 100644 index 000000000..0d8ea6635 --- /dev/null +++ b/pyload/plugins/accounts/ShareFilesCo.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class ShareFilesCo(XFSPAccount): +    __name__ = "ShareFilesCo" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """ShareFilesCo account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    MAIN_PAGE = "http://sharefiles.co/" diff --git a/pyload/plugins/accounts/ShareRapidCom.py b/pyload/plugins/accounts/ShareRapidCom.py new file mode 100644 index 000000000..f8043449c --- /dev/null +++ b/pyload/plugins/accounts/ShareRapidCom.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +import re +from time import mktime, strptime +from module.plugins.Account import Account + +class ShareRapidCom(Account): +    __name__ = "ShareRapidCom" +    __version__ = "0.32" +    __type__ = "account" +    __description__ = """ShareRapid account plugin""" +    __author_name__ = ("MikyWoW", "zoidberg") +     +    login_timeout = 60 +         +    def loadAccountInfo(self, user, req): +        src = req.load("http://share-rapid.com/mujucet/", decode=True) +         +        found = re.search(ur'<td>Max. počet paralelních stahování: </td><td>(\d+)', src) +        if found: +            data = self.getAccountData(user) +            data["options"]["limitDL"] = [int(found.group(1))] +         +        found = re.search(ur'<td>Paušální stahování aktivní. Vyprší </td><td><strong>(.*?)</strong>', src) +        if found: +            validuntil = mktime(strptime(found.group(1), "%d.%m.%Y - %H:%M")) +            return {"premium": True, "trafficleft": -1, "validuntil": validuntil}         +         +        found = re.search(r'<tr><td>GB:</td><td>(.*?) GB', src) +        if found: +            trafficleft = float(found.group(1)) * (1 << 20) +            return {"premium": True, "trafficleft": trafficleft, "validuntil": -1} +         +        return {"premium": False, "trafficleft": None, "validuntil": None} + +    def login(self, user, data, req): +        htm = req.load("http://share-rapid.com/prihlaseni/", cookies=True) +        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://share-rapid.com/prihlaseni/", +                           post={"hash": hashes, +                                 "login": user,  +                                 "pass1": data["password"], +                                 "remember": 0, +                                 "sbmt": u"Přihlásit"}, cookies=True)
\ No newline at end of file diff --git a/pyload/plugins/accounts/ShareonlineBiz.py b/pyload/plugins/accounts/ShareonlineBiz.py new file mode 100644 index 000000000..fe2b412db --- /dev/null +++ b/pyload/plugins/accounts/ShareonlineBiz.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account + +class ShareonlineBiz(Account): +    __name__ = "ShareonlineBiz" +    __version__ = "0.24" +    __type__ = "account" +    __description__ = """share-online.biz account plugin""" +    __author_name__ = ("mkaay", "zoidberg") +    __author_mail__ = ("mkaay@mkaay.de", "zoidberg@mujmail.cz") + +    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 loadAccountInfo(self, user, req): +        src = self.getUserAPI(user, req) + +        info = {} +        for line in src.splitlines(): +            if "=" in line: +                key, value = line.split("=") +                info[key] = value +        self.logDebug(info) + +        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"]) + +        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} + +    def login(self, user, data, req): +        src = self.getUserAPI(user, req) +        if "EXCEPTION" in src: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/SpeedLoadOrg.py b/pyload/plugins/accounts/SpeedLoadOrg.py new file mode 100644 index 000000000..4eb2b52de --- /dev/null +++ b/pyload/plugins/accounts/SpeedLoadOrg.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class SpeedLoadOrg(XFSPAccount): +    __name__ = "SpeedLoadOrg" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """SpeedLoadOrg account plugin""" +    __author_name__ = ("stickell") +    __author_mail__ = ("l.stickell@yahoo.it") + +    MAIN_PAGE = "http://speedload.org/" diff --git a/pyload/plugins/accounts/StahnuTo.py b/pyload/plugins/accounts/StahnuTo.py new file mode 100644 index 000000000..8a4523bc5 --- /dev/null +++ b/pyload/plugins/accounts/StahnuTo.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +from module.utils import parseFileSize +import re + +class StahnuTo(Account): +    __name__ = "StahnuTo" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """StahnuTo account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    #login_timeout = 60 + +    def loadAccountInfo(self, user, req):         +        html = req.load("http://www.stahnu.to/") +            +        found = re.search(r'>VIP: (\d+.*)<', html) +        trafficleft = parseFileSize(found.group(1)) * 1024 if found else 0  + +        return {"premium": trafficleft > (512 * 1024), "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"}) +         +        if not '<a href="logout.php">' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/TurbobitNet.py b/pyload/plugins/accounts/TurbobitNet.py new file mode 100644 index 000000000..c4b819131 --- /dev/null +++ b/pyload/plugins/accounts/TurbobitNet.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +from time import mktime, strptime + +class TurbobitNet(Account): +    __name__ = "TurbobitNet" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """TurbobitNet account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    #login_timeout = 60 + +    def loadAccountInfo(self, user, req):         +        html = req.load("http://turbobit.net") +            +        found = re.search(r'<u>Turbo Access</u> to ([0-9.]+)', html) +        if found: +            premium = True +            validuntil = mktime(strptime(found.group(1), "%d.%m.%Y")) +        else: +            premium = False +            validuntil = -1 + +        return {"premium": premium, "trafficleft": -1, "validuntil": validuntil} + +    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"}) +         +        if not '<div class="menu-item user-name">' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/UlozTo.py b/pyload/plugins/accounts/UlozTo.py new file mode 100644 index 000000000..6652c8b7c --- /dev/null +++ b/pyload/plugins/accounts/UlozTo.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account +import re + +class UlozTo(Account): +    __name__ = "UlozTo" +    __version__ = "0.04" +    __type__ = "account" +    __description__ = """uloz.to account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    TRAFFIC_LEFT_PATTERN = r'<li class="menu-kredit"><a href="http://www.ulozto.net/kredit" title="[^"]*?GB = ([0-9.]+) MB"' + +    def loadAccountInfo(self, user, req): +        #this cookie gets lost somehow after each request +        self.phpsessid = req.cj.getCookie("ULOSESSID")  +        html = req.load("http://www.ulozto.net/", decode = True) +        req.cj.setCookie("www.ulozto.net", "ULOSESSID", self.phpsessid)         +                     +        found = re.search(self.TRAFFIC_LEFT_PATTERN, html) +        trafficleft = int(float(found.group(1).replace(' ','').replace(',','.')) * 1000 / 1.024) if found else 0 +        self.premium = True if trafficleft else False +         +        return {"validuntil": -1, "trafficleft": trafficleft} +     +    def login(self, user, data, req): +        html = req.load('http://www.ulozto.net/login?do=loginForm-submit', post = { +            "login": "Submit", +            "password": data['password'], +            "username":	user +            }, decode = True) +         +        if '<ul class="error">' in html: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/UploadedTo.py b/pyload/plugins/accounts/UploadedTo.py new file mode 100644 index 000000000..e10b93e8d --- /dev/null +++ b/pyload/plugins/accounts/UploadedTo.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account +import re +from time import time + +class UploadedTo(Account): +    __name__ = "UploadedTo" +    __version__ = "0.23" +    __type__ = "account" +    __description__ = """ul.net account plugin""" +    __author_name__ = ("mkaay") +    __author_mail__ = ("mkaay@mkaay.de") +     +    def loadAccountInfo(self, user, req): + +        req.load("http://uploaded.net/language/en") +        html = req.load("http://uploaded.net/me") + +        premium = '<a href="register"><em>Premium</em>' in html or '<em>Premium</em></th>' in html + +        if premium: +            raw_traffic = re.search(r'<th colspan="2"><b class="cB">([^<]+)', html).group(1) +            raw_valid = re.search(r"<td>Duration:</td>\s*<th>([^<]+)", html, re.MULTILINE).group(1).strip() + +            traffic = int(self.parseTraffic(raw_traffic)) + +            if raw_valid == "unlimited": +                validuntil = -1 +            else: +                raw_valid = re.findall(r"(\d+) (weeks|days|hours)", raw_valid) +                validuntil = time() +                for n, u in raw_valid: +                    validuntil += 3600 * int(n) * {"weeks": 168, "days": 24, "hours": 1}[u] + +            return {"validuntil":validuntil, "trafficleft":traffic, "maxtraffic":50*1024*1024} +        else: +            return {"premium" : False, "validuntil" : -1} + +    def login(self, user, data, req): + +        req.load("http://uploaded.net/language/en") +        req.cj.setCookie("uploaded.net", "lang", "en") +         +        page = req.load("http://uploaded.net/io/login", post={ "id" : user, "pw" : data["password"], "_" : ""}) + +        if "User and password do not match!" in page: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/UploadheroCom.py b/pyload/plugins/accounts/UploadheroCom.py new file mode 100644 index 000000000..18ed69ae6 --- /dev/null +++ b/pyload/plugins/accounts/UploadheroCom.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from module.plugins.Account import Account +import re,datetime,time + +class UploadheroCom(Account): +    __name__ = "UploadheroCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """Uploadhero.com account plugin""" +    __author_name__ = ("mcmyst") +    __author_mail__ = ("mcmyst@hotmail.fr") + + +    def loadAccountInfo(self, user, req): +        premium_pattern = re.compile('Il vous reste <span class="bleu">([0-9]+)</span> jours premium.') + +        data = self.getAccountData(user) +        page = req.load("http://uploadhero.com/my-account") + +        if premium_pattern.search(page): +                end_date = datetime.date.today() + datetime.timedelta(days=int(premium_pattern.search(page).group(1))) +                end_date = time.mktime(future.timetuple()) +                account_info = {"validuntil": end_date, "trafficleft": -1, "premium": True} +        else: +                account_info = {"validuntil": -1, "trafficleft": -1, "premium": False} + +        return account_info + +    def login(self, user, data, req): +        page = req.load("http://uploadhero.com/lib/connexion.php", post={"pseudo_login": user, "password_login": data["password"]}) + +        if "mot de passe invalide" in page: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/UploadingCom.py b/pyload/plugins/accounts/UploadingCom.py new file mode 100644 index 000000000..507e4ab18 --- /dev/null +++ b/pyload/plugins/accounts/UploadingCom.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: mkaay +""" + +from module.plugins.Account import Account +from time import time, strptime, mktime +import re + +class UploadingCom(Account): +    __name__ = "UploadingCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """uploading.com account plugin""" +    __author_name__ = ("mkaay") +    __author_mail__ = ("mkaay@mkaay.de") +     +    def loadAccountInfo(self, user, req): +        src = req.load("http://uploading.com/") +        premium = True +        if "UPGRADE TO PREMIUM" in src: +            return {"validuntil": -1, "trafficleft": -1, "premium": False} +         +        m = re.search("Valid Until:(.*?)<", src) +        if m: +            validuntil = int(mktime(strptime(m.group(1).strip(), "%b %d, %Y"))) +        else: +            validuntil = -1 +         +        return {"validuntil": validuntil, "trafficleft": -1, "premium": True} +         +    def login(self, user, data, req): +        req.cj.setCookie("uploading.com", "lang", "1") +        req.cj.setCookie("uploading.com", "language", "1") +        req.cj.setCookie("uploading.com", "setlang", "en") +        req.cj.setCookie("uploading.com", "_lang", "en") +        req.load("http://uploading.com/") +        req.load("http://uploading.com/general/login_form/?JsHttpRequest=%s-xml" % long(time()*1000), post={"email": user, "password": data["password"], "remember": "on"}) diff --git a/pyload/plugins/accounts/UploadstationCom.py b/pyload/plugins/accounts/UploadstationCom.py new file mode 100644 index 000000000..e86cec7ce --- /dev/null +++ b/pyload/plugins/accounts/UploadstationCom.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from module.plugins.accounts.FilejungleCom import FilejungleCom + +class UploadstationCom(FilejungleCom): +    __name__ = "UploadstationCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """uploadstation.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    URL = "http://uploadstation.com/" diff --git a/pyload/plugins/accounts/UptoboxCom.py b/pyload/plugins/accounts/UptoboxCom.py new file mode 100644 index 000000000..b07991817 --- /dev/null +++ b/pyload/plugins/accounts/UptoboxCom.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +from module.plugins.internal.XFSPAccount import XFSPAccount + +class UptoboxCom(XFSPAccount): +    __name__ = "UptoboxCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """DDLStorage.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    MAIN_PAGE = "http://uptobox.com/"
\ No newline at end of file diff --git a/pyload/plugins/accounts/WarserverCz.py b/pyload/plugins/accounts/WarserverCz.py new file mode 100644 index 000000000..21961956b --- /dev/null +++ b/pyload/plugins/accounts/WarserverCz.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. +     +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re +from module.utils import parseFileSize +from time import mktime, strptime + +class WarserverCz(Account): +    __name__ = "WarserverCz" +    __version__ = "0.02" +    __type__ = "account" +    __description__ = """Warserver.cz account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") +     +    VALID_UNTIL_PATTERN = ur'<li>Neomezené stahování do: <strong>(.+?)<' +    TRAFFIC_LEFT_PATTERN = ur'<li>Kredit: <strong>(.+?)<' +     +    DOMAIN = "http://www.warserver.cz" + +    def loadAccountInfo(self, user, req):       +        html = req.load("%s/uzivatele/prehled" % self.DOMAIN, decode = True) +         +        validuntil = trafficleft = None +        premium = False +         +        found = re.search(self.VALID_UNTIL_PATTERN, html) +        if found: +            self.logDebug("VALID_UNTIL", found.group(1)) +            try:                 +                #validuntil = mktime(strptime(found.group(1), "%d %B %Y")) +                premium = True +                trafficleft = -1 +            except Exception, e: +                self.logError(e) +                 +        found = re.search(self.TRAFFIC_LEFT_PATTERN, html) +        if found: +            self.logDebug("TRAFFIC_LEFT", found.group(1)) +            trafficleft = parseFileSize((found.group(1).replace(" ",""))) // 1024 +            premium = True if trafficleft > 1 << 18 else False                            +         +        return ({"validuntil": validuntil, "trafficleft": trafficleft, "premium": premium}) +     +    def login(self, user, data, req): +        html = req.load('%s/uzivatele/prihlaseni?do=prihlaseni-submit' % self.DOMAIN,  +                        post = {"username": user, +                                "password": data['password'], +                                "send": u"Přihlásit"}, +                        decode = True) +         +        if '<p class="chyba">' in html:           +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/WuploadCom.py b/pyload/plugins/accounts/WuploadCom.py new file mode 100644 index 000000000..3d9ddfffa --- /dev/null +++ b/pyload/plugins/accounts/WuploadCom.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: RaNaN +""" + +from types import MethodType + +from module.plugins.Account import Account +from module.common.json_layer import json_loads + +class WuploadCom(Account): +    __name__ = "WuploadCom" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """wupload.com account plugin""" +    __author_name__ = ("RaNaN", "Paul King") +    __author_mail__ = ("RaNaN@pyload.org", "") + +    API_URL = "http://api.wupload.com" + +    def init(self): +        fs = self.core.pluginManager.loadClass("accounts", "FilesonicCom") + +        methods = ["loadAccountInfo", "login"] +        #methods to bind from fs + +        for m in methods: +            setattr(self, m, MethodType(fs.__dict__[m], self, WuploadCom)) + +    def getDomain(self, req): +        xml = req.load(self.API_URL + "/utility?method=getWuploadDomainForCurrentIp&format=json", +                       decode=True) +        return json_loads(xml)["FSApi_Utility"]["getWuploadDomainForCurrentIp"]["response"]
\ No newline at end of file diff --git a/pyload/plugins/accounts/X7To.py b/pyload/plugins/accounts/X7To.py new file mode 100644 index 000000000..90f65d55e --- /dev/null +++ b/pyload/plugins/accounts/X7To.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: ernieb +""" + +import re +from time import strptime, mktime + +from module.plugins.Account import Account + +class X7To(Account): +    __name__ = "X7To" +    __version__ = "0.1" +    __type__ = "account" +    __description__ = """X7.To account plugin""" +    __author_name__ = ("ernieb") +    __author_mail__ = ("ernieb") + +    def loadAccountInfo(self, user, req): +        page = req.load("http://www.x7.to/my") + +        validCheck = re.search("Premium-Mitglied bis ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE) +        if validCheck: +            valid = validCheck.group(1) +            valid = int(mktime(strptime(valid, "%Y-%m-%d"))) +        else: +            validCheck = re.search("Premium member until ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE) +            if validCheck: +                valid = validCheck.group(1) +                valid = int(mktime(strptime(valid, "%Y-%m-%d"))) +            else: +                valid = 0 + +        trafficleft = re.search(r'<em style="white-space:nowrap">([\d]*[,]?[\d]?[\d]?) (KB|MB|GB)</em>', page, re.IGNORECASE) +        if trafficleft: +            units = float(trafficleft.group(1).replace(",", ".")) +            pow = {'KB': 0, 'MB': 1, 'GB': 2}[trafficleft.group(2)] +            trafficleft = int(units * 1024 ** pow) +        else: +            trafficleft = -1 + +        return {"trafficleft": trafficleft, "validuntil": valid} + + +    def login(self, user, data, req): +        #req.cj.setCookie("share.cx", "lang", "english") +        page = req.load("http://x7.to/lang/en", None, {}) +        page = req.load("http://x7.to/james/login", None, +                {"redirect": "http://www.x7.to/", "id": user, "pw": data['password'], "submit": "submit"}) + +        if "Username and password are not matching." in page: +            self.wrongPassword() diff --git a/pyload/plugins/accounts/YibaishiwuCom.py b/pyload/plugins/accounts/YibaishiwuCom.py new file mode 100644 index 000000000..e2aa6f11d --- /dev/null +++ b/pyload/plugins/accounts/YibaishiwuCom.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +""" +    This program is free software; you can redistribute it and/or modify +    it under the terms of the GNU General Public License as published by +    the Free Software Foundation; either version 3 of the License, +    or (at your option) any later version. + +    This program is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +    See the GNU General Public License for more details. + +    You should have received a copy of the GNU General Public License +    along with this program; if not, see <http://www.gnu.org/licenses/>. + +    @author: zoidberg +""" + +from module.plugins.Account import Account +import re + +class YibaishiwuCom(Account): +    __name__ = "YibaishiwuCom" +    __version__ = "0.01" +    __type__ = "account" +    __description__ = """115.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz") + +    ACCOUNT_INFO_PATTERN = r'var USER_PERMISSION = {(.*?)}' + +    def loadAccountInfo(self, user, req): +        #self.relogin(user) +        html = req.load("http://115.com/", decode = True) +         +        found = re.search(self.ACCOUNT_INFO_PATTERN, html, re.S) +        premium = True if (found and 'is_vip: 1' in found.group(1)) else False +        validuntil = trafficleft = (-1 if found 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) + +        if not 'var USER_PERMISSION = {' in html: +            self.wrongPassword()
\ No newline at end of file diff --git a/pyload/plugins/accounts/ZeveraCom.py b/pyload/plugins/accounts/ZeveraCom.py new file mode 100644 index 000000000..61a66cd89 --- /dev/null +++ b/pyload/plugins/accounts/ZeveraCom.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from module.plugins.Account import Account + +import re +from time import mktime, strptime + +class ZeveraCom(Account): +    __name__ = "ZeveraCom" +    __version__ = "0.21" +    __type__ = "account" +    __description__ = """Zevera.com account plugin""" +    __author_name__ = ("zoidberg") +    __author_mail__ = ("zoidberg@mujmail.cz")     +     +    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 + +    def login(self, user, data, req): +        self.loginname = user +        self.password = data["password"] +        if self.getAPIData(req) == "No traffic": +            self.wrongPassword() +             +    def getAPIData(self, req, just_header = False, **kwargs): +        get_data = { +            'cmd': 'accountinfo', +            'login': self.loginname, +            'pass': self.password +        } +        get_data.update(kwargs) + +        response = req.load("http://www.zevera.com/jDownloader.ashx", get = get_data, decode = True, just_header = just_header)  +        self.logDebug(response) + +        if ':' in response: +            if not just_header: +                response = response.replace(',','\n') +            return dict((y.strip().lower(), z.strip()) for (y,z) in [x.split(':',1) for x in response.splitlines() if ':' in x]) +        else: +            return response
\ No newline at end of file diff --git a/pyload/plugins/accounts/__init__.py b/pyload/plugins/accounts/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/pyload/plugins/accounts/__init__.py | 
