diff options
| author | 2015-01-05 19:31:35 +0100 | |
|---|---|---|
| committer | 2015-01-05 19:31:35 +0100 | |
| commit | 7b8593899e3d37846fb3ed94d47d9daba13a02d7 (patch) | |
| tree | 5427650c3dd14b0c2878a1081be3709458bf48db /module/plugins/hooks | |
| parent | Created plugin for Nitroflare.com (diff) | |
| parent | Spare code improvements (diff) | |
| download | pyload-7b8593899e3d37846fb3ed94d47d9daba13a02d7.tar.xz | |
Merge branch 'stable' of https://github.com/pyload/pyload into stable
Diffstat (limited to 'module/plugins/hooks')
| -rw-r--r-- | module/plugins/hooks/BypassCaptcha.py | 10 | ||||
| -rwxr-xr-x | module/plugins/hooks/Captcha9kw.py | 6 | ||||
| -rw-r--r-- | module/plugins/hooks/CaptchaBrotherhood.py | 10 | ||||
| -rw-r--r-- | module/plugins/hooks/ClickAndLoad.py | 104 | ||||
| -rw-r--r-- | module/plugins/hooks/DeathByCaptcha.py | 10 | ||||
| -rw-r--r-- | module/plugins/hooks/EasybytezCom.py | 5 | ||||
| -rw-r--r-- | module/plugins/hooks/ExpertDecoders.py | 10 | ||||
| -rw-r--r-- | module/plugins/hooks/ImageTyperz.py | 10 | ||||
| -rw-r--r-- | module/plugins/hooks/PremiumizeMe.py | 20 | ||||
| -rw-r--r-- | module/plugins/hooks/RPNetBiz.py | 20 | ||||
| -rw-r--r-- | module/plugins/hooks/RehostTo.py | 15 | 
11 files changed, 92 insertions, 128 deletions
| diff --git a/module/plugins/hooks/BypassCaptcha.py b/module/plugins/hooks/BypassCaptcha.py index a32de7f42..8e0d9d36e 100644 --- a/module/plugins/hooks/BypassCaptcha.py +++ b/module/plugins/hooks/BypassCaptcha.py @@ -1,11 +1,10 @@  # -*- coding: utf-8 -*-  from pycurl import FORM_FILE, LOW_SPEED_TIME -from thread import start_new_thread  from module.network.HTTPRequest import BadHeader  from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class BypassCaptchaException(Exception): @@ -29,7 +28,7 @@ class BypassCaptchaException(Exception):  class BypassCaptcha(Hook):      __name__    = "BypassCaptcha"      __type__    = "hook" -    __version__ = "0.05" +    __version__ = "0.06"      __config__ = [("force", "bool", "Force BC even if client is connected", False),                    ("passkey", "password", "Passkey", "")] @@ -116,7 +115,7 @@ class BypassCaptcha(Hook):              task.handler.append(self)              task.data['service'] = self.__name__              task.setWaiting(100) -            start_new_thread(self.processCaptcha, (task,)) +            self._processCaptcha(task)          else:              self.logInfo(_("Your %s account has not enough credits") % self.__name__) @@ -132,7 +131,8 @@ class BypassCaptcha(Hook):              self.respond(task.data['ticket'], False) -    def processCaptcha(self, task): +    @threaded +    def _processCaptcha(self, task):          c = task.captchaFile          try:              ticket, result = self.submit(c) diff --git a/module/plugins/hooks/Captcha9kw.py b/module/plugins/hooks/Captcha9kw.py index 33ad00c49..6eb4ef305 100755 --- a/module/plugins/hooks/Captcha9kw.py +++ b/module/plugins/hooks/Captcha9kw.py @@ -5,19 +5,18 @@ from __future__ import with_statement  import re  from base64 import b64encode -from thread import start_new_thread  from time import sleep  from module.network.HTTPRequest import BadHeader  from module.network.RequestFactory import getURL -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class Captcha9kw(Hook):      __name__    = "Captcha9kw"      __type__    = "hook" -    __version__ = "0.26" +    __version__ = "0.27"      __config__ = [("activated"     , "bool"    , "Activated"                                                                       , True                                                               ),                    ("ssl"           , "bool"    , "Use HTTPS"                                                                       , True                                                               ), @@ -68,6 +67,7 @@ class Captcha9kw(Hook):              return 0 +    @threaded      def _processCaptcha(self, task):          try:              with open(task.captchaFile, 'rb') as f: diff --git a/module/plugins/hooks/CaptchaBrotherhood.py b/module/plugins/hooks/CaptchaBrotherhood.py index 6d4127871..9a9f05b29 100644 --- a/module/plugins/hooks/CaptchaBrotherhood.py +++ b/module/plugins/hooks/CaptchaBrotherhood.py @@ -10,12 +10,11 @@ try:  except ImportError:      import Image -from thread import start_new_thread  from time import sleep  from urllib import urlencode  from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class CaptchaBrotherhoodException(Exception): @@ -39,7 +38,7 @@ class CaptchaBrotherhoodException(Exception):  class CaptchaBrotherhood(Hook):      __name__    = "CaptchaBrotherhood"      __type__    = "hook" -    __version__ = "0.06" +    __version__ = "0.07"      __config__ = [("username", "str", "Username", ""),                    ("force", "bool", "Force CT even if client is connected", False), @@ -154,7 +153,7 @@ class CaptchaBrotherhood(Hook):              task.handler.append(self)              task.data['service'] = self.__name__              task.setWaiting(100) -            start_new_thread(self.processCaptcha, (task,)) +            self._processCaptcha(task)          else:              self.logInfo(_("Your CaptchaBrotherhood Account has not enough credits")) @@ -164,7 +163,8 @@ class CaptchaBrotherhood(Hook):              res = self.get_api("complainCaptcha", task.data['ticket']) -    def processCaptcha(self, task): +    @threaded +    def _processCaptcha(self, task):          c = task.captchaFile          try:              ticket, result = self.submit(c) diff --git a/module/plugins/hooks/ClickAndLoad.py b/module/plugins/hooks/ClickAndLoad.py index 04aac2f10..8ef31ec1e 100644 --- a/module/plugins/hooks/ClickAndLoad.py +++ b/module/plugins/hooks/ClickAndLoad.py @@ -1,41 +1,10 @@  # -*- coding: utf-8 -*-  import socket -import thread - -from module.plugins.Hook import Hook - - -def proxy(self, *settings): -    thread.start_new_thread(server, (self,) + settings) -    lock = thread.allocate_lock() -    lock.acquire() -    lock.acquire() - - -def server(self, *settings): -    try: -        dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        dock_socket.bind((settings[0], settings[2])) -        dock_socket.listen(5) -        while True: -            client_socket = dock_socket.accept()[0] -            server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -            server_socket.connect(("127.0.0.1", settings[1])) -            thread.start_new_thread(forward, (client_socket, server_socket)) -            thread.start_new_thread(forward, (server_socket, client_socket)) -    except socket.error, e: -        if hasattr(e, "errno"): -            errno = e.errno -        else: -            errno = e.args[0] -        if errno == 98: -            self.logWarning(_("Click'N'Load: Port 9666 already in use")) -            return -        thread.start_new_thread(server, (self,) + settings) -    except: -        thread.start_new_thread(server, (self,) + settings) +from threading import Thread, Lock + +from module.plugins.Hook import Hook, threaded  def forward(source, destination): @@ -45,33 +14,68 @@ def forward(source, destination):          if string:              destination.sendall(string)          else: -            #source.shutdown(socket.SHUT_RD)              destination.shutdown(socket.SHUT_WR)  class ClickAndLoad(Hook):      __name__    = "ClickAndLoad"      __type__    = "hook" -    __version__ = "0.24" +    __version__ = "0.25" -    __config__ = [("activated", "bool", "Activated", True), -                  ("extern", "bool", "Allow external link adding", False)] +    __config__ = [("activated", "bool", "Activated"                                     , True ), +                  ("port"     , "int" , "Port"                                          , 9666 ), +                  ("extern"   , "bool", "Listen for requests coming from WAN (internet)", False)]      __description__ = """Click'N'Load hook plugin"""      __license__     = "GPLv3"      __authors__     = [("RaNaN", "RaNaN@pyload.de"), -                       ("mkaay", "mkaay@mkaay.de")] +                       ("Walter Purcaro", "vuolter@gmail.com")]      def coreReady(self): -        self.port = int(self.config['webinterface']['port']) -        if self.config['webinterface']['activated']: -            try: -                if self.getConfig("extern"): -                    ip = "0.0.0.0" -                else: -                    ip = "127.0.0.1" - -                thread.start_new_thread(proxy, (self, ip, self.port, 9666)) -            except: -                self.logError(_("ClickAndLoad port already in use")) +        if not self.config['webinterface']['activated']: +            return + +        ip      = "0.0.0.0" if self.getConfig("extern") else "127.0.0.1" +        webport = int(self.config['webinterface']['port']) +        cnlport = self.getConfig('port') + +        self.proxy(ip, webport, cnlport) + + +    @threaded +    def proxy(self, ip, webport, cnlport): +        hookManager.startThread(self.server, ip, webport, cnlport) +        lock = Lock() +        lock.acquire() +        lock.acquire() + + +    def server(self, ip, webport, cnlport): +        try: +            dock_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +            dock_socket.bind((ip, cnlport)) +            dock_socket.listen(5) + +            while True: +                server_socket = dock_socket.accept()[0] +                client_socket = socket.create_connection(("127.0.0.1", webport)) + +                hookManager.startThread(forward, server_socket, client_socket) +                hookManager.startThread(forward, client_socket, server_socket) + +        except socket.error, e: +            if hasattr(e, "errno"): +                errno = e.errno +            else: +                errno = e.args[0] + +            if errno == 98: +                self.logWarning(_("Port %s already in use") % cnlport) +            else: +                self.logError(e) +                self.server(ip, webport, cnlport) + +        except Exception, e: +            self.logError(e) +            self.server(ip, webport, cnlport) diff --git a/module/plugins/hooks/DeathByCaptcha.py b/module/plugins/hooks/DeathByCaptcha.py index f03ac4567..98412c218 100644 --- a/module/plugins/hooks/DeathByCaptcha.py +++ b/module/plugins/hooks/DeathByCaptcha.py @@ -6,13 +6,12 @@ import re  from base64 import b64encode  from pycurl import FORM_FILE, HTTPHEADER -from thread import start_new_thread  from time import sleep  from module.common.json_layer import json_loads  from module.network.HTTPRequest import BadHeader  from module.network.RequestFactory import getRequest -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class DeathByCaptchaException(Exception): @@ -52,7 +51,7 @@ class DeathByCaptchaException(Exception):  class DeathByCaptcha(Hook):      __name__    = "DeathByCaptcha"      __type__    = "hook" -    __version__ = "0.04" +    __version__ = "0.05"      __config__ = [("username", "str", "Username", ""),                    ("passkey", "password", "Password", ""), @@ -195,7 +194,7 @@ class DeathByCaptcha(Hook):              task.handler.append(self)              task.data['service'] = self.__name__              task.setWaiting(180) -            start_new_thread(self.processCaptcha, (task,)) +            self._processCaptcha(task)      def captchaInvalid(self, task): @@ -210,7 +209,8 @@ class DeathByCaptcha(Hook):                  self.logError(e) -    def processCaptcha(self, task): +    @threaded +    def _processCaptcha(self, task):          c = task.captchaFile          try:              ticket, result = self.submit(c) diff --git a/module/plugins/hooks/EasybytezCom.py b/module/plugins/hooks/EasybytezCom.py index 16149580c..1606c9f30 100644 --- a/module/plugins/hooks/EasybytezCom.py +++ b/module/plugins/hooks/EasybytezCom.py @@ -8,7 +8,7 @@ from module.plugins.internal.MultiHook import MultiHook  class EasybytezCom(MultiHook):      __name__    = "EasybytezCom"      __type__    = "hook" -    __version__ = "0.05" +    __version__ = "0.06"      __config__ = [("mode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),                    ("pluginlist", "str", "Hoster list (comma separated)", "")] @@ -19,8 +19,7 @@ class EasybytezCom(MultiHook):      def getHosters(self): -        self.account = self.core.accountManager.getAccountPlugin(self.__name__) -        user = self.account.selectAccount()[0] +        user, data = self.account.selectAccount()          try:              req  = self.account.getAccountRequest(user) diff --git a/module/plugins/hooks/ExpertDecoders.py b/module/plugins/hooks/ExpertDecoders.py index 54de8eb53..c80401003 100644 --- a/module/plugins/hooks/ExpertDecoders.py +++ b/module/plugins/hooks/ExpertDecoders.py @@ -4,18 +4,17 @@ from __future__ import with_statement  from base64 import b64encode  from pycurl import LOW_SPEED_TIME -from thread import start_new_thread  from uuid import uuid4  from module.network.HTTPRequest import BadHeader  from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class ExpertDecoders(Hook):      __name__    = "ExpertDecoders"      __type__    = "hook" -    __version__ = "0.03" +    __version__ = "0.04"      __config__ = [("force", "bool", "Force CT even if client is connected", False),                    ("passkey", "password", "Access key", "")] @@ -50,7 +49,8 @@ class ExpertDecoders(Hook):              return 0 -    def processCaptcha(self, task): +    @threaded +    def _processCaptcha(self, task):          task.data['ticket'] = ticket = uuid4()          result = None @@ -85,7 +85,7 @@ class ExpertDecoders(Hook):          if self.getCredits() > 0:              task.handler.append(self)              task.setWaiting(100) -            start_new_thread(self.processCaptcha, (task,)) +            self._processCaptcha(task)          else:              self.logInfo(_("Your ExpertDecoders Account has not enough credits")) diff --git a/module/plugins/hooks/ImageTyperz.py b/module/plugins/hooks/ImageTyperz.py index f89d64c37..d448d1be9 100644 --- a/module/plugins/hooks/ImageTyperz.py +++ b/module/plugins/hooks/ImageTyperz.py @@ -6,10 +6,9 @@ import re  from base64 import b64encode  from pycurl import FORM_FILE, LOW_SPEED_TIME -from thread import start_new_thread  from module.network.RequestFactory import getURL, getRequest -from module.plugins.Hook import Hook +from module.plugins.Hook import Hook, threaded  class ImageTyperzException(Exception): @@ -33,7 +32,7 @@ class ImageTyperzException(Exception):  class ImageTyperz(Hook):      __name__    = "ImageTyperz"      __type__    = "hook" -    __version__ = "0.05" +    __version__ = "0.06"      __config__ = [("username", "str", "Username", ""),                    ("passkey", "password", "Password", ""), @@ -130,7 +129,7 @@ class ImageTyperz(Hook):              task.handler.append(self)              task.data['service'] = self.__name__              task.setWaiting(100) -            start_new_thread(self.processCaptcha, (task,)) +            self._processCaptcha(task)          else:              self.logInfo(_("Your %s account has not enough credits") % self.__name__) @@ -150,7 +149,8 @@ class ImageTyperz(Hook):                  self.logError(_("Bad captcha solution received, refund request failed"), res) -    def processCaptcha(self, task): +    @threaded +    def _processCaptcha(self, task):          c = task.captchaFile          try:              ticket, result = self.submit(c) diff --git a/module/plugins/hooks/PremiumizeMe.py b/module/plugins/hooks/PremiumizeMe.py index c0717afc7..d334ddd25 100644 --- a/module/plugins/hooks/PremiumizeMe.py +++ b/module/plugins/hooks/PremiumizeMe.py @@ -7,7 +7,7 @@ from module.plugins.internal.MultiHook import MultiHook  class PremiumizeMe(MultiHook):      __name__    = "PremiumizeMe"      __type__    = "hook" -    __version__ = "0.15" +    __version__ = "0.16"      __config__ = [("mode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),                    ("pluginlist", "str", "Hoster list (comma separated)", ""), @@ -20,12 +20,8 @@ class PremiumizeMe(MultiHook):      def getHosters(self): -        # If no accounts are available there will be no hosters available -        if not self.account or not self.account.canUse(): -            return [] -          # Get account data -        (user, data) = self.account.selectAccount() +        user, data = self.account.selectAccount()          # Get supported hosters list from premiumize.me using the          # json API v1 (see https://secure.premiumize.me/?show=api) @@ -39,15 +35,3 @@ class PremiumizeMe(MultiHook):          # Extract hosters from json file          return data['result']['hosterlist'] - - -    def coreReady(self): -        # Get account plugin and check if there is a valid account available -        self.account = self.core.accountManager.getAccountPlugin("PremiumizeMe") -        if not self.account.canUse(): -            self.account = None -            self.logError(_("Please add a valid premiumize.me account first and restart pyLoad")) -            return - -        # Run the overwriten core ready which actually enables the multihoster hook -        return MultiHook.coreReady(self) diff --git a/module/plugins/hooks/RPNetBiz.py b/module/plugins/hooks/RPNetBiz.py index bbbe8e128..9c88e6c01 100644 --- a/module/plugins/hooks/RPNetBiz.py +++ b/module/plugins/hooks/RPNetBiz.py @@ -7,7 +7,7 @@ from module.plugins.internal.MultiHook import MultiHook  class RPNetBiz(MultiHook):      __name__    = "RPNetBiz"      __type__    = "hook" -    __version__ = "0.12" +    __version__ = "0.13"      __config__ = [("mode", "all;listed;unlisted", "Use for hosters (if supported):", "all"),                    ("pluginlist", "str", "Hoster list (comma separated)", ""), @@ -20,12 +20,8 @@ class RPNetBiz(MultiHook):      def getHosters(self): -        # No hosts supported if no account -        if not self.account or not self.account.canUse(): -            return [] -          # Get account data -        (user, data) = self.account.selectAccount() +        user, data = self.account.selectAccount()          res = self.getURL("https://premium.rpnet.biz/client_api.php",                       get={'username': user, 'password': data['password'], 'action': "showHosterList"}) @@ -37,15 +33,3 @@ class RPNetBiz(MultiHook):          # Extract hosters from json file          return hoster_list['hosters'] - - -    def coreReady(self): -        # Get account plugin and check if there is a valid account available -        self.account = self.core.accountManager.getAccountPlugin("RPNetBiz") -        if not self.account.canUse(): -            self.account = None -            self.logError(_("Please enter your %s account or deactivate this plugin") % "rpnet") -            return - -        # Run the overwriten core ready which actually enables the multihoster hook -        return MultiHook.coreReady(self) diff --git a/module/plugins/hooks/RehostTo.py b/module/plugins/hooks/RehostTo.py index c3b626bf7..527770eb6 100644 --- a/module/plugins/hooks/RehostTo.py +++ b/module/plugins/hooks/RehostTo.py @@ -6,7 +6,7 @@ from module.plugins.internal.MultiHook import MultiHook  class RehostTo(MultiHook):      __name__    = "RehostTo"      __type__    = "hook" -    __version__ = "0.45" +    __version__ = "0.46"      __config__ = [("mode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),                    ("pluginlist", "str", "Hoster list (comma separated)", ""), @@ -25,16 +25,9 @@ class RehostTo(MultiHook):      def coreReady(self): -        self.account = self.core.accountManager.getAccountPlugin("RehostTo") +        super(RehostTo, self).coreReady() -        user = self.account.selectAccount()[0] +        user, data = self.account.selectAccount() -        if not user: -            self.logError(_("Please add your rehost.to account first and restart pyLoad")) -            return - -        data = self.account.getAccountInfo(user) -        self.ses = data['ses'] +        self.ses      = data['ses']          self.long_ses = data['long_ses'] - -        return MultiHook.coreReady(self) | 
