diff options
Diffstat (limited to 'module/plugins/internal/XFSAccount.py')
-rw-r--r-- | module/plugins/internal/XFSAccount.py | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/module/plugins/internal/XFSAccount.py b/module/plugins/internal/XFSAccount.py index 75ff4a362..5a6f0ee9c 100644 --- a/module/plugins/internal/XFSAccount.py +++ b/module/plugins/internal/XFSAccount.py @@ -6,13 +6,13 @@ import urlparse from module.plugins.internal.Account import Account # from module.plugins.internal.MultiAccount import MultiAccount -from module.plugins.internal.Plugin import parse_html_form, set_cookie +from module.plugins.internal.Plugin import parse_html_form, parse_time, set_cookie class XFSAccount(Account): __name__ = "XFSAccount" __type__ = "account" - __version__ = "0.51" + __version__ = "0.52" __status__ = "testing" __description__ = """XFileSharing account plugin""" @@ -38,6 +38,7 @@ class XFSAccount(Account): LEECH_TRAFFIC_UNIT = "MB" #: Used only if no group <U> was found LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|account was banned|Error<' + LOGIN_BAN_PATTERN = r'>(Your IP.+?)<a' LOGIN_SKIP_PATTERN = r'op=logout' @@ -63,13 +64,13 @@ class XFSAccount(Account): if not self.PLUGIN_URL: #@TODO: Remove in 0.4.10 return - html = self.load(self.PLUGIN_URL, - get={'op': "my_account"}, - cookies=self.COOKIES) + self.html = self.load(self.PLUGIN_URL, + get={'op': "my_account"}, + cookies=self.COOKIES) - premium = True if re.search(self.PREMIUM_PATTERN, html) else False + premium = True if re.search(self.PREMIUM_PATTERN, self.html) else False - m = re.search(self.VALID_UNTIL_PATTERN, html) + m = re.search(self.VALID_UNTIL_PATTERN, self.html) if m is not None: expiredate = m.group(1).strip() self.log_debug("Expire date: " + expiredate) @@ -92,7 +93,7 @@ class XFSAccount(Account): else: self.log_debug("VALID_UNTIL_PATTERN not found") - m = re.search(self.TRAFFIC_LEFT_PATTERN, html) + m = re.search(self.TRAFFIC_LEFT_PATTERN, self.html) if m is not None: try: traffic = m.groupdict() @@ -120,7 +121,7 @@ class XFSAccount(Account): else: self.log_debug("TRAFFIC_LEFT_PATTERN not found") - leech = [m.groupdict() for m in re.finditer(self.LEECH_TRAFFIC_PATTERN, html)] + leech = [m.groupdict() for m in re.finditer(self.LEECH_TRAFFIC_PATTERN, self.html)] if leech: leechtraffic = 0 try: @@ -167,12 +168,12 @@ class XFSAccount(Account): if not self.LOGIN_URL: self.LOGIN_URL = urlparse.urljoin(self.PLUGIN_URL, "login.html") - html = self.load(self.LOGIN_URL, cookies=self.COOKIES) + self.html = self.load(self.LOGIN_URL, cookies=self.COOKIES) - if re.search(self.LOGIN_SKIP_PATTERN, html): + if re.search(self.LOGIN_SKIP_PATTERN, self.html): self.skip_login() - action, inputs = parse_html_form('name="FL"', html) + action, inputs = parse_html_form('name="FL"', self.html) if not inputs: inputs = {'op' : "login", 'redirect': self.PLUGIN_URL} @@ -185,7 +186,40 @@ class XFSAccount(Account): else: url = self.LOGIN_URL - html = self.load(url, post=inputs, cookies=self.COOKIES) + self.html = self.load(url, post=inputs, cookies=self.COOKIES) - if re.search(self.LOGIN_FAIL_PATTERN, html): - self.fail_login() + self.check_errors() + + + def check_errors(self): + if not self.html: + self.log_warning(_("No html code to check")) + return + + m = re.search(self.LOGIN_BAN_PATTERN, self.html) + if m is not None: + try: + errmsg = m.group(1) + + except (AttributeError, IndexError): + errmsg = m.group(0) + + finally: + errmsg = re.sub(r'<.*?>', " ", errmsg.strip()) + + self.timeout = parse_time(errmsg) + self.fail_login(errmsg) + + m = re.search(self.LOGIN_FAIL_PATTERN, self.html) + if m is not None: + try: + errmsg = m.group(1) + + except (AttributeError, IndexError): + errmsg = m.group(0) + + finally: + errmsg = re.sub(r'<.*?>', " ", errmsg.strip()) + + self.timeout = self.LOGIN_TIMEOUT + self.fail_login(errmsg) |