mirror of
https://github.com/fHDHR/fHDHR_NextPVR.git
synced 2025-12-06 06:56:57 -05:00
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
import xmltodict
|
|
import hashlib
|
|
|
|
import fHDHR.tools
|
|
import fHDHR.exceptions
|
|
|
|
|
|
class OriginService():
|
|
|
|
def __init__(self, fhdhr):
|
|
self.fhdhr = fhdhr
|
|
|
|
self.nextpvr_address = ('%s%s:%s' %
|
|
("https://" if self.fhdhr.config.dict["origin"]["ssl"] else "http://",
|
|
self.fhdhr.config.dict["origin"]["address"],
|
|
str(self.fhdhr.config.dict["origin"]["port"]),
|
|
))
|
|
|
|
self.login()
|
|
|
|
def login(self):
|
|
self.fhdhr.logger.info("Logging into NextPVR")
|
|
self.sid = self.get_sid()
|
|
if not self.sid:
|
|
raise fHDHR.exceptions.OriginSetupError("NextPVR Login Failed")
|
|
else:
|
|
self.fhdhr.logger.info("NextPVR Login Success")
|
|
self.fhdhr.config.write(self.fhdhr.config.dict["main"]["dictpopname"], 'sid', self.sid)
|
|
|
|
def get_sid(self):
|
|
if self.fhdhr.config.dict["origin"]["sid"]:
|
|
return self.fhdhr.config.dict["origin"]["sid"]
|
|
|
|
initiate_url = '%s/service?method=session.initiate&ver=1.0&device=fhdhr' % self.nextpvr_address
|
|
|
|
initiate_req = self.fhdhr.web.session.get(initiate_url)
|
|
initiate_dict = xmltodict.parse(initiate_req.content)
|
|
|
|
sid = initiate_dict['rsp']['sid']
|
|
salt = initiate_dict['rsp']['salt']
|
|
md5PIN = hashlib.md5(str(self.fhdhr.config.dict["origin"]['pin']).encode('utf-8')).hexdigest()
|
|
string = ':%s:%s' % (md5PIN, salt)
|
|
clientKey = hashlib.md5(string.encode('utf-8')).hexdigest()
|
|
|
|
login_url = ('%s/service?method=session.login&sid=%s&md5=%s' %
|
|
(self.nextpvr_address, sid, clientKey))
|
|
login_req = self.fhdhr.web.session.get(login_url)
|
|
login_dict = xmltodict.parse(login_req.content)
|
|
|
|
loginsuccess = None
|
|
if login_dict['rsp']['@stat'] == "ok":
|
|
if login_dict['rsp']['allow_watch'] == "true":
|
|
loginsuccess = sid
|
|
|
|
return loginsuccess
|