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

249 lines
8.7 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
try: # Python 2
import urllib2
from urllib2 import URLError as UrlError
except ImportError: # Python 3
import urllib.request as urllib2
from urllib.error import URLError as UrlError
from resources.lib.comaddon import addon, dialog, VSlog
from resources.lib.config import GestionCookie
from resources.lib.parser import cParser
from resources.lib.util import urlEncode
UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0'
headers = {'User-Agent': UA}
class NoRedirection(urllib2.HTTPErrorProcessor):
def http_response(self, request, response):
code, msg, hdrs = response.code, response.msg, response.info()
return response
https_response = http_response
class cPremiumHandler:
ADDON = addon()
DIALOG = dialog()
def __init__(self, sHosterIdentifier):
self.__sHosterIdentifier = sHosterIdentifier.lower()
self.__sDisplayName = 'Premium mode'
self.isLogin = False
self.__LoginTry = False
self.__ssl = False
self.__Ispremium = False
bIsPremium = self.ADDON.getSetting('hoster_' + str(self.__sHosterIdentifier) + '_premium')
if (bIsPremium == 'true'):
VSlog("Utilise compte premium pour hoster " + str(self.__sHosterIdentifier))
self.__Ispremium = True
else:
VSlog("Utilise compte gratuit pour hoster: " + str(self.__sHosterIdentifier))
def isPremiumModeAvailable(self):
return self.__Ispremium
def getUsername(self):
sUsername = self.ADDON.getSetting('hoster_' + str(self.__sHosterIdentifier) + '_username')
return sUsername
def getPassword(self):
sPassword = self.ADDON.getSetting('hoster_' + str(self.__sHosterIdentifier) + '_password')
return sPassword
def AddCookies(self):
cookies = GestionCookie().Readcookie(self.__sHosterIdentifier)
return 'Cookie=' + cookies
def Checklogged(self, code):
if 'uptobox' in self.__sHosterIdentifier:
if '//uptobox.com/?op=logout&' in code or 'Success' in code:
return True
if 'onefichier' in self.__sHosterIdentifier:
if 'premium' in code or 'jqueryFileTree' in code or '1fichier.com/logout' in code: # test ok mais pas convaincu....
return True
return False
def CheckCookie(self):
cookies = GestionCookie().Readcookie(self.__sHosterIdentifier)
if cookies != '':
return True
return False
def Authentificate(self):
# un seul essais par session, pas besoin de bombarder le serveur
if self.__LoginTry:
return False
self.__LoginTry = True
if not self.__Ispremium:
return False
post_data = {}
if 'uptobox' in self.__sHosterIdentifier:
url = 'https://uptobox.com/?op=login&referer=homepage'
post_data['login'] = self.getUsername()
post_data['password'] = self.getPassword()
elif 'onefichier' in self.__sHosterIdentifier:
url = 'https://1fichier.com/login.pl'
post_data['mail'] = self.getUsername()
post_data['pass'] = self.getPassword()
post_data['lt'] = 'on'
post_data['purge'] = 'on'
post_data['valider'] = 'Send'
self.__ssl = True
elif 'uploaded' in self.__sHosterIdentifier:
url = 'http://uploaded.net/io/login'
post_data['id'] = self.getUsername()
post_data['pw'] = self.getPassword()
# si aucun de trouve on retourne
else:
return False
if (self.__ssl):
try:
import ssl
context = ssl._create_unverified_context()
except:
self.__ssl = False
if 'uptobox' in self.__sHosterIdentifier:
data = urlEncode(post_data)
opener = urllib2.build_opener(NoRedirection)
opener.addheaders = [('User-Agent', UA)]
opener.addheaders.append(('Content-Type', 'application/x-www-form-urlencoded'))
opener.addheaders.append(('Referer', str(url)))
opener.addheaders.append(('Content-Length', str(len(data))))
try:
response = opener.open(url, data)
head = response.info()
except UrlError:
return ''
else:
req = urllib2.Request(url, urlEncode(post_data), headers)
try:
if (self.__ssl):
response = urllib2.urlopen(req, context=context)
else:
response = urllib2.urlopen(req)
except UrlError as e:
if getattr(e, "code", None) == 403:
# login denied
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
elif getattr(e, "code", None) == 502:
# login denied
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
elif getattr(e, "code", None) == 234:
# login denied
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
else:
VSlog("debug" + str(getattr(e, "code", None)))
VSlog("debug" + str(getattr(e, "reason", None)))
self.isLogin = False
return False
sHtmlContent = response.read()
head = response.headers
response.close()
if 'uptobox' in self.__sHosterIdentifier:
if 'xfss' in head['Set-Cookie']:
self.isLogin = True
else:
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
return False
elif 'onefichier' in self.__sHosterIdentifier:
if 'You are logged in. This page will redirect you.' in sHtmlContent:
self.isLogin = True
else:
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
return False
elif 'uploaded' in self.__sHosterIdentifier:
if sHtmlContent == '':
self.isLogin = True
else:
self.DIALOG.VSinfo('Authentification rate', self.__sDisplayName)
return False
else:
return False
# get cookie
cookies = ''
if 'Set-Cookie' in head:
oParser = cParser()
sPattern = '(?:^|,) *([^;,]+?)=([^;,\/]+?);'
aResult = oParser.parse(str(head['Set-Cookie']), sPattern)
# print(aResult)
if (aResult[0] == True):
for cook in aResult[1]:
if 'deleted' in cook[1]:
continue
cookies = cookies + cook[0] + '=' + cook[1] + ';'
# save cookie
GestionCookie().SaveCookie(self.__sHosterIdentifier, cookies)
self.DIALOG.VSinfo('Authentification reussie', self.__sDisplayName)
VSlog('Auhentification reussie')
return True
def GetHtmlwithcookies(self, url, data, cookies):
req = urllib2.Request(url, data, headers)
if not (data == None):
req.add_header('Referer', url)
req.add_header('Cookie', cookies)
try:
response = urllib2.urlopen(req)
except UrlError:
return ''
sHtmlContent = response.read()
response.close()
return sHtmlContent
def GetHtml(self, url, data=None):
cookies = GestionCookie().Readcookie(self.__sHosterIdentifier)
# aucun ne marche sans cookies
if (cookies == '') and not self.__LoginTry and self.__Ispremium:
self.Authentificate()
if not self.isLogin:
return ''
cookies = GestionCookie().Readcookie(self.__sHosterIdentifier)
sHtmlContent = self.GetHtmlwithcookies(url, data, cookies)
# Les cookies ne sont plus valables, mais on teste QUE si la personne n'a pas essaye de s'authentifier
if not self.Checklogged(sHtmlContent) and not self.__LoginTry and self.__Ispremium:
VSlog('Cookies non valables')
self.Authentificate()
if self.isLogin:
cookies = GestionCookie().Readcookie(self.__sHosterIdentifier)
sHtmlContent = self.GetHtmlwithcookies(url, data, cookies)
else:
return ''
return sHtmlContent