astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/lib/stormwall.py

130 lines
4.5 KiB
Python
Raw Normal View History

import re
import os
import xbmcaddon
import time
from resources.lib.comaddon import VSlog, xbmc, VSPath, dialog
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.config import GestionCookie
UA = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'
class Stormwall(object):
def __init__(self):
self.cE = ''
self.cK = ''
self.cN = ''
self.cO = ''
self._0xbd1168 = "0123456789qwertyuiopasdfghjklzxcvbnm:?!"
self.a = []
self.b = {}
self.state = False
self.hostComplet = ''
self.host = ''
self.url = ''
def parseInt(self, sin):
return int(''.join([c for c in re.split(r'[,.]',str(sin))[0] if c.isdigit()])) if re.match(r'\d+', str(sin), re.M) and not callable(sin) else None
def func3(self, _0x32d742, _0x69aeb7):
_0x5db4b0 = len(self.a) - 1
_0x239b12 = ""
_0x2b4227 = 0
for _0x2b4227 in range(len(_0x69aeb7)):
_0x44dcfd = _0x69aeb7[_0x2b4227];
if not _0x44dcfd in self.b:
_0x239b12 = _0x239b12 + _0x44dcfd
else:
_0x52a03d = self.b[_0x44dcfd] + _0x32d742
if _0x52a03d > _0x5db4b0:
_0x52a03d = _0x52a03d - _0x5db4b0 - 1
else:
if _0x52a03d < 0:
_0x52a03d = _0x5db4b0 + _0x52a03d + 1
_0x239b12 = _0x239b12 + self.a[_0x52a03d];
return _0x239b12
def func5(self, _0x106033, _0x205fd6):
_0x31b1ca = len(self.a) - 1
_0x530eb7 = self.parseInt(_0x106033)
_0x20559e = ""
_0x1314ae = 0
for _0x1314ae in range(len(_0x205fd6)):
_0x1c696a = "" + _0x205fd6[_0x1314ae]
_0x20559e = _0x20559e + self.func3(_0x530eb7 * -1, _0x1c696a)
_0x530eb7 = _0x530eb7 + 1
if _0x530eb7 > _0x31b1ca:
_0x530eb7 = 0
return _0x20559e
def CheckIfActive(self, html):
if 'stormwall' in str(html):
return True
return False
def DecryptCookie(self, content):
#Le nom peut varie selon les pages.
if "const" in content:
parseName = "const"
else:
parseName = "var"
self.cE = re.search(parseName + ' cE = "([^"]+)"', str(content)).group(1)
self.cK = re.search(parseName + ' cK = ([0-9]+)', str(content)).group(1)
self.cN = re.search(parseName + ' cN = "([^"]+)"', str(content)).group(1)
self.cO = re.search(parseName + ' cO = "([^"]+)"', str(content)).group(1)
self.a = []
self.b = {}
for i in range(len(self._0xbd1168)):
self.a.append(self._0xbd1168[i])
self.b[self._0xbd1168[i]] = i
_0x3b45bc = self.func5(self.cK, self.cE)
VSlog ('cookie : '+ self.cN + "=" + _0x3b45bc)
return self.cN + "=" + _0x3b45bc
def GetHtml(self, url, data=None):
self.hostComplet = re.sub('(https*:\/\/[^/]+)(\/*.*)', '\\1', url)
self.host = re.sub('https*:\/\/', '', self.hostComplet)
self.url = url
# on cherche des precedents cookies
cookies = GestionCookie().Readcookie(self.host.replace('.', '_'))
htmlcontent = self.htmlrequest(url, cookies, data)
if not self.CheckIfActive(htmlcontent):
return htmlcontent
elif "recaptcha3key" in htmlcontent:
dialog().VSok('Recaptcha active, reessayer plus tard')
return htmlcontent
# on cherche le nouveau cookie
try:
cookies = self.DecryptCookie(htmlcontent)
except:
VSlog('Erreur decodage Stormwall')
return ''
VSlog('Protection Stormwall active')
GestionCookie().SaveCookie(self.host.replace('.', '_'), cookies)
htmlcontent = self.htmlrequest(url, cookies, data)
return htmlcontent
def htmlrequest(self, url, cookies, data):
oRequestHandler = cRequestHandler(url)
oRequestHandler.addHeaderEntry('User-Agent', UA)
oRequestHandler.addHeaderEntry('Accept-Encoding', 'gzip, deflate')
if cookies:
oRequestHandler.addCookieEntry(cookies.split('=')[0], cookies.split('=')[1])
oRequestHandler.addHeaderEntry('Referer', url)
sHtmlContent = oRequestHandler.request()
return sHtmlContent