diff options
Diffstat (limited to 'module')
| -rw-r--r-- | module/plugins/accounts/WebshareCz.py | 68 | ||||
| -rw-r--r-- | module/plugins/hoster/WebshareCz.py | 66 | 
2 files changed, 102 insertions, 32 deletions
| diff --git a/module/plugins/accounts/WebshareCz.py b/module/plugins/accounts/WebshareCz.py new file mode 100644 index 000000000..f8e3eeb73 --- /dev/null +++ b/module/plugins/accounts/WebshareCz.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +import re + +from hashlib import md5, sha1 +from passlib.hash import md5_crypt +from time import mktime, strptime, time + +from module.plugins.Account import Account + + +class WebshareCz(Account): +    __name__    = "WebshareCz" +    __type__    = "account" +    __version__ = "0.07" + +    __description__ = """Webshare.cz account plugin""" +    __license__     = "GPLv3" +    __authors__     = [("rush", "radek.senfeld@gmail.com")] + + +    VALID_UNTIL_PATTERN = r'<vip_until>(.+)</vip_until>' + +    TRAFFIC_LEFT_PATTERN = r'<bytes>(.+)</bytes>' + + +    def loadAccountInfo(self, user, req): +        html = req.load("https://webshare.cz/api/user_data/", +                        post={'wst': self.infos['wst']}, +                        decode=True) + +        self.logDebug("Response: " + html) + +        expiredate = re.search(self.VALID_UNTIL_PATTERN, html).group(1) +        self.logDebug("Expire date: " + expiredate) + +        validuntil  = mktime(strptime(expiredate, "%Y-%m-%d %H:%M:%S")) +        trafficleft = self.parseTraffic(re.search(self.TRAFFIC_LEFT_PATTERN, html).group(1)) +        premium     = validuntil > time() + +        return {'validuntil': validuntil, 'trafficleft': -1, 'premium': premium} + + +    def login(self, user, data, req): +        salt = req.load("https://webshare.cz/api/salt/", +                        post={'username_or_email': user, +                              'wst'              : ""}, +                        decode=True) + +        if "<status>OK</status>" not in salt: +            self.wrongPassword() + +        salt     = re.search('<salt>(.+)</salt>', salt).group(1) +        password = sha1(md5_crypt.encrypt(data["password"], salt=salt)).hexdigest() +        digest   = md5(user + ":Webshare:" + password).hexdigest() + +        login = req.load("https://webshare.cz/api/login/", +                         post={'digest'           : digest, +                               'keep_logged_in'   : 1, +                               'password'         : password, +                               'username_or_email': user, +                               'wst'              : ""}, +                         decode=True) + +        if "<status>OK</status>" not in login: +            self.wrongPassword() + +        self.infos['wst'] = re.search('<token>(.+)</token>', login).group(1) diff --git a/module/plugins/hoster/WebshareCz.py b/module/plugins/hoster/WebshareCz.py index 17aaff37c..7b9c097c5 100644 --- a/module/plugins/hoster/WebshareCz.py +++ b/module/plugins/hoster/WebshareCz.py @@ -3,22 +3,7 @@  import re  from module.network.RequestFactory import getURL -from module.plugins.internal.SimpleHoster import SimpleHoster - - -def getInfo(urls): -    for url in urls: -        fid = re.search(WebshareCz.__pattern__, url).group('ID') -        api_data = getURL("https://webshare.cz/api/file_info/", post={'ident': fid}) - -        if 'File not found' in api_data: -            file_info = (url, 0, 1, url) -        else: -            name = re.search('<name>(.+)</name>', api_data).group(1) -            size = re.search('<size>(.+)</size>', api_data).group(1) -            file_info = (name, size, 2, url) - -        yield file_info +from module.plugins.internal.SimpleHoster import SimpleHoster, create_getInfo  class WebshareCz(SimpleHoster): @@ -30,11 +15,38 @@ class WebshareCz(SimpleHoster):      __description__ = """WebShare.cz hoster plugin"""      __license__     = "GPLv3" -    __authors__     = [("stickell", "l.stickell@yahoo.it")] +    __authors__     = [("stickell", "l.stickell@yahoo.it"), +                       ("rush", "radek.senfeld@gmail.com")] + + +    @classmethod +    def getInfo(cls, url="", html=""): +        info = super(WebshareCz, self).getInfo(url, html) + +        if url: +            info['pattern'] = re.match(cls.__pattern__, url).groupdict() + +            api_data = getURL("https://webshare.cz/api/file_info/", +                              post={'ident': info['pattern']['ID']}, +                              decode=True) + +            if 'File not found' in api_data: +                info['status'] = 1 +            else: +                info["status"] = 2 +                info['name']   = re.search('<name>(.+)</name>', api_data).group(1) or info['name'] +                info['size']   = re.search('<size>(.+)</size>', api_data).group(1) or info['size'] + +        return info      def handleFree(self): -        api_data = self.load('https://webshare.cz/api/file_link/', post={'ident': self.fid}) +        fid = re.match(self.__pattern__, self.pyfile.url).group("ID") +        wst = self.account.infos['wst'] if self.account and 'wst' in self.account.infos else "" + +        api_data = getURL('https://webshare.cz/api/file_link/', +                          post={'ident': fid, 'wst': wst}, +                          decode=True)          self.logDebug("API data: " + api_data) @@ -42,21 +54,11 @@ class WebshareCz(SimpleHoster):          if m is None:              self.error(_("Unable to detect direct link")) -        self.download(m.group(1), disposition=True) - - -    def getFileInfo(self): -        self.logDebug("URL: %s" % self.pyfile.url) +        self.link = m.group(1) -        self.fid = re.match(self.__pattern__, self.pyfile.url).group('ID') -        self.load(self.pyfile.url) -        api_data = self.load('https://webshare.cz/api/file_info/', post={'ident': self.fid}) +    def handlePremium(self): +        return self.handleFree() -        if 'File not found' in api_data: -            self.offline() -        else: -            self.pyfile.name = re.search('<name>(.+)</name>', api_data).group(1) -            self.pyfile.size = re.search('<size>(.+)</size>', api_data).group(1) -        self.logDebug("FILE NAME: %s FILE SIZE: %s" % (self.pyfile.name, self.pyfile.size)) +getInfo = create_getInfo(WebshareCz) | 
