diff --git a/plugin.video.alfa/core/cloudflare.py b/plugin.video.alfa/core/cloudflare.py index b4948b71..5fd485f7 100755 --- a/plugin.video.alfa/core/cloudflare.py +++ b/plugin.video.alfa/core/cloudflare.py @@ -9,7 +9,7 @@ import urllib import urlparse from platformcode import logger -from decimal import Decimal, ROUND_UP +from decimal import Decimal class Cloudflare: def __init__(self, response): @@ -62,18 +62,17 @@ class Cloudflare: def get_url(self): # Metodo #1 (javascript) if self.js_data.get("wait", 0): - jschl_answer = self.decode2(self.js_data["value"]) + jschl_answer = self.decode(self.js_data["value"]) for op, v in self.js_data["op"]: - #jschl_answer = eval(str(jschl_answer) + op + str(self.decode2(v))) if op == '+': - jschl_answer = jschl_answer + self.decode2(v) + jschl_answer = jschl_answer + self.decode(v) elif op == '-': - jschl_answer = jschl_answer - self.decode2(v) + jschl_answer = jschl_answer - self.decode(v) elif op == '*': - jschl_answer = jschl_answer * self.decode2(v) + jschl_answer = jschl_answer * self.decode(v) elif op == '/': - jschl_answer = jschl_answer / self.decode2(v) + jschl_answer = jschl_answer / self.decode(v) self.js_data["params"]["jschl_answer"] = round(jschl_answer, 10) + len(self.domain) @@ -93,7 +92,7 @@ class Cloudflare: return response - def decode2(self, data): + def decode(self, data): data = re.sub("\!\+\[\]", "1", data) data = re.sub("\!\!\[\]", "1", data) data = re.sub("\[\]", "0", data) @@ -112,59 +111,4 @@ class Cloudflare: for n in aux: num2 += str(eval(n)) - #return float(num1) / float(num2) - #return Decimal(Decimal(num1) / Decimal(num2)).quantize(Decimal('.0000000000000001'), rounding=ROUND_UP) return Decimal(Decimal(num1) / Decimal(num2)).quantize(Decimal('.0000000000000001')) - - def decode(self, data): - t = time.time() - timeout = False - - while not timeout: - data = re.sub("\[\]", "''", data) - data = re.sub("!\+''", "+1", data) - data = re.sub("!''", "0", data) - data = re.sub("!0", "1", data) - - if "(" in data: - x, y = data.rfind("("), data.find(")", data.rfind("(")) + 1 - part = data[x + 1:y - 1] - else: - x = 0 - y = len(data) - part = data - - val = "" - - if not part.startswith("+"): part = "+" + part - - for i, ch in enumerate(part): - if ch == "+": - if not part[i + 1] == "'": - if val == "": val = 0 - if type(val) == str: - val = val + self.get_number(part, i + 1) - else: - val = val + int(self.get_number(part, i + 1)) - else: - val = str(val) - val = val + self.get_number(part, i + 1) or "0" - - if type(val) == str: val = "'%s'" % val - data = data[0:x] + str(val) + data[y:] - - timeout = time.time() - t > self.timeout - - if not "+" in data and not "(" in data and not ")" in data: - return int(self.get_number(data)) - - def get_number(self, str, start=0): - ret = "" - for chr in str[start:]: - try: - int(chr) - except: - if ret: break - else: - ret += chr - return ret