diff options
Diffstat (limited to 'module/plugins')
| -rw-r--r-- | module/plugins/AccountManager.py | 12 | ||||
| -rw-r--r-- | module/plugins/accounts/UploadedTo.py | 30 | ||||
| -rw-r--r-- | module/plugins/accounts/X7To.py | 13 | ||||
| -rw-r--r-- | module/plugins/container/RSDF.py | 24 | ||||
| -rw-r--r-- | module/plugins/hoster/FreakshareCom.py | 282 | 
5 files changed, 191 insertions, 170 deletions
diff --git a/module/plugins/AccountManager.py b/module/plugins/AccountManager.py index e4c858a43..94af7cd82 100644 --- a/module/plugins/AccountManager.py +++ b/module/plugins/AccountManager.py @@ -20,12 +20,13 @@  from os.path import exists  from shutil import copy +from threading import Lock +  from module.PullEvents import AccountUpdateEvent -from module.utils import chmod +from module.utils import chmod, lock  ACC_VERSION = 1 -########################################################################  class AccountManager():      """manages all accounts""" @@ -37,6 +38,7 @@ class AccountManager():          self.accounts = {} # key = ( plugin )          self.plugins = {} +        self.lock = Lock()          self.initAccountPlugins() @@ -138,7 +140,7 @@ class AccountManager():          for name in self.core.pluginManager.getAccountPlugins():              self.accounts[name] = {} -    #---------------------------------------------------------------------- +    @lock      def updateAccount(self, plugin , user, password=None, options={}):          """add or update account"""          if self.accounts.has_key(plugin): @@ -149,7 +151,7 @@ class AccountManager():              self.saveAccounts()              if updated: p.scheduleRefresh(user, force=False) -    #---------------------------------------------------------------------- +    @lock      def removeAccount(self, plugin, user):          """remove account""" @@ -159,7 +161,7 @@ class AccountManager():              self.saveAccounts() -             +    @lock      def getAccountInfos(self, force=True, refresh=False):          data = {} diff --git a/module/plugins/accounts/UploadedTo.py b/module/plugins/accounts/UploadedTo.py index 5fcc77498..6852e5243 100644 --- a/module/plugins/accounts/UploadedTo.py +++ b/module/plugins/accounts/UploadedTo.py @@ -30,27 +30,33 @@ class UploadedTo(Account):      __author_mail__ = ("mkaay@mkaay.de")      def loadAccountInfo(self, user, req): -        html = req.load("http://uploaded.to/me", cookies=True) -        premium = '<a href="me#premium"><em>Premium</em>' in html +        req.load("http://uploaded.to/language/en") +        html = req.load("http://uploaded.to/me") -        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) -            raw_valid = re.findall(r"\d+", raw_valid) +        premium = '<a href="me#premium"><em>Premium</em>' in html or '<em>Premium</em></th>' in html -            traffic = int(self.parseTraffic(raw_traffic)) +        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() -            validuntil = time() + 24 * 60 * 60 * int(raw_valid[0]) + 60 * 60 * int(raw_valid[1]) +            if raw_valid == "unlimited": +                validuntil = -1 +            else: +                raw_valid = re.findall(r"\d+", raw_valid) +                validuntil = time() + 24 * 60 * 60 * int(raw_valid[0]) + 60 * 60 * int(raw_valid[1]) -            return {"validuntil":validuntil, "trafficleft":traffic, "maxtraffic":50*1024*1024} +                 +            return {"validuntil":validuntil, "trafficleft": -1}          else:              return {"premium" : False, "validuntil" : -1}      def login(self, user, data, req): -        page = req.load("http://uploaded.to/io/login", post={ "id" : user, "pw" : data["password"], "_" : ""}) -        if "User and password do not match!" in page: -            self.wrongPassword()          req.load("http://uploaded.to/language/en")          req.cj.setCookie("uploaded.to", "lang", "en") +         +        page = req.load("http://uploaded.to/io/login", post={ "id" : user, "pw" : data["password"], "_" : ""}) + +        if "User and password do not match!" in page: +            self.wrongPassword() diff --git a/module/plugins/accounts/X7To.py b/module/plugins/accounts/X7To.py index abfb13e5e..8c2bf245a 100644 --- a/module/plugins/accounts/X7To.py +++ b/module/plugins/accounts/X7To.py @@ -33,8 +33,17 @@ class X7To(Account):      def loadAccountInfo(self, user, req):
          page = req.load("http://www.x7.to/my")
 -        valid = re.search("Premium-Mitglied bis ([0-9]*-[0-9]*-[0-9]*)", page, re.IGNORECASE).group(1)
 -        valid = int(mktime(strptime(valid, "%Y-%m-%d")))
 +        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:
 diff --git a/module/plugins/container/RSDF.py b/module/plugins/container/RSDF.py index 93e2d717b..ea5cd67f2 100644 --- a/module/plugins/container/RSDF.py +++ b/module/plugins/container/RSDF.py @@ -3,6 +3,7 @@  import base64  import binascii +import re  from module.plugins.Container import Container @@ -31,17 +32,18 @@ class RSDF(Container):          rsdf = open(infile, 'r')          data = rsdf.read() -        data = binascii.unhexlify(''.join(data.split())) -        data = data.splitlines() +        rsdf.close() -        links = [] -        for link in data: -            link = base64.b64decode(link) -            link = obj.decrypt(link) -            decryptedUrl = link.replace('CCF: ', '') -            links.append(decryptedUrl) +        if re.search(r"<title>404 - Not Found</title>", data) is None: +            data = binascii.unhexlify(''.join(data.split())) +            data = data.splitlines() -        rsdf.close() +            links = [] +            for link in data: +                link = base64.b64decode(link) +                link = obj.decrypt(link) +                decryptedUrl = link.replace('CCF: ', '') +                links.append(decryptedUrl) -        self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links))) -        self.packages.append((pyfile.package().name, links))         +            self.log.debug("%s: adding package %s with %d links" % (self.__name__,pyfile.package().name,len(links))) +            self.packages.append((pyfile.package().name, links))         diff --git a/module/plugins/hoster/FreakshareCom.py b/module/plugins/hoster/FreakshareCom.py index 1c4e04dee..d795147a6 100644 --- a/module/plugins/hoster/FreakshareCom.py +++ b/module/plugins/hoster/FreakshareCom.py @@ -1,141 +1,143 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import re -from module.plugins.Hoster import Hoster -from module.plugins.ReCaptcha import ReCaptcha - -class FreakshareCom(Hoster): -    __name__ = "FreakshareCom" -    __type__ = "hoster" -    __pattern__ = r"http://(?:www\.)?freakshare\.(net|com)/files/\S*?/" -    __version__ = "0.33" -    __description__ = """Freakshare.com Download Hoster""" -    __author_name__ = ("sitacuisses","spoob","mkaay") -    __author_mail__ = ("sitacuisses@yahoo.de","spoob@pyload.org","mkaay@mkaay.de") - -    def setup(self): -        self.html = None -        self.wantReconnect = False -        self.multiDL = False -        self.req_opts = [] - -    def process(self, pyfile): -        self.pyfile = pyfile -        pyfile.url = pyfile.url.replace("freakshare.net/","freakshare.com/") - -        if self.account: -            self.html = self.load(pyfile.url, cookies=False) -            pyfile.name = self.get_file_name() -            self.download(pyfile.url) - -        else: -            self.prepare() -            self.get_file_url() - -            self.download(self.pyfile.url, post=self.req_opts) -         -     -    def prepare(self): -        pyfile = self.pyfile - -        self.wantReconnect = False -         -        self.download_html() - -        if not self.file_exists(): -            self.offline() -             -        self.setWait( self.get_waiting_time() ) - -        pyfile.name = self.get_file_name() -             -        self.wait() - -        return True - -    def download_html(self): -        self.html = self.load(self.pyfile.url, cookies=True) - -    def get_file_url(self): -        """ returns the absolute downloadable filepath -        """ -        if self.html is None: -            self.download_html() -        if not self.wantReconnect: -            self.req_opts = self.get_download_options() # get the Post options for the Request -            #file_url = self.pyfile.url -            #return file_url -        else: -            self.offline() - -    def get_file_name(self): -        if self.html is None: -            self.download_html() -        if not self.wantReconnect: -            file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center\;\">([^ ]+)", self.html).group(1) -            return file_name -        else: -            return self.pyfile.url -     -    def get_waiting_time(self): -        if self.html is None: -            self.download_html() - -        if "Der Traffic f\xc3\xbcr heute ist verbraucht!" in self.html or "Your Traffic is used up for today" in self.html: -            self.wantReconnect = True -            return 24*3600 - -        if re.search(r"This file does not exist!", self.html) is not None: -            self.offline() - -        timestring = re.search('\s*var\sdownloadWait\s=\s(\d*);', self.html).group(1) -        if timestring: -            sec = int(timestring) + 1 #add 1 sec as tenths of seconds are cut off -        else: -            sec = 0 -        return sec - -    def file_exists(self): -        """ returns True or False -        """ -        if self.html is None: -            self.download_html() -        if re.search(r"Sorry, this Download doesnt exist anymore", self.html) is not None: -            return False -        else: -            return True - -    def get_download_options(self): -        re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>", self.html).group(0) #get the whole request -        to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope) -        request_options = [] -         -        for item in to_sort:       #Name value pairs are output reversed from regex, so we reorder them -            request_options.append((item[1], item[0])) -             -        herewego = self.load(self.pyfile.url, None, request_options, cookies=True) # the actual download-Page -         -        # comment this in, when it doesnt work -        # with open("DUMP__FS_.HTML", "w") as fp: -            # fp.write(herewego) -         -        to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego) -        request_options = [] -         -        # comment this in, when it doesnt work as well -        #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort]) -         -        for item in to_sort:       #Same as above -            request_options.append((item[1], item[0])) - -        challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego) - -        if challenge: -            re_captcha = ReCaptcha(self) -            challenge, result = re_captcha.challenge(challenge.group(1)) - -            request_options.append(("recaptcha_challenge_field", challenge)) -            request_options.append(("recaptcha_response_field", result)) - +#!/usr/bin/env python
 +# -*- coding: utf-8 -*-
 +
 +import re
 +from module.plugins.Hoster import Hoster
 +from module.plugins.ReCaptcha import ReCaptcha
 +
 +class FreakshareCom(Hoster):
 +    __name__ = "FreakshareCom"
 +    __type__ = "hoster"
 +    __pattern__ = r"http://(?:www\.)?freakshare\.(net|com)/files/\S*?/"
 +    __version__ = "0.33"
 +    __description__ = """Freakshare.com Download Hoster"""
 +    __author_name__ = ("sitacuisses","spoob","mkaay")
 +    __author_mail__ = ("sitacuisses@yahoo.de","spoob@pyload.org","mkaay@mkaay.de")
 +
 +    def setup(self):
 +        self.html = None
 +        self.wantReconnect = False
 +        self.multiDL = False
 +        self.req_opts = []
 +
 +    def process(self, pyfile):
 +        self.pyfile = pyfile
 +        pyfile.url = pyfile.url.replace("freakshare.net/","freakshare.com/")
 +
 +        if self.account:
 +            self.html = self.load(pyfile.url, cookies=False)
 +            pyfile.name = self.get_file_name()
 +            self.download(pyfile.url)
 +
 +        else:
 +            self.prepare()
 +            self.get_file_url()
 +
 +            self.download(self.pyfile.url, post=self.req_opts)
 +        
 +    
 +    def prepare(self):
 +        pyfile = self.pyfile
 +
 +        self.wantReconnect = False
 +        
 +        self.download_html()
 +
 +        if not self.file_exists():
 +            self.offline()
 +            
 +        self.setWait( self.get_waiting_time() )
 +
 +        pyfile.name = self.get_file_name()
 +            
 +        self.wait()
 +
 +        return True
 +
 +    def download_html(self):
 +        self.html = self.load(self.pyfile.url)
 +
 +    def get_file_url(self):
 +        """ returns the absolute downloadable filepath
 +        """
 +        if self.html is None:
 +            self.download_html()
 +        if not self.wantReconnect:
 +            self.req_opts = self.get_download_options() # get the Post options for the Request
 +            #file_url = self.pyfile.url
 +            #return file_url
 +        else:
 +            self.offline()
 +
 +    def get_file_name(self):
 +        if self.html is None:
 +            self.download_html()
 +        if not self.wantReconnect:
 +            file_name = re.search(r"<h1\sclass=\"box_heading\"\sstyle=\"text-align:center\;\">([^ ]+)", self.html).group(1)
 +            return file_name
 +        else:
 +            return self.pyfile.url
 +    
 +    def get_waiting_time(self):
 +        if self.html is None:
 +            self.download_html()
 +
 +        if "Der Traffic f\xc3\xbcr heute ist verbraucht!" in self.html or "Your Traffic is used up for today" in self.html:
 +            self.wantReconnect = True
 +            return 24*3600
 +
 +        if re.search(r"This file does not exist!", self.html) is not None:
 +            self.offline()
 +        timestring = re.search('\s*var\sdownloadWait\s=\s(\d*);', self.html)
 +        if timestring:        
 +            return int(timestring.group(1)) + 1 #add 1 sec as tenths of seconds are cut off
 +        timestring = re.search('\s*var\stime\s=\s(\d*)[.0];', self.html)
 +        if timestring:        
 +            return int(timestring.group(1)) + 1 #add 1 sec as tenths of seconds are cut off
 +        else:
 +            return 60
 +
 +
 +    def file_exists(self):
 +        """ returns True or False
 +        """
 +        if self.html is None:
 +            self.download_html()
 +        if re.search(r"Sorry, this Download doesnt exist anymore", self.html) is not None:
 +            return False
 +        else:
 +            return True
 +
 +    def get_download_options(self):
 +        re_envelope = re.search(r".*?value=\"Free\sDownload\".*?\n*?(.*?<.*?>\n*)*?\n*\s*?</form>", self.html).group(0) #get the whole request
 +        to_sort = re.findall(r"<input\stype=\"hidden\"\svalue=\"(.*?)\"\sname=\"(.*?)\"\s\/>", re_envelope)
 +        request_options = []
 +        
 +        for item in to_sort:       #Name value pairs are output reversed from regex, so we reorder them
 +            request_options.append((item[1], item[0]))
 +            
 +        herewego = self.load(self.pyfile.url, None, request_options) # the actual download-Page
 +        
 +        # comment this in, when it doesnt work
 +        # with open("DUMP__FS_.HTML", "w") as fp:
 +            # fp.write(herewego)
 +        
 +        to_sort = re.findall(r"<input\stype=\".*?\"\svalue=\"(\S*?)\".*?name=\"(\S*?)\"\s.*?\/>", herewego)
 +        request_options = []
 +        
 +        # comment this in, when it doesnt work as well
 +        #print "\n\n%s\n\n" % ";".join(["%s=%s" % x for x in to_sort])
 +        
 +        for item in to_sort:       #Same as above
 +            request_options.append((item[1], item[0]))
 +
 +        challenge = re.search(r"http://api\.recaptcha\.net/challenge\?k=([0-9A-Za-z]+)", herewego)
 +
 +        if challenge:
 +            re_captcha = ReCaptcha(self)
 +            challenge, result = re_captcha.challenge(challenge.group(1))
 +
 +            request_options.append(("recaptcha_challenge_field", challenge))
 +            request_options.append(("recaptcha_response_field", result))
 +
          return request_options
\ No newline at end of file  | 
